マウントされたファイルシステムを読み取り専用で再マウントするには、次のコマンドを使用できます。
mount -o remount,ro /foo
/
たとえば、ルートファイルシステム()が呼び出される前に読み取り専用で再マウントされるシャットダウンシーケンスで使用されますhalt/reboot
。
読み取り専用で再マウントすると、実際に何をしますか?カーネルの一部の「フラグ」が変更され、書き込みが拒否されますか?
与えられたファイルシステムを読み取り専用で再マウントする以外に、何もしない独自のプログラムを書くのはどれほど難しいでしょうか。
答え1
ファイルシステムのマウントまたは再マウントは、以下を使用して実行されます。mount(2)
システムコール。再マウントすると、ターゲットの場所(マウントポイント)、マウント操作に使用されたフラグ、および関連する特定のファイルシステムに関する追加データが取得されます。読み取り専用モードで再インストールするときに使用されるフラグはMS_RDONLY
およびですMS_REMOUNT
。ファイルシステムが最初にマウントされたときに使用された他のフラグも提供する必要があります。
読み取り専用モードでファイルシステムを再マウントすると、いくつかのクリーンアップ操作(デフォルトでは未解決の書き込み完了)を実行した後、カーネルのファイルシステムデータ構造にフラグが設定されます。どのように処理されるのか見てください。ソースext4
コード:ext4
ファイルシステムが読み取り - 書き込みとしてマウントされ、読み取り専用に再マウントされると、ファイルシステムが同期され、クォータが一時停止され、スーパーブロック構造が更新され、ファイルシステムが読み取り専用であるs_flags
ことを示します。その後、カーネル全体の書き込みを拒否するために使用されます。sb_permission
これにより、読み取り専用ファイルシステムへの書き込みアクセスがブロックされます。
これを直接行うには、mount()
上記のマンページに従って適切なオプションを使用して呼び出すことができます。完璧なソリューションを得るには、現在のマウントフラグを確認して更新する必要があると思います。ただし、現在マウントされているファイルシステムと一致するように単純なプログラムをハードコードすることもできます。