嘗試以唯讀方式掛載時出現“mount: / is busy”,以便我可以運行 Zerofree

嘗試以唯讀方式掛載時出現“mount: / is busy”,以便我可以運行 Zerofree

我嘗試zerofree在 Ubuntu 11.04 上運行,以便可以使用以下命令壓縮 VirtualBox vdi 映像:

VBoxManage modifyhd Ubuntu.vdi --compact

為了運行,zerofree磁碟映像已安裝為唯讀。我正在跟進這些說明它表示使用它從復原模式重新掛載為唯讀(Drop to root shell 提示字元):

mount -n -o remount,ro -t ext2 /dev/sda1 /

但是當我這樣做時,我收到錯誤:

mount: / is busy

關於如何做到這一點有什麼想法嗎?

跟進:按照賈裡的回答和這個帖子透過運行這些命令可以解決該問題。

service rsyslog stop
service network-manager stop
killall dhclient

答案1

某些進程使檔案保持開啟以供寫入。例如,這些可以是寫入日誌的程序,例如rsyslogd網路工具dhclient或其他東西。將它們一一關閉並嘗試重新安裝可能會起作用。

您可以使用該程式來尋找使用某些檔案的進程fuser。例如,fuser -v -m /將傳回進程清單。但是,我不確定它是否是導致檔案系統繁忙的其中之一。

答案2

改進彼得的回答:

我無法終止使用我的安裝點的進程。所以,我這樣做了:

  • 編輯/etc/fstab為下次啟動時以唯讀方式啟動。前任:/dev/sda1 / ext2 ro 0 1
  • 重新啟動並開啟 shell(例如,主機鍵 + F2)
  • 零運行

若要「恢復」您的系統:

  • 使用讀寫選項掛載:$ mount -o remount,rw /dev/sda1
  • 再次編輯/etc/fstab,恢復原來的值

額外:如果需要打開恢復模式在任何步驟中:

  • 重啟
  • VM 載入時按住 Shift 鍵
  • 進階選項 > 帶有恢復模式的核心選項 > 刪除到根 Shell 提示

答案3

只有當沒有進程開啟檔案進行寫入時,您才能以唯讀方式重新掛載檔案系統。運行lsof /以查看哪些進程在根檔案系統上開啟了檔案。開啟用於寫入的檔案將在該列中指示FD。您可以使用以下方法過濾這些內容

lsof / | awk '$4 ~ /[0-9].*w/'

若要自動過濾進程 ID,請解析下列輸出lsof -F pa

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

答案4

有時,有太多進程使掛載保持繁忙,因此以只讀掛載方式重新啟動可能會更容易。

更改 中根檔案系統的條目/etc/fstab,例如:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

變成:

/dev/sda1 / ext2 noatime,ro 0 1

重新啟動時,檔案系統將以唯讀方式掛載,因此您可以zerofree在其上運行。

完成後,再次以讀取/寫入方式重新掛載檔案系統 ( mount -o remount,rw /) 並撤銷對 的變更/etc/fstab

靈感來自https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

相關內容