zerofree を実行できるように読み取り専用でマウントしようとすると、「mount: / is busy」と表示される

zerofree を実行できるように読み取り専用でマウントしようとすると、「mount: / is busy」と表示される

zerofree以下を使用して VirtualBox vdi イメージを圧縮できるように、Ubuntu 11.04 で実行しようとしています。

VBoxManage modifyhd Ubuntu.vdi --compact

zerofreeディスクイメージを実行するには、読み取り専用としてマウントする必要があります。これらの指示これは、リカバリ モード (ルート シェル プロンプトにドロップ) から読み取り専用として再マウントするためにこれを使用することを示しています。

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

しかし、これを実行するとエラーが発生します:

mount: / is busy

これを実行する方法について何かアイデアはありますか?

フォローアップ: Jariの回答に続いてこの郵便受けこれらのコマンドを実行すると問題は解決します。

service rsyslog stop
service network-manager stop
killall dhclient

答え1

一部のプロセスは、書き込み用にファイルを開いたままにしています。たとえば、 などのログを書き込むプログラムやrsyslogd、 などのネットワーク ツールなどがこれに該当しますdhclient。これらを 1 つずつシャットダウンして再マウントを試みると、うまくいく可能性があります。

プログラム を使用すると、特定のファイルを使用するプロセスを見つけることができますfuser。たとえば、fuser -v -m /はプロセスのリストを返します。ただし、ファイル システムをビジー状態にしているのがこれらのプロセスの 1 つであるかどうかはわかりません。

答え2

ピーターの回答の改善:

マウント ポイントを使用するプロセスを終了できませんでした。そこで、次の操作を実行しました。

  • /etc/fstab次回起動時に読み取り専用で起動するように編集します。例:/dev/sda1 / ext2 ro 0 1
  • 再起動してシェルを開きます(たとえば、ホストキー + F2)
  • ゼロフリーを実行する

システムを「回復」するには:

  • 読み取り/書き込みオプションでマウント:$ mount -o remount,rw /dev/sda1
  • 再度編集して/etc/fstab元の値を復元します

追加:必要に応じて開くリカバリモードどのステップでも:

  • リブート
  • VMの読み込み中にShiftキーを押したままにする
  • 詳細オプション > リカバリモードのカーネルオプション > ルートシェルプロンプトにドロップ

答え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

関連情報