Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マウント中のファイルシステムの破壊を防ぐ小技

 マウント中のファイルシステムの破壊を防ぐ小技

以下動画のテキストです。
https://youtu.be/Hbgtt1dj9tM

Satoru Takeuchi

August 01, 2020
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. 人間はミスをする • プログラムにバグがなくても人間の操作ミスでデータは簡単に壊せる ◦ 例: wipefs -a /dev/sdb ◦ ブロックデバイス(/dev/sdb)の中にある「ファイルシステムが存在する」という情報をクリア

    • 人間はいずれ必ず操作ミスをする ◦ “Rm -rf /” やっちゃった系ネタの多さ • ミスを防ぐ方法、ミスから復旧する方法はたくさんある ◦ GNU coreutils: “rm -rf /”は”--preserve-root”オプション(デフォルトで有効)付きなら異常終了 ◦ 定期的にバックアップをとっておく • 今回はマウント中のファイルシステムを壊さない方法の一つを紹介 2
  2. Wipefs -aを使ってみる • ソフトウェア環境 1. Ubuntu: 18.04 2. util-linux(wipefsが入っているパッケージ ):

    2.31.1 • 演習 1. 空のデバイスファイルを用意する (以下/dev/sdbとする) 2. /dev/sdb上にファイルシステムを作る ▪ Mkfs.ext4 /dev/sdb 3. ファイルシステムができていることを確認 ▪ Blkid /dev/sdb 4. ファイルシステムを消す ▪ Wipefs -a /dev/sdb 5. ファイルシステムが消えていることを確認 ▪ Blkid /dev/sdb 3
  3. マウント中のファイルシステムを消す • 演習 1. 空のブロックデバイスを用意する (以下/dev/sdbとする) 2. /dev/sdb上にファイルシステムを作る ▪ Mkfs.ext4

    /dev/sdb 3. 上記ファイルシステムをマウント ▪ Mount /dev/sdb mnt 4. ファイルシステムを消す ▪ Wipefs -a /dev/sdb 4
  4. 破壊を防げた理由 • ファイルを開くopen()システムコールのO_EXCLフラグ ◦ 通常はファイルを作成する O_CREATフラグと組み合わせて使う ▪ O_CREATとO_EXCLを両方指定すると、すでにファイルが存在すればエラー終了 ◦ ファイルシステム(正確にはブロックデバイス

    )の保護にも使える ▪ Man 2 openより抜粋 • 演習 1. Strace -o test.log wipefs -a /dev/sdb 2. test.logを見て/dev/sdbをopenしているときのフラグを見る 6 on Linux 2.6 and later, O_EXCL can be used without O_CREAT if pathname refers to a block device. If the block device is in use by the system (e.g., mounted), open() fails with the error EBUSY.
  5. O_EXCLフラグの使用状況 • 有名どころのコマンド ◦ Mkfs.ext4: 使ってる。-f付けてもmount中なら失敗 ◦ Mkfs.xfs: 使ってない ◦

    Mkfs.btrfs: 使ってる。-f付けてもmount中なら失敗 ◦ dd: 使ってない ◦ Shred: 使ってない • フラグを意図的に使っていないのか対応してないだけなのかは不明 7