如何防止 Windows 10 每次都破坏 ext4 超级块?

f35*_*f35 25 dual-boot ext4 gparted

5 年多以来,我有一台双启动 Ubuntu/Windows 的电脑。最后的工作配置是:windows 10 和 Ubuntu 16.04 LTS。

我在 Linux 分区上安装了 Ubuntu 16.10 并且遇到了一些问题:

  • 如果我只在 Linux 上启动,没有问题,它工作正常。
  • 如果我启动 Windows,没问题,Windows 工作正常。
  • 如果我在 Windows 之后启动 Linux,则会出现超级块错误并进入 busybox。

如果我用

fsck.ext4 -p -b 884736 -B 4096 /dev/sda5
Run Code Online (Sandbox Code Playgroud)

我可以启动 Linux,但在再次启动到 Windows 后,同样的问题再次出现。

当然,我已经尝试过找到的解决方案:

  • chkdsktestdisk在Windows上。
  • 我删除了扩展分区,让 Linux 安装程序重新创建它们。
  • 由和创建,扩展分区+ ext4并在安装过程中交换并选择这些分区。

分区表(fdisk -lu):

Disk /dev/sda: 298,1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6bb7527c

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1            2048  22783999  22781952  10,9G  7 HPFS/NTFS/exFAT
/dev/sda2  *     22784000  22988799    204800   100M  7 HPFS/NTFS/exFAT
/dev/sda3        22988800 375246847 352258048   168G  7 HPFS/NTFS/exFAT
/dev/sda4       375246848 625141759 249894912 119,2G  f W95 Ext'd (LBA)
/dev/sda5       383440896 617844735 234403840 111,8G 83 Linux
/dev/sda6       617846784 625141759   7294976   3,5G 82 Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)

我又做了一些测试,但没有成功:

  • 我删除了 Linux 扩展分区
  • 我将 Windows 分区扩展到完整磁盘
  • chkdsk /F /R在这个新的 Windows 分区上启动了一个?几个小时后一切都很好
  • 我重新安装了 Ubuntu 16.10 并让安装程序调整磁盘大小并创建 ext4 和交换部分。
  • 我启动Linux?没问题
  • 我启动窗口?没问题(我到达了让我在 Windows 和 Linux 之间进行选择的 Windows 菜单,我选择了 Windows)
  • 我启动 Linux:再次出现同样的问题(超级块错误)

更新:确切的超级块错误:

fsck.ext4: Superblock checksum does not match superblock while trying to open /dev/sda5
Run Code Online (Sandbox Code Playgroud)

修复它:

fsck.ext4 -p -b 884736 -B 4096 /dev/sda5
Run Code Online (Sandbox Code Playgroud)

工作正常,但在 Windows 启动后,问题又出现了......

更新 2:从 W10 开始,我可以使用 W10ext2工具挂载 linux ext4 分区。它工作正常,我可以看到文件。但在那之后,同样的问题,当我在 Linux 上启动时:超级块错误。

当然,如果我只是启动 W10(没有登录)并重启 linux,问题也存在。

W10 1511 存在问题,我已升级到 W10 1607:同样的问题

我看到地球上并非只有我一个人遇到这个问题,但我没有看到任何解决方案。

update2 :我删除了 linux 和交换分区,并从 Windows 创建了一个新分区。然后我重新安装了 Ubuntu 16.10 => 同样的问题

更新 3:解决方案的开始我也许已经找到了解决方案。登录windows时:使用该命令diskpart,设置linux卷后offline ,启动linux时就没有问题了。

我现在必须找到如何自动设置离线音量(regedit?)

小智 14

我做了一些研究,似乎从 ext2fsprogs 1.43 (Ubuntu 16.10) 开始,在metadata_csum创建新的 ext4 文件系统时启用了 64 位和功能。我全新安装了 Ubuntu 16.10,但在安装之前,我开始进入 USB 实时会话并metadata_csum/etc/mke2fs.conf. 在此之后,我在此实时会话中运行了安装程序,现在我可以在不损坏 ext4 分区的情况下启动 Windows 10(您必须在安装 Ubuntu 16.10 期间重新格式化 ext4 分区)。

该问题与 ext2fsd 相关,它显然不支持 64 位功能和/或 metadata_csum 功能。安装 ext2fsd 就足以破坏您的 ext4 分区。无需将它们安装在 Windows 中。

您可以使用以下命令检查这些功能是否已启用:

sudo tune2fs -l /dev/[sdXX]
Run Code Online (Sandbox Code Playgroud)

其中 [sdXX] 代表所讨论的 ext4 分区。

  • 谢谢,它也很好用,我认为这是一个更好的解决方案。我们可以在不重新安装 linux 系统的情况下完成它:从 live CD : sudo tune2fs -O ^metadata_csum,^64bit /dev/sdXX (6认同)

hem*_*pel 13

我有同样的问题,对我来说似乎是 Windows 10 ext2fsd 文件系统驱动程序。也许也适合你?当我卸载 ext2fsd(0.68 版)时,我可以随时启动 Windows 10,并且 ext4 分区保持干净。安装 ext2fsd 后,所有 ext4 分区无论是否安装都会损坏。

  • 谢谢!从 Windows 卸载 ext2fsd 解决了我的问题 (3认同)