华硕笔记本电脑上的 128GB eMMC 驱动器 - 无法格式化为 ext4

k3m*_*tra 6 linux partitioning

我收到了一台新的华硕 BR1100FKA 笔记本电脑作为礼物。该型号的主驱动器为 128GB eMMC。尝试安装 EndeavourOS,然后出现错误。安装程序在格式化为 ext4 时抱怨“输入/输出”错误。

快进一个月了,我还是想不通。作为替代方案,我进行了永久性 USB 随身碟安装。不过,32GB 的空间并不是很宽容。

这是我尝试过的:

  1. 在实时 USB 环境中使用 GParted 对其进行格式化。GParted 在任何更改分区位置、大小和文件系统的操作上都会或多或少地抛出相同的错误。不过 NTFS 是个例外。返回Input/Output error while syncing device,但挂载后分区自动固定。

  2. 从 Windows 10 进行格式化。我试过傲梅助手、易我分区工具、DiskGenius,还有一个我忘了的工具。除非我在 Win10 上故意操作 C: 盘,否则傲梅助手不会格式化为 ext4。这样,傲梅就会在Win PE模式下进行操作,并且不知何故成功了。然而,生成的 ext4 分区很容易出现随机错误。这是一个列表:

  • /home通过已安装的 Thunar 文件管理器从目录复制文件gvfs不会返回错误。然而,尝试通过 /etc/fstab 挂载它们总是失败,并让我进入紧急模式。只有在注释掉 /etc/fstab 中的负责行后才允许我正常启动。返回后手动安装它们无法读取超级块。

  • 使用rsyncwith-v选项,我可以偶尔看到 的几行EXT4 ERROR,但滚动得太快了。也许我稍后会尝试抓住它。

  • cp命令更稳定,通常不会出现错误。但它确实得到了相同的 /etc/fstab 错误。抛出的错误是输入/输出错误。

  • dd命令非常不稳定,最终结果是I/O error

  • ddrescue从未出现过错误,但复制操作系统分区意味着之后需要修复该分区。据我所知,Win10 上不可能。

  • 因为 Calamares 默认首先格式化分区,所以我尝试进行普通 Arch 安装。通过 pacstrap安装baselinux-lts、 和 时linux-firmware,会抛出几个 I/O 错误,下载完成后 pacstrap 会停止而不安装

  • 后来尝试fsck开车。经过一长串错误后,fsck最终得到了I/O Error一个一致的修复(目前无法重新创建,错误列表意味着我需要按 Enter 按钮大约一个小时,或者自动按下并必须观看最后一个错误,还需要 30 分钟。)

  1. BIOS 更新我通过 ASUS 的 EZ Smart Flash 实用程序手动更新了 BIOS。固件是从 Win10 上的 MyASUS 应用程序下载的。没有太多的区别。

  2. 禁用 TPM。没什么区别,只是我无法像平常一样登录Win10。

  3. 手动格式化。使用mkfs.ext4带有选项的命令-v。这是错误:Writing superblocks and filesystem accounting information: mkfs.ext4: Input/output error while writing out and closing file system.

许多关于 I/O 错误的 Google 结果显示硬件故障,尽管我怀疑情况是否如此。我还阅读了很多有关从 eMMC 启动的内容,但我想首先解决它们的格式化问题。有些人已经通过 BIOS 设置解决了这个问题,而我的 BIOS 设置中不存在这些设置。

我尝试过 KDE-Neon 和 EndeavourOS 中的 Gparted。

任何帮助,将不胜感激!

Tar*_*yko 9

我的 ASUS BR1100FKA、128GB eMMC 和 Ubuntu 20.04 也有同样的情况。

笔记本电脑似乎有 eMMC 控制器,但 CQE 实现存在缺陷。

Linux 内核版本 5.5开始,可以通过指定模块debug_quirks=0x20000选项来使系统避免使用 CQE sdhci。(是sdhci.h0x20000中 SDHCI_QUIRK_BROKEN_CQE 标志的值)。正确传播该选项后,我能够在这台笔记本电脑的 eMMC 驱动器上安装和使用带有 ext4 rootfs 的 Ubuntu 20.04。

有几种常见方法可以将选项推送到系统,具体取决于您所处的情况:

方式1:卸载模块并使用指定的选项重新加载。

sudo modprobe -r sdhci_pci
sudo modprobe -r sdhci
sudo modprobe sdhci debug_quirks=0x20000
sudo modprobe sdhci_pci
Run Code Online (Sandbox Code Playgroud)

当系统在引导期间不访问 eMMC 驱动器时,此方法有效。例如,您正处于某种 Linux 安装程序中,并且即将开始在 eMMC 驱动器上进行安装。

方式 2sdhci.debug_quirks=0x20000 :在内核命令行中指定选项。

这通常可以通过引导加载程序菜单来完成。当在启动过程中使用 eMMC 驱动器并且您没有机会通过/etc/modprobe.dinitramfs 刻录该选项时,这可能会节省时间。

方式三:使用/etc/modprobe.d

创建一个文件,/etc/modprobe.d/sdhci-disable-cqe.conf其中包含:

options sdhci debug_quirks=0x20000
Run Code Online (Sandbox Code Playgroud)

这通常是永久调整模块加载行为的“正确”方法。然而,为了让它在早期启动时工作,应该确保配置文件到达 initrd 映像。执行此操作的方法可能因发行版而异。对于 Ubuntu,它通常sudo update-initramfs -u在创建/编辑/etc/modprobe.d.

PS:据我所知,debug_quirks 似乎是在常见内核构建上禁用 CQE 的唯一可用选项。该问题似乎很少见,通常在某些特定的非 x86 硬件上遇到。我真的很绝望,正准备订购 SSD,挖掘 sdhci 源代码以获取所有可用选项以响应一些(非 CQE 相关)debug_quirks 提到的想法就在最后一刻出现=)