ビジーディスクを読み取り専用モードに再マウントします


19

ディスクパーティションを強制的に読み取り専用モードにし、30分以上読み取り専用にしたい。

私が試したもの:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    問題:一部のプロセスがパーティションを使用しているため、デバイスビジーエラーが発生しました。ディスクを使用しているプロセスを強制終了したくありません。プロセスがまだ使用しているときに、突然読み取り専用になるディスクをシミュレートしたいと思います。

  2. 以下のようなマジックsysrqキーを使用しました

    echo u > /proc/sysrq-trigger
    

    問題:これにより、すべてのディスクパーティションが読み取り専用になります(ただし、デバイスはビジー状態になります)。しかし、20〜30分後、マシンは自動的に再起動します。一部のマシンは、このコマンドが実行されるとすぐに再起動します。このリブートの原因はまだわかりません。マシンを自動的に再起動させたくないので、ディスクを30分以上読み取り専用モードに維持する必要があります。

質問:単一のディスクパーティションを強制的に読み取り専用にし、その状態で30分維持し、プロセスを再起動せずに読み取り/書き込みモードに戻すより良い方法はありますか?


3
考えましたfsfreeze -fか?ファイルシステムを読み取り専用で正確に再マウントするわけではありません。代わりに、すべてのライターをまでブロックしますfsfreeze -u。しかし、それは似ています
...-Celada

セラダありがとう!それは良いアイデアです!..今、私のマシンではfsfreezeが動作していませんが、これを試してみます。
AdithyaCS

私が試したところfsfreeze -f、私の場合は「osフリーズ」でした。書き込みが拒否される代わりにブロックされたためでしょうか?
ピョートルフィンデイセン

fsfreezeシステムにアクセスできなくなり、unfreezeコマンドを入力できず、ターミナルに戻ることができず、マシンをハードリブートする必要がありました。だから注意してください!:)
アレックス

回答:


16

プロセスに書き込み用に開いているファイルがある場合、または削除されているがまだ開いているファイルが含まれている場合、通常はファイルシステムを読み取り専用として再マウントすることはできません。同様に、ファイルを開いているファイルシステム(または、現在のディレクトリがあるプロセス、実行中の実行可能ファイルなどのファイルの同様の使用)をアンマウントすることはできません。

を使用umount -lしてマウントポイントを解放し、それ以上ファイルを開かないようにすることができますが、ファイルシステムをマウントしたままにし、既にファイルを開いているプロセスを正常に実行したままにします。

あるべきではないときにファイルシステムを読み取り専用で再マウントする一般的な方法を考えることはできません。ただし、ファイルシステムがブロックデバイスによってサポートされている場合、ブロックデバイスを読み取り専用することができます。たとえば、

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggerこれは、すべてのファイルシステムに影響するため、読み取り専用として強制的に再マウントするかなり極端な方法です。これは、再起動する直前にファイルシステムをクリーンな状態に保つための最後の手段です。

ファイルシステムを読み取り専用として再マウントしても、再起動は発生しません。再起動の原因は、パーティションを読み取り専用として再マウントすることと直接関係ありません。多分それは完全に無関係であるか、これが原因でアプリケーションのバグを引き起こし、それが原因でスピンしてプロセッサが過熱し、プロセッサに欠陥があるかオーバークロックされ、最終的に再起動します。再起動の原因を追跡する必要があります。


2
残念ながら、これはポータブルなソリューションではありません。ラズベリーに私が手:私は実行すると、「アクセス許可が拒否されました」echo 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
ピョートルFindeisen

.. echo u > /proc/sysrq-trigger極端なだけでなく、RWを再マウントする場合は強制的に再起動することもできます。私はこれを試してみましたが、その後、再マウント(とときmount..dmesg「ので、未処理孤児のiノードリストの再マウントRDWRことができませんでしくださいアンマウント/再マウントの代わりに。」と述べた
ピョートルFindeisen

@PiotrFindeisenはルートとしてそれを実行しましたか?
ハンシェンリック

@hanshenrikそうだね
ピオトル・

4

mountの強制オプションを使用します(マウントに1つがあると仮定します; GNUにmountはありませんが、たとえばBSDやmacOSにはあります)。

mount -f -o remount,ro /mount/point

もちろん、実際のファイルシステム、カーネルのバージョン、状況によってマイレージは異なる可能性があるため、これは、@ Gillesなどで言及されている他の低レベルのトリックを試す高レベルのオプションです。


1
@psusi no。ext4 /パーティションを再マウントできました。
ピョートル・フィンデイセン

2
私が考えていたことが判明しましたが、私はumount -froに再マウントしようとしましたが、-fはコマンドがエラーを返さないようにしますが、ファイルシステムは実際には読み取り専用ではありません。
-psusi

1
@psusi、驚きません。すべてのケースで単一のアプローチが機能するとは思わないでしょう。これは私のために繰り返し機能しました(問題についてはラズベリーのext4ルートパーティション)-そして、エラーを無視せずにROに再マウントすることを意味します -したがって、すべてではないがいくつかのケースでうまくいくと思います。申し訳ありませんが、これにはあなたのものは含まれていません。
ピョートル・フィンデイセン

13
男マウントは言う-fです--fake。引用:「実際のシステムコール以外のすべてが行われます。明白でない場合、これはファイルシステムのマウントを「偽造」します。このオプションは、-vフラグと組み合わせて、マウントコマンドが何を試みているかを判断するのに役立ちます-nオプションで以前にマウントされたデバイスのエントリを追加するためにも使用できます-fオプションは、/ etc / mtabの既存のレコードをチェックし、レコードが既に存在する場合に失敗します(通常の非フェイクマウント、このチェックはカーネルによって行われます)。」
ウィルマンリー

3
BSD、したがって、macOSマウント-f は実際には「強制」を意味します。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.