Linux 서버를 운영하다 보면 파일을 삭제하거나 디스크를 마운트 해제(Unmount)할 때 Device or resource busy라는 오류를 만나는 경우가 있습니다. 이 오류는 해당 파일이나 디렉터리, 장치(Device)를 현재 다른 프로세스가 사용하고 있기 때문에 운영체제가 작업을 허용하지 않는다는 의미입니다.
특히 USB 저장장치, NFS, Docker 볼륨, 로그 파일, 마운트된 디스크 등을 다룰 때 자주 발생하며, 강제로 삭제하거나 언마운트하기 전에 어떤 프로세스가 사용 중인지 먼저 확인하는 것이 중요합니다.
이번 글에서는 Device or resource busy 오류가 발생하는 원인과 해결 방법을 알아보겠습니다.
Device or resource busy란 무엇인가?
Linux에서는 사용 중인 파일이나 장치를 보호하기 위해 다른 프로세스가 접근 중인 경우 특정 작업을 제한합니다.
대표적인 오류 예시는 다음과 같습니다.
rm: cannot remove 'test.log': Device or resource busy
또는
umount: /mnt/data: target is busy
또는
Device or resource busy
즉, 다른 프로세스가 해당 리소스를 사용하고 있어 작업을 수행할 수 없는 상태입니다.
Device or resource busy가 발생하는 대표적인 원인
다음과 같은 경우에 자주 발생합니다.
- 파일을 다른 프로세스가 사용 중
- 마운트된 디스크 사용 중
- 현재 작업 디렉터리 사용
- NFS 공유 사용
- Docker Volume 사용
- 로그 파일 사용
- 백그라운드 프로세스 실행 중
- 데이터베이스 파일 사용
- 네트워크 파일 시스템 사용
- 시스템 서비스에서 점유 중
대부분 어떤 프로세스가 사용 중인지 확인하면 원인을 쉽게 찾을 수 있습니다.
1. lsof 명령으로 확인하기
가장 많이 사용하는 방법입니다.
lsof 파일명
예시
lsof /mnt/data
현재 어떤 프로세스가 해당 파일이나 디렉터리를 사용 중인지 확인할 수 있습니다.
2. fuser 명령 사용하기
특정 파일이나 디렉터리를 사용하는 프로세스를 확인합니다.
fuser 파일명
예시
fuser -v /mnt/data
PID와 사용자 정보를 함께 확인할 수 있습니다.
3. 현재 작업 디렉터리 확인하기
다른 터미널에서 해당 디렉터리에 위치하고 있어도 언마운트가 되지 않을 수 있습니다.
현재 위치를 확인합니다.
pwd
다른 위치로 이동한 후 다시 시도합니다.
cd /
4. 프로세스 종료하기
사용 중인 프로세스를 종료합니다.
kill PID
강제 종료가 필요한 경우
kill -9 PID
단, 운영 중인 서비스라면 종료 전에 영향을 반드시 확인해야 합니다.
5. 서비스 상태 확인하기
서비스가 파일을 점유하고 있을 수 있습니다.
예시
systemctl status nginx
또는
systemctl status mysqld
필요한 경우 서비스를 중지합니다.
systemctl stop 서비스명
6. 마운트 상태 확인하기
현재 마운트 정보를 확인합니다.
mount
또는
cat /proc/mounts
마운트 상태를 확인한 후 다시 언마운트를 시도합니다.
7. Lazy Unmount 사용하기
즉시 언마운트가 어렵다면 Lazy Unmount를 사용할 수 있습니다.
umount -l /mnt/data
현재 사용이 끝나는 시점에 자동으로 언마운트됩니다.
8. Force Unmount 사용하기
NFS 환경에서는 강제 언마운트가 필요할 수도 있습니다.
umount -f /mnt/data
일반 디스크에서는 신중하게 사용해야 합니다.
9. Docker 확인하기
Docker 컨테이너가 볼륨을 사용 중인지 확인합니다.
docker ps
볼륨 정보를 확인합니다.
docker inspect 컨테이너명
필요하면 컨테이너를 중지합니다.
docker stop 컨테이너명
10. 시스템 로그 확인하기
관련 로그를 확인합니다.
journalctl -xe
또는
dmesg
파일 시스템이나 장치 오류가 함께 발생하지 않았는지 확인합니다.
Device or resource busy 문제를 확인하는 순서
실무에서는 다음 순서대로 확인하는 것이 가장 효율적입니다.
- lsof 확인
- fuser 확인
- 현재 작업 디렉터리 확인
- 프로세스 종료
- 서비스 상태 확인
- mount 확인
- Lazy Unmount 시도
- Force Unmount 검토
- Docker 확인
- 시스템 로그 확인
이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.
오류를 해결할 때 주의할 점
kill -9나 umount -f를 무조건 사용하는 것은 위험할 수 있습니다.
데이터베이스나 중요한 서비스가 파일을 사용 중인 상태에서 강제로 종료하면 데이터 손상이나 서비스 장애가 발생할 수 있습니다.
먼저 lsof와 fuser를 사용하여 어떤 프로세스가 리소스를 점유하고 있는지 확인한 후 안전하게 종료하는 것이 좋습니다.
자주 묻는 질문
umount가 계속 실패합니다.
다른 터미널이 해당 디렉터리를 현재 작업 디렉터리로 사용하고 있거나, 프로세스가 파일을 점유하고 있을 가능성이 높습니다.
rm 명령에서도 Device or resource busy가 발생합니다.
삭제하려는 파일이 현재 실행 중인 프로그램이나 서비스에서 사용 중인지 lsof 명령으로 확인해야 합니다.
Lazy Unmount와 Force Unmount의 차이는 무엇인가요?
umount -l은 현재 사용이 끝난 후 자동으로 언마운트하는 방식이고, umount -f는 강제로 연결을 끊는 방식입니다. 일반적으로는 -l을 먼저 사용하는 것이 안전합니다.
마무리
Device or resource busy 오류는 Linux에서 파일이나 장치를 다른 프로세스가 사용 중일 때 발생하는 대표적인 오류입니다. lsof, fuser, mount 등의 명령어를 활용해 어떤 프로세스가 리소스를 점유하고 있는지 먼저 확인한 뒤, 필요에 따라 프로세스를 종료하거나 안전하게 언마운트하는 것이 가장 좋은 해결 방법입니다.