본문 바로가기
개발

[Linux] 디렉토리 삭제 불가 : cannot remove device or resource busy

by seaweed_one 2024. 1. 9.
728x90

Error 

최근 k8s pod 상에 있는 디렉토리를 삭제 도중 rm -rf 명령어가 적용되지 않는 에러를 만났습니다.

rm: cannot remove '/path_to_dir/.git/.nfsdda293a660f276c0000000a': cannot remove device or resource busy

 

해당 파드의 python app 에서 아래 코드를 사용해 디렉토리를 삭제하는 로직이 존재했는데요.

해당 로직도 dir 를 삭제할 수 없다는 에러와 함께 정상적으로 수행되지 않았습니다.

shutil.rmtree(dir_path, ignore_errors=True)

 

간단히 말하면 사용중인 프로세스가 해당 파일을 잡고있어 발생하는 문제입니다.

 

lsof

lsof 는 list open files 의 약자로 시스템에서 열린 파일 목록, 사용 프로세스, 디바이스 정보 등의 상세 정보 확인이 가능합니다.

정말 프로세스가 해당 하위 파일을 잡고있는지 확인해보겠습니다.

 

파드 상에 lsof 가 설치되어 있지 않아 먼저 설치를 해줍니다.

// CentOs , redhat 
sudo yum install lsof

// Ubuntu
sudo apt-get install lsof -y

 

프로세스 확인을 위해서 아래 명령어를 사용합니다. 

// 에러 문구에 표기된 경로 입력 
lsof /path_to_dir/.git/.nfsdda293a660f276c0000000a

 

저의 경우는 python 코드 내에서 pygit2 를 이용해 해당 디렉토리에 git clone 등의 동작을 수행하는 로직이 있었는데요.

uvicorn 프로세스가 해당 경로를 잡고있는 것을 확인할 수 있었습니다.

 

옵션 없이 사용하면 시스템에 열린 모든 파일을 확인할 수 있습니다.

root@model-serving-domain-manager-ff96f7c77-q686n:/model-serving# lsof
python  657 661 python    root    8w     FIFO               0,13      0t0 23563843 pipe
python  657 661 python    root    9r     FIFO               0,13      0t0 23562119 pipe
python  657 661 python    root   10w     FIFO               0,13      0t0 23562119 pipe
python  657 661 python    root   11r     FIFO               0,13      0t0 23562120 pipe
python  657 661 python    root   12w     FIFO               0,13      0t0 23562120 pipe
python  657 661 python    root   13u  a_inode               0,14        0    11494 [eventfd]
python  657 661 python    root   14u     unix 0x0000000000000000      0t0 23562121 type=STREAM
python  657 661 python    root   15u     unix 0x0000000000000000      0t0 23562122 type=STREAM
python  657 661 python    root   16u     IPv4           23568781      0t0      TCP model-serving-domain-manager-ff96f7c77-q686n:45244->mysql-for-model-serving.idea-mlops-serving.svc.hana.cluster.com:mysql (ESTABLISHED)
python  657 661 python    root   17r      CHR                1,3      0t0 20002703 /dev/null
python  657 662 python    root  cwd       DIR              0,708     4096  4736764 /model-serving
python  657 662 python    root  rtd       DIR              0,708     4096  4987408 /
python  657 662 python    root  txt       REG              0,708    14408  3806856 /usr/local/bin/python3.9
python  657 662 python    root  mem       REG                8,1           3806856 /usr/local/bin/python3.9 (path dev=0,708)
python  657 662 python    root  mem       REG                8,1           3801970 /lib/x86_64-linux-gnu/libresolv-2.28.so (path dev=0,708)
python  657 662 python    root  mem       REG                8,1           3801949 /lib/x86_64-linux-gnu/libnss_dns-2.28.so (path dev=0,708)
python  657 662 python    root  mem       REG                8,1           3801951 /lib/x86_64-linux-gnu/libnss_files-2.28.so (path dev=0,708)
.....

python app이 구동중인 파드라 python 관련 프로세스들이 많이 표기됩니다.

 

저는 코드 수정으로 해결을 하였는데, 일반 프로세스인 경우에는 kill 명령어를 이용해 해당 프로세스를 죽여 정상적으로 삭제가 가능합니다.

// 프로세스 삭제 
kill [pid]

//프로세스 강제 삭제 
kill -9 [pid]

 

728x90

'개발' 카테고리의 다른 글

[Git] Git Add/Commit 되돌리기, 수정하기  (0) 2024.02.06
[Windows] Windows CURL 사용법  (0) 2024.02.05
[K8S] 쿠버네티스 파드 미생성  (0) 2024.02.05
[Git] Git 초기 설정  (0) 2024.01.09
[K8s] no basic auth credential 에러  (1) 2023.11.02