mkfs.fat Device or resource busy 에러 해결법

 리눅스에서 SD 카드를 포맷할 때 아래와 같이 "Device or resource busy"에러를 출력하며 포맷이 되지 않는 경우가 있다.


mkfs.fat: unable to open /dev/mmcblk0p1: Device or resource busy


해결법을 찾아보았다.


이 문제의 원인은 

1. 파티션 dev path 가 맞지 않거나, 

2. umount가 완전히 이루어 지지 않았거나, 

3. mbr파티션에 문제가 있어 발생한다고 한다. 


파티션에 문제가 있는 경우 fdisk를 사용하면 문제를 해결할 수 있다.


umount에 문제가 있는 경우,

umount할 때 -l 옵션이 사용되는 경우 umount 명령이 끝나도 커널 내부에서 리소스가 계속 사용될 가능성이 있다고 한다. 

# umount -l /mnt/mmc

umount2("/mnt/mmc",MNT_DETACH);


이런 경우 일정 시간 후 다시 시도하면 에러 없이 포맷이 되는 경우가 있다.

또, umount 가 되지 않을 때 "lsof" , "fuser" 명령어를 사용하여 어떤 프로세스가 mmc를 사용하고 있는지도 확인 가능하다.

* lsof에서 사용 내역이 없다고 나와도, fuser에서 나올수 있다. 

lsof, fuser 명령에서도 mmc를 사용하는 프로세스가 없는 경우에도 "Device or resource busy"에러가 발생할 경우, umount에 -lf 옵션을 두어 강제로 언마운트 후 SD 카드를 포맷하면 "Device or resource busy"에러가 나타나지 않을 확률이 높아진다.

# umount -lf /mnt/mmc

umount2("/mnt/mmc",MNT_DETACH | MNT_FORCE);


* fat32에서는 "-f","MNT_FORCE"를 지원하지 않는다. (https://man7.org/linux/man-pages/man2/umount.2.html)


이렇게 해도 "Device or resource busy"에러가 발생할 경우 mkfs.fat에 --mbr=a 옵션을 추가해서 시도해 볼 수도 있다.  하지만 이런 경우 파티션에 문제가 있을 확률이 많으므로 fdisk를 사용하여 파티션을 새로 만든 후 포맷하는 것이 좋을 것 같다.




댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

리눅스 디바이스 드라이버 기초와 예제

python winsound를 이용한 윈도우 환경에서 소리 재생 예제