https://askubuntu.com/questions/849872/how-can-i-prevent-windows-10-from-corrupting-the-ext4-superblock-every-time
Windows を再起動した後にUbuntu 16.10 やUbuntu 17.04 が起動しなくなってしまいました。Ubuntu 16.04 は問題無かったので不思議に思っていたところ原因がわかりました。

事象

Ext2Fsd はWindows からExt4 パーティションにアクセスできるようになるとても便利なドライバです。私はExt2Fsd をWindows10 に入れていましたが、Windows を再起動した後にext4パーティションが壊れる場合があることに気が付きました。

対象 結果
昔作ったデータ用のext4 パーティション群 問題なし
Ubuntu 16.04 のext4 パーティション 問題なし
Ubuntu 16.10 のext4 パーティション 壊れた
Ubuntu 17.04 のext4 パーティション 壊れた

原因

以下の条件からUbuntu 16.10 以降で作成したext4 パーティションのスーパーブロックが破壊されたようです。

  • Ubuntu 16.10 以降ではext4 パーティションを作成する際のデフォルトにmetadata_csumオプションと64bitオプションが追加されました。
    metadata_csumオプションはCRCを付けるようです。
    64bitオプションは16TB以上のパーティションの作成が可能になるようです。
  • Ext2Fsd はmetadata_csumオプションと64bitオプションに対応していません。対象のext4パーティションを明示的にマウントしていなくても破壊してしまうようです。

対策

以下のいずれかで暫定対策できそうです。

  • 対策方法A
    Ext4Fsd をアンインストールします。
  • 対策方法B
    パーティションを作成する前に/etc/mke2fs.confを編集し、metadata_csumオプションと64bitオプションを無効にするために、以下のファイルからmetadata_csum64bitの指定を削除します。
    /etc/mke2fs.conf
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [fs_types]
    ext3 = {
    features = has_journal
    }
    ext4 = {
    features = has_journal,extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize
    inode_size = 256
    }
    ext4dev = {
    features = has_journal,extent,huge_file,flex_bg,metadata_csum,inline_data,64bit,dir_nlink,extra_isize
    inode_size = 256
    options = test_fs=1
    }
  • 対策方法C (試してませんが・・・)
    パーティション作成後、metadata_csumオプションと64bitオプションを無効にする。
    $ sudo tune2fs -l /dev/sda7
    $ sudo tune2fs -O ^metadata_csum,^64bit /dev/sda7
    $ sudo tune2fs -l /dev/sda7

コメント