linux中卸載提示設備正忙怎么辦?
VSole2022-03-03 22:51:40
執行NFS掛載時,你可能會看到設備繁忙狀態。在這種情況下,你必須以適當的方式強制卸載。
在這種情況下,我們創建了 /var/linoxide 安裝目錄。如果嘗試卸載遠程分區,則會收到錯誤消息。# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 3G 18G 7% / devtmpfs 236M 0 236M 0% /dev tmpfs 245M 0 245M 0% /dev/shm tmpfs 245M 4M 237M 4% /run tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/0 1241:/var/linoxide 20G 3G 18G 7% /mnt/nfs/linoxide_srv 1241:/home 20G 3G 18G 7% /mnt/nfs/home_srv
在最后兩行中,已安裝的文件夾顯示在客戶端上。以下示例顯示由于設備繁忙而導致卸載失敗
# umount /mnt/nfs/linoxide_srv/ umount.nfs4: /mnt/nfs/linoxide_srv: device is busy
使用lsof
lsof(列出打開的文件)命令顯示特定文件系統,目錄或設備上所有打開的文件及其關聯進程的列表。默認情況下,它列出所有當前打開的文件,共享庫和目錄,并提供有關每個文件的盡可能多的信息。可以使用管道對輸出進行過濾,以提供諸如PID,USER等信息。
# lsof /mnt/nfs/linoxide_srv/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 24098 root cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv vim 24144 linoxide cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv
存在使用已安裝文件夾的進程的PID,并顯示正在執行的命令和執行該命令的用戶。你可以殺死正在使用的進程,但可以處理執行的命令。你可以看到vim命令。這意味著linoxide用戶正在編輯文件。因此,如果你殺死進程,他的進度將會丟失。讓我們看一下結果,假設你已通知他
# lsof /mnt/nfs/linoxide_srv/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 24098 root cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv
看來用戶已停止進行更改,但仍在運行bash命令,但我不知道為什么。你可以使用kill命令殺死兩個進程。不要錯過被殺死的進程的PID。
殺死第一個bash進程
# kill -9 24098
你可以檢查結果
# lsof /mnt/nfs/linoxide_srv/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 24125 root cwd DIR 253,1 4096 519062 /mnt/nfs/linoxide_srv
你可以看到一個進程被殺死了
# kill -9 24125
讓我們回顧第二個過程
# lsof /mnt/nfs/linoxide_srv/
讓我們卸載文件夾
# umount /mnt/nfs/linoxide_srv/ umount: /mnt/nfs/linoxide_srv/: not mounted
殺進程時,似乎自動卸載了該文件夾,但讓我們用df命令檢查一下
# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 3G 18G 7% / devtmpfs 236M 0 236M 0% /dev tmpfs 245M 0 245M 0% /dev/shm tmpfs 245M 3M 237M 4% /run tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/0 1241:/home 20G 3G 18G 7% /mnt/nfs/home_srv
目錄 /mnt/nfs/linoxide_srv根據需要卸載。fuser
fuser(查找用戶進程)命令可以幫助識別阻止文件系統卸載的進程。查找與指定為命令行參數的文件,目錄或文件系統安裝點關聯的用戶進程。
# fuser /mnt/nfs/linoxide_srv/ /mnt/nfs/linoxide_srv: 24191c
你可以使用fuser命令-m列出訪問文件的所有進程或文件系統上的掛載點的選項-v顯示PID命令,用戶,已執行命令等結果的選項。
# fuser -mv /mnt/nfs/linoxide_srv/ USER PID ACCESS COMMAND /mnt/nfs/linoxide_srv: root kernel mount /mnt/nfs/home_srv root 24191 ..c.. bash root 24275 ..c.. bash linoxide 24290 ..c.. vim
你可以檢查正在執行的命令。你需要防止linoxide用戶保存其工作。
# fuser -mv /mnt/nfs/linoxide_srv/ USER PID ACCESS COMMAND /mnt/nfs/linoxide_srv: root kernel mount /mnt/nfs/home_srv root 24191 ..c.. bash root 24275 ..c.. bash
你可以使用fuser命令直接停止運行進程。-k 無選項-kill命令# fuser -kmv /mnt/nfs/linoxide_srv/ USER PID ACCESS COMMAND /mnt/nfs/linoxide_srv: root kernel mount /mnt/nfs/home_srv root 24191 ..c.. bash root 24275 ..c.. bash
檢查結果
# fuser -mv /mnt/nfs/linoxide_srv/ USER PID ACCESS COMMAND /mnt/nfs/linoxide_srv: root kernel mount /mnt/nfs/home_srv
只有掛載似乎正在運行。讓我們卸載文件夾
# umount /mnt/nfs/linoxide_srv/
沒有錯誤消息。檢查安裝點
# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 3G 18G 7% / devtmpfs 236M 0 236M 0% /dev tmpfs 245M 0 245M 0% /dev/shm tmpfs 245M 3M 237M 4% /run tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/0 1241:/home 20G 3G 18G 7% /mnt/nfs/home_srv
我們可以看到它
/mnt/nfs/linoxide_srv
該文件夾已根據需要卸載。
延遲卸載
umount命令-l選擇執行延遲卸載。該掛載已從文件系統名稱空間中刪除(未在下方顯示/mnt/nfs/linoxide已經)但它仍然安裝,因此訪問它的程序仍然可以訪問它。當最后一個訪問程序結束時,將執行實際卸載。
# fuser -mv /mnt/nfs/linoxide_srv/ USER PID ACCESS COMMAND /mnt/nfs/linoxide_srv: root kernel mount /mnt/nfs/home_srv root 24366 ..c.. bash root 24381 ..c.. bash linoxide 24398 ..c.. vim
你可以看到該文件夾正忙。讓我們嘗試延遲卸載
# umount -l /mnt/nfs/linoxide_srv/
沒有錯誤消息。檢查命令是否正確運行
# echo $? 0
檢查安裝點
# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 3G 18G 7% / devtmpfs 236M 0 236M 0% /dev tmpfs 245M 0 245M 0% /dev/shm tmpfs 245M 4M 237M 4% /run tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/0 1241:/home 20G 3G 18G 7% /mnt/nfs/home_srv
我知道掛載點 /mnt/nfs/linoxide_srv它不會再次顯示,但是例如,如前所述,linoxide用戶仍在修改文件,或者可以創建新文件。在服務器上,你可以看到用戶正在修改哪些文件。你需要緊急卸載分區或僅刪除設備,但是由于設備繁忙,這可能會引起問題。在決定如何解決問題之前,必須檢查系統上的所有進程。使用lsof和fuser命令可以輕松識別阻止文件系統卸載的進程。
VSole
網絡安全專家