ゼロフリーで実行できるように読み取り専用としてマウントしようとすると、「mount:/ is busy」


36

zerofreeUbuntu 11.04で実行しようとしているので、次を使用してVirtualBox vdiイメージを圧縮できます。

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

4
zerofreeのmanページには、実行している示唆telinit 1している私のための問題を解決しました。
アレックスライアン14

回答:


23

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

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


2
ファイルを書き込みモードで開いているプロセスではFfuser出力のアクセスフラグに大文字が使用されます。
Jan Hudec

21

書き込み用にファイルを開いているプロセスがない場合にのみ、ファイルシステムを読み取り専用で再マウントできます。実行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}'

1
まだ忙しいこのソリューションを試してみたところ、この方法では一部のリソースを表示できない可能性があります。実行中のサービスをいくつか停止した後、読み取り専用としてfsを再マウントできます。
サム・遼

ファイルを読み取り、書き込み、またはその両方で開いているすべてのプロセスを閉じましたが(u)、それでもビジーと表示されます。
ウブロ

12

ピーターの答えの改善:

マウントポイントを使用するプロセスを強制終了できませんでした。だから、私はこれをやった:

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

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

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

追加:必要に応じて、任意のステップでリカバリモードを開きます

  • リブート
  • VMの読み込み中にシフトをホールド
  • [詳細オプション]> [回復モードのカーネルオプション]> [ルートシェルプロンプトにドロップ]

2
追加するキャプテン明白な欲求:あなたがROモードで再起動する前に必ずzerofreeをインストールしてください
Xosofox

「ルートシェルプロンプトへのドロップ」およびzerofree:filesystemマウントされたrwを使用します。しかし、他のVMには問題がありませんでした
Pawel Cioch

これは、/dev/sda1 / ext2 ro 0 1エントリがリストの一番上にある場合にのみ機能しました。最初に最後のエントリとして配置したとき、マウントポイントビジーエラーがまだありました。
アフィリーナ

6

マウントをビジーにしておくプロセスが非常に多くなるため、マウントを読み取り専用で単純にリブートする方が簡単な場合があります。

のルートファイルシステムのエントリを変更します。/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に触発された


すばらしいです!参考までに、私はこれだけを使用し/dev/sda1 / ext2 ro 0 1、読み取り専用モードで起動できました。
トペラ

5

開いているファイルがあるすべてのサービスとプロセスを停止した後でもデバイスをアンマウントまたは再マウントできない場合は、デバイスがビジー状態になっているスワップファイルまたはスワップパーティションがある可能性があります。これはfuserまたはでは表示されませんlsof。スワップをオフにします:

sudo swapoff -a

事前に確認して、スワップパーティションまたはスワップファイルの概要を次のように表示できます。

swapon -s

または:

cat /proc/swaps

コマンドを使用する代わりにsudo swapoff -a、サービスまたはsystemdユニットを停止してスワップを無効にすることもできます。例えば:

sudo systemctl stop dphys-swapfile

または:

sudo systemctl stop var-swap.swap

私の場合、fsck再起動せずにルートパーティションで実行するためにルートパーティションを読み取り専用として再マウントできるように、ファイルを書き込み用に開いているサービスとプロセスを停止することに加えて、スワップをオフにする必要がありました。これは、Raspbian Jessieを実行しているRaspberry Piで必要でした。


4

systemdを使用する場合、systemd-journaldを停止することによりディスク書き込みが停止します。

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /

1
私にとっては、両方のユニットがすぐに再起動します。
rld。

「詳細オプション]> [リカバリモード>プロンプトルートシェルにドロップしてカーネルオプション」で私のために働いた
パヴェルCioch

3

OK、私がやったことがあります

まず、私の目標は、することでし減らす私の/ROOT私のディスク上に別のものを追加するために)パーティションを。

  • すべてがクリーンアップおよびバックアップされたら、実行中のセッションから:

    init 1
    

    デスクトップがなくなり、Linuxコンソールを使用しています...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • さて、マウントしようと/して読み取り専用モード:

    mount -o remount,ro /
    mount: / is busy
    
  • わかりました、今から、私は理論的にシングルユーザーモードにありますがps ax他の多くのプロセスを示します!!

    それらをすべて殺すことは、実際には不可能であるか、危険ではありません...(kill 1禁止されています... psdoomをプレイする時間がありません:-)

    私ができる唯一のことは、System Requestこれのために、私は2つの方法を知っています:( Documentation/sysrq.txtカーネルドキュメントのファイルを参照してください):

    1. 最初にmagic SysRq keyキーボードカーネルトラップを使用します。

      • AltGr押し続けてから、押し続けます
      • PrtScn一度だけヒットしますが、リリースしないでくださいAltGr
      • s一度だけヒットすると、Emergency syncリクエストがカーネルに送信され、
      • hit u、これはUmount allリクエストを送信し、マウントされたすべてのファイルシステムを読み取り専用で再マウントします
      • 放します AltGr
    2. またはコマンドラインで:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • そして今、私はできました

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...


注:私があれば罰金では、fsck正常に行われていた、私が起動してきたライブUSB実行することによって順番にをresize2fs...この機能はまだ実装されていません...
F. HAURI

fsckは知らない-f。それは何をしますか、参照されていないブロックはゼロですか?
ᴠɪɴᴄᴇɴᴛ

1
@ᴠɪɴᴄᴇɴᴛ:I'ts ext2fsckスイッチ:-f ファイルシステムがcleanな場合でも、強制的にチェックします。
F.ハウリ

1

端末に貼り付けるための簡単な修正を探している人のために...

(以下のコマンドを実行する前に、などの他のステップを完了していることを確認してくださいtelinit 1。)

これを見つけました

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill `cat /tmp/sda1.pids`

コマンドはセッションを強制終了する場合がありますが、戻った後はパーティションを再マウントする準備ができています。


1

vdiファイルを追加の非システムボリュームとして別のVirtualBoxに添付します。そこで、必要に応じて(再)マウントし、ゼロフリーを実行できます。

VM1(仮想マシン1)のVDIディスクを圧縮したいとします。次に、2番目のVM2が必要です。あれは、 :

  • VM1もVM2も実行されていないことを確認してください。
  • VirtualBox Managerから:

    • VM2を選択します
    • 「設定」->「ストレージ」->「ハードディスクの追加」:「追加ディスクとして選択」

    • 圧縮するVM1のvdiファイルを選択します。ヒント:VM2に追加したばかりのハードディスクが、ブート順序でVM2の元のディスクの2番目になっていることを確認してください。

    • VM2の開始:VM2でVM1のボリュームを使用しているプロセスがないため、VM1のボリュームをVM2の追加ディスクとして(再)マウントできるようになりました。ヒント:まず、Linuxのフォロブラウザでボリュームを開きます。これにより、ボリュームが自動的にマウントされます。次に、を使用mount -l_Device_て、コマンドのを確認しsudo mount -o remount,ro _Device_ます。私の場合、これは/ dev / sdb1でした。したがって、コマンドは(1)でsudo mount -o ro,remount /dev/sdb1あり、次に(2)sudo zerofree /dev/sdb1でした。

VM2の代わりに、.isoイメージなどのインストールディスクから起動して、同じことを実現できるはずですが、試したことはありません。


0

mountVMでコマンドを実行しようとすると仮定します。とにかく、おそらくフォーラム投稿の作成者とは異なるルートパーティションがあります。

試してください:

mount -o ro,remount /

これはfsまたはmountオプションに依存しません。これが機能しない場合は、grep " / " /proc/mountsまたはを使用してルートfsを決定することもできますcat /proc/cmdline。ルートファイルシステムが/ dev / mapper / system-rootfsなどの場合、次を使用できます。

mount -o ro,remount /dev/mapper/system-rootfs /

0

この問題が発生したため、マシンを読み取り専用モードにできませんでした。問題を解決するのにidよりも長い時間がかかりました。別のホスティングタイプのサービスで同じことを行っていないことを確認してください。この問題を解決するために、私は問題をfuser -kill /引き起こしている可能性のあるすべてのプロセスを終了させていたため、roモードに戻ることができました。


0

私にとっての解決策は、OSを再起動し、GRUBのブートメニューから「リカバリモード」を選択することでした。「リカバリモード」からは、実行中のプロセスが少なくなり、読み取り専用の再マウントは正常に機能します。

システムのルートファイルシステムに(スワップパーティションではなく)スワップファイルがある場合は、で一時的にスワップファイルをオフにする必要もありますswapoff -a

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.