我有一台装有 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 块级备份服务破坏。通过控制面板禁用。