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

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

我有一台装有 Ubuntu/Windows 双启动系统的电脑,使用时间超过 5 年。上次使用配置是: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

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

当然我也尝试过找到的解决方案:

  • chkdsk以及testdisk在 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

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

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

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

fsck.ext4: Superblock checksum does not match superblock while trying to open /dev/sda5

修复方法:

fsck.ext4 -p -b 884736 -B 4096 /dev/sda5

工作正常,但 Windows 启动后,问题再次出现......

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

当然,如果我只是启动 W10(无需登录)并重新启动 Linux,问题也会出现。

该问题出现在 W10 1511 上,我已升级到 W10 1607:同样的问题

我发现在这个世界上遇到这个问题的不止我一个人,但我没有找到任何解决方案。

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

更新 3:解决方案的开始我可能已经找到了解决方案。登录 Windows 时:使用命令diskpart,设置 Linux 卷后,offline 启动 Linux 时不再出现问题。

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

答案1

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

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

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

sudo tune2fs -l /dev/[sdXX]

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

答案2

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

答案3

我有一个适合我的解决方案(diskpart 是我的朋友)

1)在cmd管理窗口中识别linux分区:

diskpart
list volume

你可以看到你的 linux 分区

  N° volume   Ltr  Nom          Fs     Type        Taille   Statut     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     D   BIOS_RVY     NTFS   Partition     10 G   Sain
  Volume 1     E   System       NTFS   Partition    100 M   Sain       Système
  Volume 2     C   OS_Install   NTFS   Partition    131 G   Sain       Démarrag
  Volume 3     L                       Partition     18 G   Sain     

DISKPART>

就我而言:第 3 卷

2)用记事本创建diskpart脚本,创建文件volume3offline.txt

select volume 3
offline volume
exit

3)用记事本创建一个bat文件,在同一目录中创建文件govolume3offline.bat

cd \users\f35\documents
diskpart /s volume3offline.txt

4)创建计划任务打开windows tash调度程序编写一个在启动时启动govolume3offline.bat的任务

5)重启 Windows 后检查是否一切正常

diskpart
list volume

你的 Linux 卷应该处于离线状态

在 Linux 中重启

If no errors => it's good
if you have errors, 
    correct them
    reboot in windows
    reboot in linux 
       If no errors => it's good
       if you have errors, goto 1)

答案4

Ubuntu 分区上的超级块正被 Windows 10 块级备份服务破坏。通过控制面板禁用。

相关内容