我在 ubuntu 版本上运行 ext4。为了节省有限 SSD 上的磁盘写入,我将数据写入已安装的 microSD 卡。有人能解释一下在这种情况下日志记录如何工作吗?
当我向未定义格式(fat32、ntfs、ext4)的 microSD 写入数据时,我的本地文件系统会保留日志吗?日志文件会存在于 microSD 上还是我的本地 ssd 上?您可以动态更改日志的存储位置吗?如果可以,如何更改?有没有办法在挂载时更改它?
答案1
事实证明,日志实际上是闪存最友好的写入模式之一。它只是连续的顺序写入。一些闪存设备的问题是它们有一个非常便宜的 FTL,即闪存转换层。这是一个将磁盘读取和写入到特定 LBA(逻辑块地址或 HDD 扇区号)并将其映射到闪存设备内特定闪存芯片上的特定位置的系统。
大多数 SSD 都具有足够好的 FTL,因此日志实际上不是问题。问题出在手机中的 eMMC 设备或 microSD 卡上,制造商关心的是削减材料成本的每一分钱。(如果您要生产数百万部手机或 SD 卡,那么节省一分钱的几分钱会对您的利润产生巨大影响。)因此,真正简单的 FTL 对您可以一次写入磁盘的多少部分有真正的限制,而真正便宜的闪存设备可能一开始就使用便宜的闪存芯片,这才是您真正遇到麻烦的地方。
顺便说一句,我指导了 CMU 的一名研究生,他正在研究“ext4 的 SMR 友好日志”,这也非常适合 ext4。这会抑制随机 4k 写入的最终写回以更新分配位图和 inode 表块,并使用日志中元数据块的副本作为权威副本。这实际上只会对我所说的“廉价闪存设备”产生影响——尽管它会产生相当大的影响。
回答您的问题 Linux 不会自动使用 SD 卡执行任何操作。您可以将其挂载到特定目录,在这种情况下,对该目录的写入将转到 SD 卡,使用 SD 卡上原来的文件系统(除非您重新格式化它)。默认情况下,如今大多数 SD 卡通常采用 FAT32 或 NTFS,并且发行版可能会自动处理它。在这种情况下,它根本不会使用日志记录,也不会影响系统如何写入系统其余部分。
这是可能的使用外部块设备(包括 SD 卡)作为外部日志。如果这样做,您将无法将 SD 卡用于其他任何用途,并且 SD 卡必须在非正常重启后仍存在,以帮助恢复主文件系统。毕竟,这就是日志的全部意义所在——在崩溃或断电后尽量减少文件系统损坏和随之而来的数据丢失。但设置起来很棘手,而且根据你的 SSD,可能根本没有太大的区别。我不知道你说的“有限的 SSD”是什么意思,但如果它是 SSD(而不是 eMMC 或微型 SD 卡),它可能比微型 SD 卡有更好的 FTL。当然,即使对于最糟糕的 FTL,日志写入模式也非常简单,所以使用微型 SD 卡作为日志并不疯狂。但如果 SSD 的 FTL 完全胜任,它可能对 SSD 根本没有帮助。而且,设置外部日志相当复杂,而且不那么用户友好,因为它是一个高级主题,通常只在非常专业的设置上才有意义。
回答您的问题,您可以更改日志的存储位置,但这需要对文件系统进行更改,以便它知道在哪里找到外部日志设备。因此,这比您在挂载时可以更改的一些挂载选项要复杂得多。这是因为真正棘手的部分是确保您在崩溃或电源故障后,在启动过程中可以找到外部日志设备,以便恢复文件系统。根据您的发行版,以及它是否使用初始 ramdisk,以及它是否需要加载模块以支持微型 SD 卡读取器,可能需要更改系统的启动方式。
另外,请记住,如果您的设备掉落,并且微型 SD 卡从机器中飞出,由于缺少日志,设备将立即崩溃,您需要找到并更换 SD 卡,以便之后恢复系统。因此,除非您真的非常非常清楚自己在做什么,并且意识到所有后果,否则我真的不建议使用外部可移动存储设备来存储日志。
这就像拿着装满硝酸甘油的玻璃瓶四处走动。当然,这是可以做到的。甚至可能有一些专家需要这样做的原因。但我可能不会建议化学实验室的新手这样做……