journalctl -p err
给出[sdX] Assuming drive cache: write through
我的每个硬盘驱动器,其中 X 是从a
到f
。这些是普通硬盘,Ubuntu 在 VMWare 下运行。如何预先配置驱动器缓存的写入模式,以便 Linux 不会就此问题做出任何假设,也不会将它们显示为错误?我不只是想要隐藏此错误消息或阻止 Linux 将其发送到屏幕。我想解决这些错误的原因,尽管有些人说这些错误是普通的。
答案1
该错误消息由 Linux 内核发出。从 v5.0 开始,它没有您所要求的功能。因此,实现这一点的方法将涉及为 Linux 内核编写必要的 C 代码:-)。
与此相关:如果 Linux 将驱动器或控制器模型识别为具有特定的“怪癖”,那么它在哪里不是做出这个假设是安全的,那么它仍然会打印一条消息。但在这种情况下,它不会显示为错误。请参阅下面引用和链接的源代码。
就数据完整性而言,安全的假设肯定是“回写”,而不是“直写”。也就是说,对于 Linux 来说,在不需要时发送缓存刷新似乎更安全,而不是相反:-)。我不确定如果 Linux 被改变以做出更安全的假设,会有什么缺点。然而,根据快速网络搜索,我认为这可能会降低某些 RAID 控制器的性能,这些控制器都有电池支持的缓存,并且无法提供此缓存信息。
提交 b81478d82e38:如果存在 USB 缓存怪异,[SCSI] 设置为 WCE。
if (sdp->wce_default_on) {
sd_printk(KERN_NOTICE, sdkp, "Assuming drive cache: write back\n");
sdkp->WCE = 1;
} else {
sd_printk(KERN_ERR, sdkp, "Assuming drive cache: write through\n");
sdkp->WCE = 0;
}
假设您的 SCSI 磁盘由 VMware 模拟,理想的解决方法是使用更擅长模拟磁盘的虚拟化软件,并提供所有正确的缓存信息,而不需要假设:-)。
一位内核开发人员最近在该错误消息的上下文中引用了一句话:“设备不实现缓存模式页面是很不寻常的”。