zerofree
以下を使用してVirtualBox vdiイメージを圧縮できるようにUbuntu 11.04で実行しようとしています。
VBoxManage modifyhd Ubuntu.vdi --compact
実行するには、zerofree
ディスクイメージが読み取り専用でマウントされます。私はフォローアップをしています。このガイドラインこれを使用して、回復モードで読み取り専用に再マウントするように求められます(ルートシェルプロンプトにドロップ)。
mount -n -o remount,ro -t ext2 /dev/sda1 /
ただし、これを行うとエラーが発生します。
mount: / is busy
これを行う方法についてのアイデアはありますか?
フォローアップ:Jia Liの回答に従ってこの投稿このコマンドを実行すると、問題を解決できます。
service rsyslog stop
service network-manager stop
killall dhclient
答え1
一部のプロセスは書き込み用にファイルを開いたままにします。たとえば、rsyslogd
ネットワークツールdhclient
などのログを作成するプログラムです。一つずつ閉じて再インストールしてみると効果があるかもしれません。
このプログラムを使用して、特定のファイルを使用するプロセスを見つけることができますfuser
。たとえば、fuser -v -m /
プロセスのリストが返されます。しかし、これがファイルシステムを使用する原因の1つであるかどうかはわかりません。
答え2
Peterの答えの改善:
マウントポイントを使用してプロセスを終了することはできません。だから私はこうしました:
/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