Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 強制卸載檔案系統:umount 失敗時的完整解決方案

編輯:關於 Linux

在 Linux 運維中,因檔案系統被進程佔用而導致 umount 失敗是常見情況。單純加 -f 參數往往無效,本文通過實戰案例,詳細講解從嘗試普通卸載、強制卸載,到使用 fuser 與 lsof 定位佔用進程並精準釋放資源的完整流程,助你安全解決「device is busy」難題。

問題現場:NFS 掛載點無法卸載

某線上 NFS 掛載點 /data1/img 發生存取異常,甚至 ls 都無響應,需緊急卸載。執行 umount /data1/img 提示 device is busy。

步驟 1:嘗試強制卸載(-f 參數)

# umount -f /data1/img
umount2: Device or resource busy
umount: /data1/img: device is busy

注意: 加 -f 後建議等待 1-2 分鐘,部分情況下核心需時間處理掛鎖釋放,但若底層進程持續佔用,仍會失敗。

步驟 2:用 fuser 定位佔用進程

# fuser -cu /data1/img
/data1/img: 1757c(mysql)
  • -c:針對掛載點檢查
  • -u:顯示進程擁有者
  • 輸出顯示 PID 1757 的 mysql 進程正在佔用該目錄

步驟 3:終止佔用進程並卸載

確認 mysql 進程可安全重啟後,可用 fuser -k 直接殺掉佔用進程:

# fuser -ck /data1/img
/data1/img: 1757c

警告: -k 會發送 SIGKILL,未確認前請勿輕易使用,建議先手動 kill -15 優雅停止服務再卸載。

替代方案:使用 lsof 確認檔案佔用

# lsof /data1/img
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1757 mysql  cwd  DIR  252,1   4096  2 /data1/img

lsof 能顯示更詳細的檔案描述符類型(cwd、txt、mem 等),適合深度排查。

最佳實踐總結

  1. 優先嘗試 umount,失敗則加 -f 並等待;
  2. 仍失敗時,用 fuser -cu 或 lsof 找出佔用進程;
  3. 評估業務影響後,優雅停止服務(systemctl stop 或 kill -15);
  4. 再次執行 umount 即可成功;
  5. 若極端情況下進程無法停止,才考慮 fuser -k 或 umount -l(懶人卸載,掛載點立即釋放,資源在後台清理)。

掌握這套流程,能讓你在面對頑固掛載點時從容應對,避免強制重啟帶來的資料風險。

Copyright © Windows教程網 All Rights Reserved