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