web-dev-qa-db-ja.com

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

Ubuntu 11.04でzerofreeを実行して、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
39
Wavy Crab

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

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

25
Jari Laamanen

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

ピーターの答えを改善する:

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

  • 編集/etc/fstabは、次回の起動時に読み取り専用で起動します。例:/dev/sda1 / ext2 ro 0 1
  • 再起動してシェルを開きます(ホストキー+ F2など)
  • Zerofreeを実行する

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

  • 読み書きオプションでマウント:$ mount -o remount,rw /dev/sda1
  • 編集/etc/fstab再び、元の値に戻します

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

  • リブート
  • VMの読み込み中にシフトを保持
  • 詳細オプション>リカバリモードのカーネルオプション>ルートシェルプロンプトにドロップ
13
Topera

マウントをビジー状態に保つプロセスが非常に多い場合があるため、マウントを読み取り専用で再起動する方が簡単な場合があります。

/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 に触発されました

6
Peter Nowee

ファイルを開いたまますべてのサービスとプロセスを停止した後もデバイスをアンマウントまたは再マウントできない場合は、デバイスをビジー状態に保つスワップファイルまたはスワップパーティションがある可能性があります。これは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で必要でした。

6
Simon Gould

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

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

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

最初に、私の目的はreduce my /ROOT)パーティションをディスクに追加することでした。

  • すべてをクリーンアップしてバックアップした後のセッションの実行から:

    init 1
    

    デスクトップが消えて、今はLinux console ...

    ...
    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リクエストをカーネルに送信し、
      • ヒット u、これはUmount allリクエストを送信し、すべてのマウントされたファイルシステムを読み取り専用で再マウントします、
      • その後解放します AltGr
    2. またはコマンドラインで:

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

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

3
F. Hauri

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

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

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

    • VM2を選択し、
    • 「設定」->「ストレージ」->「ハードディスクの追加」: "Select it as additional disk"

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

    • vM2を起動します。VM2ではVM1のボリュームを使用しているプロセスがないため、VM2の追加ディスクとしてVM1のボリュームを(再)マウントできます。ヒント:最初に、ボリュームを自動的にマウントする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 imageのようなインストールディスクから起動して、同じことを実現できるはずですが、私は試していません。

1
leo

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

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

これが見つかりました

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

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

1
DustWolf

VMでmountコマンドを実行しようとしていると思います。とにかく、あなたはおそらくフォーラムの投稿者とは異なるルートパーティションを持っているでしょう。

試してください:

mount -o ro,remount /

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

mount -o ro,remount /dev/mapper/system-rootfs /
0
Ulrich Dangel

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

0
ob1

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

システムが(スワップパーティションではなく)ルートファイルシステムにスワップファイルを持っている場合は、swapoff -aでスワップファイルを一時的にオフにすることも必要です。

0
Boann