書き込み用にファイルが開いている場合、「mount -o remount,ro」は必ず失敗しますか?

書き込み用にファイルが開いている場合、「mount -o remount,ro」は必ず失敗しますか?

umount -l私はリムーバブルデバイスに安全で競争条件のない代替案を開発しています。

計画中です:

  1. umount --move000絶対パスを介してファイルを開くことができないように、許可ディレクトリにあります。
  2. プロセスを対話的に終了(または正常に終了)し、書き込み用にファイルを開きます。
  3. ステップ(2)が完了したときのみ読み取り専用モードでアトムを再マウントする
  4. 問題を引き起こす可能性がある読み取り専用プロセスを対話的に終了/終了
  5. いよいよumount成功した

rw(3)段階におよびがある競争条件がありますmount -o remount,ro

mount -o remount,roファイルシステムに書き込み用に開いているファイルがある場合は必ず失敗しますか?

マニュアルページにはこれについての内容はありません。その後もデバイスに書き込むことができます。blockdev --setro

答え1

はい。関連コードはsb_prepare_remount_readonly(Linux 4.0以降では、異なるバージョンでコードが異なるように構成される可能性があります。)ロジックは次のとおりです。

  • インストールされている各インスタンスに対して、次の操作を行います。
    • インスタンスが読み取り専用でない場合:
      • 新規作者登録を禁止しますMNT_WRITE_HOLD。 ( )
      • 登録されたWriterがある場合はエラーフラグを設定します(return EBUSY)。
  • ファイルが削除されたが(inodeカウント= 0)、まだ削除されていない(ファイルが開いていたためにまだ存在する場合)、エラーフラグを設定します。
  • エラーフラグが設定されていない場合、パーティションは読み取り専用として表示されます。
  • インストールされている各インスタンスに対して、次の操作を行います。
    • 作家の購読をブロックしないでください。

作成者登録は、メタデータなどの書き込みおよび書き込みのためにファイルを開く継続的な操作mkdirですchmod。通貨を見るmnt_want_write登録された作家の数が増えるところです。

システム設計では、読み取り専用再マウントが書き込み登録バリアになることを保証します。成功すると、登録された作成者がなく、特に再マウント操作中に書き込み用に開いているファイルは存在できません。再マウントすると、書き込み用にファイルを開くことができないため、書き込み用に開いているファイルはまだありません。

関連情報