嘗試卸載掛載點時出現 umount: /mount/point: target is busy,表示有進程正在存取該檔案系統。本文提供快速定位佔用進程並安全釋放的標準流程。
# 查看佔用 /home 的進程
fuser -mv /home
# 強制殺掉所有佔用 /home 的進程並卸載
fuser -km /home
umount /home
-k 發送 SIGKILL,-m 指定掛載點/檔案系統。
# 列出佔用 /dev/vdc1 的所有進程
lsof /dev/vdc1
# 列出佔用掛載點 /data 的進程
lsof /data
# 僅顯示進程 PID
lsof -t /data
輸出範例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1234 root cwd DIR 253,0 4096 2 /data
vim 5678 root 4r REG 253,0 102400 12 /data/log.txt
再根據 PID 決定是正常結束進程(kill 1234)或強制終止(kill -9 5678)。
| 場景 | 典型進程 | 處理方式 |
|---|---|---|
| Shell 當前目錄在掛載點 | bash, zsh | cd / 切換目錄後再 umount |
| 編輯器開啟檔案 | vim, vi, nano | 存檔退出編輯器 |
| 服務讀寫資料 | mysql, nginx, java | 優雅停止服務 systemctl stop mysql |
| 掛載點下有子掛載 | -- | 先遞歸卸載子掛載 umount -R /mnt/parent |
| NFS/SMB 遠端掛載殘留 | rpc, smbd | 確認網路連線,必要時 umount -f -l |
# -l, --lazy:懶人卸載,立即分離檔案系統層級,等無進程使用時真正卸載
umount -l /mnt/data
# -f, --force:強制卸載(僅限 NFS 等網路檔案系統,本地 fs 可能導致資料損毀)
umount -f /mnt/nfs_share
警告:本地檔案系統(ext4, xfs 等)請避免使用 -f,極易造成檔案系統損壞。
# 1. 嘗試正常卸載
umount /data
# umount: /data: target is busy
# 2. 定位佔用進程
lsof /data
# 或
fuser -mv /data
# 3. 正常結束進程(優先)
kill 1234 5678
# 4. 確認釋放
lsof /data
# 無輸出表示已釋放
# 5. 正常卸載
umount /data
# 6. 若仍失敗,檢查子掛載
mount | grep /data
umount /data/sub1
umount /data/sub2
umount /data
若遇到 Read-only file system 錯誤導致需重新掛載:
# 1. 卸載(可能需 fuser -km)
fuser -km /data
umount /data
# 2. 檢查並修復檔案系統
fsck -y /dev/vdc1
# 3. 重新掛載
mount /dev/vdc1 /data
lsof 或 fuser -mv 定位佔用進程fuser -km 強制釋放umount -f,網路檔案系統可考慮 -f -l