InfraPlatform

[꿀팁] 리눅스 - fuser명령 사용법과 디스크 강제해제 unmount

IT오이시이 2020. 11. 16. 22:19
728x90

[꿀팁]  리눅스 - fuser명령 사용법과 디스크 강제해제 umount-devide is busy 해결

 
리눅스 파일시스템을 포멧하거나  용량을 바꾸기 위해서는  unmount후에 작업이 가능합니다.

그러나 아래와같이 umount 명령으로 해제를 시행하면  "device is busy" 라고 해제가 되지 않습니다.
이와같이 특정 프로세스가 파일 시스템의 디렉토리를 사용중일때는 해당 디스크를  해제를 하지 못하고  강제로 해제를 해야 합니다.

# umount /some/dirpath
umount: /some/dirpath: device is busy

 

fuser명령으로 디스크 강제해제 절차


디스크를 강제 마운트 하는 절차는 아래와 같습니다.

1.  # fuser -cu  [/some/mountedpath]
   -  특정 디렉토리를 사용중인 프로세스를 확인합니다.
2.  # fuser -ck  [/some/mountedpath]
    - 사용중인 실행 프로세스를 강제 중지 합니다.
3.  # fuser -cu  [/some/mountedpath]
    - 사용중인 실행 프로세스를 재확인 합니다.
4.   umount   /some/mountedpath
    - 파일 시스템을 해제 합니다.
5.   mount  /dev/sda1  /some/new/mountpath
    - 파일 시스템 /dev/sda1을 다른 디렉토리로 마운트 한다

 

fuser 사용법 추가 정리

fuser 명령으로 프로세스가 사용중인 파일,디렉토리,소켓 등에 대한 확인과  중지를 할 수 있습니다.

fuser - identify processes using files or sockets

[fuser 사용법]

Usage: fuser [-fIMuvw] [-a|-s] [-c|-m|-n SPACE]  -k -i   -SIGNAL  NAME
  -a,--all                 display unused files too
  -s,--silent           silent operation 
  -v,--verbose          verbose output
  -l,--list-signals     list available signal names 

  -I,--inode            use always inodes to compare files
  -m,--mount        show all processes using the named filesystems or  block device
  -M,--ismountpoint     fulfill request only if NAME is a mount point

  -u,--user             display user IDs

  -n,--namespace SPACE  search in this name space (file, udp, or tcp) 

  -k,--kill               kill processes accessing the named file 
  -i,--interactive      ask before killing (ignored without -k) 
  -SIGNAL               send this signal instead of SIGKILL 
  

 
# fuser [options] [file|socket]
# fuser [options] -SIGNAL [file|socket]

[주요 option 사용 예시]

# fuser -u  somepath : 디렉토리, 파일(somepath)을 사용하는 프로세스 및 user를 확인

* 도커 엔진이 사용하는 소켓을 사용하는 프로세스를 확인 해보자. /var/run/containerd/containerd.sock 는 소켓이지만 리눅스는 디렉토리, 파일, 소켓, 프로세스 등을 모두 파일로 이해하고 있기 때문에 파일이라고 생각하면됩니다.    아래와 같이 특정 파일의 사용자를 확인하는 "-u" 그리고 상세한 출력으로 "-v" 를 사용했다.

# fuser -u /var/run/containerd/containerd.sock
/run/containerd/containerd .sock:  2075(root)

# fuser -uv /var/run/containerd/containerd.sock
                     USER        PID ACCESS COMMAND
/run/containerd/containerd.sock:
                     root       2075 F.... (root)containerd
* 위에서 찾은 pid가 2075 인 프로세스 확인해보자. "pid 2075 의 프로세스 정보를 "-f"로 상세히 출력했다.
# ps -f -p 2075
UID          PID    PPID  C STIME TTY          TIME CMD
root        2075       1  0 08:43 ?        00:00:00 /usr/bin/containerd

# fuser - k  somepath  :  해당 파일을 사용중인 프로세스를 중지합니다.

# fuser -i -k /var/run/containerd/containerd.sock
/run/containerd/containerd.sock:  2075
Kill process 2075 ? (y/N) y

* -i 옵션으로 프로세스를 종료 시킬지 묻고 yes라고 할때 중지하도록 해보았다

# fuser -v  : 내용을 자세히 출력합니다.
# fuser -fu .    : 현재 디렉토리를 사용하고있는 프로세스의 프로세스 ID와 사용자를 표준 출력 합니다.
 
[참고문헌]
linux.die.net/man/1/fuser
 

fuser(1) - Linux man page

fuser(1) - Linux man page Name fuser - identify processes using files or sockets Synopsis fuser [-a|-s|-c] [-4|-6] [-n space ] [-k [-i] [-signal ] ] [-muvf] name ... fuser -l fuser -V Description fuser displays the PIDs of processes using the specified fil

linux.die.net

www.ibm.com/support/knowledgecenter/en/ssw_aix_71/f_commands/fuser.html
 

728x90
반응형