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를 사용하여 파티션을 새로 만든 후 포맷하는 것이 좋을 것 같다.
댓글
댓글 쓰기