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

無いはずのパーティションがある Phantom Atari Partition

無いはずのパーティションがある Phantom Atari Partition

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

Satoru Takeuchi

June 23, 2024
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. これは何? • パーティションテーブルのタイプは”Atari” • 📝 Atariパーティションテーブル ◦ 1980年代から1890年代に普及したAtari STというコンピュータがあった ▪

    ビデゲームの文脈で出てきた Atariが開発 ◦ Atari STではディスクのパーティションを Atariパーティションテーブルを使って管理していた 5 $ parted -s /dev/vdb print … Partition Table: atari
  2. LinuxのAtariパーティションテーブル認識ロジック 8 … rs = read_part_sector(state, 0, &sect); ☆ rsにはディスクの先頭領域のデータが入る

    if (!rs) return -1; /* Verify this is an Atari rootsector: */ hd_size = get_capacity(state->disk); ☆ 4つの領域のどれかが Atariパーティションと判定されればよし if (!VALID_PARTITION(&rs->part[0], hd_size) && !VALID_PARTITION(&rs->part[1], hd_size) && !VALID_PARTITION(&rs->part[2], hd_size) && !VALID_PARTITION(&rs->part[3], hd_size)) { /* * if there's no valid primary partition, assume that no Atari * format partition table (there's no reliable magic or the like * :-() */ … https://github.com/torvalds/linux/blob/v6.9/block/partitions/atari.c
  3. VALID_PARTITION()の定義 9 … /* check if a partition entry looks

    valid -- Atari format is assumed if at least one of the primary entries is ok this way */ #define VALID_PARTITION(pi,hdsiz) \ (((pi)->flg & 1) && \ isalnum((pi)->id[0]) && isalnum((pi)->id[1]) && isalnum((pi)->id[2]) && \ be32_to_cpu((pi)->st) <= (hdsiz) && \ be32_to_cpu((pi)->st) + be32_to_cpu((pi)->siz) <= (hdsiz)) … https://github.com/torvalds/linux/blob/v6.9/block/partitions/atari.c
  4. その他いろいろ • Ceph以外にもAtari Partitionの報告事例はある ◦ Kubernetes PVC Atari partition ▪

    https://groups.google.com/g/coreos-user/c/ZTUtkQzz1dw ◦ Reload this Page Reformatting external drive with parted & mkfs: "Found a atari partition table in /dev/sdb1" ▪ https://www.linuxquestions.org/questions/slackware-14/reformatting-external-drive-with-p arted-and-mkfs-found-a-atari-partition-table-in-dev-sdb1-4175698678/ • RookというCephのオーケストレーションはわりと悲惨なことになった ◦ 設定に従ってディスクを自動的に OSDとして初期化 ◦ Linuxはディスク上にAtari Partitionがあると認識 ◦ 設定次第では、Atari partition上に自動的にOSDを初期化してしってデータ破壊することが … ◦ 最終的には問題を回避する修正が Cephに入った 10