Linux:是否存在可以承受突然的存储设备断开连接的文件系统?

Linux:是否存在可以承受突然的存储设备断开连接的文件系统?

这可能更适合 UNIX 和 Linux,所以请告诉我。我想知道 Linux 中是否有一个文件系统可以承受(或设计为能够更好地处理)SSD/闪存介质的硬断开?一个好的亚军答案是建议一个文件系统挂载参数配置,通过适当的调整,可以为断开事件做好最好的准备。

为了使我的用例清晰,一个例子是删除安装SD 卡无需经过软件/操作系统卸载过程。谢谢!

答案1

这是一个令人恐惧的话题,有几种途径可供调查......我将介绍其中两个大途径。

请观看 ELC 2015 的此次演讲:嵌入式设备的文件系统注意事项

文件系统

文件系统需要小心处理对磁盘的写入。例如,如果先扩展文件的长度,然后再写入数据,则可能会出现问题。这是一个很容易发生的问题,我今天刚刚查看了一个显示此问题的日志文件 - 系统意外断电:

00017ea0  6f 74 29 20 43 4d 44 20  28 20 20 20 63 64 20 2f  |ot) CMD (   cd /|
00017eb0  20 26 26 20 72 75 6e 2d  70 61 72 74 73 20 2d 2d  | && run-parts --|
00017ec0  72 65 70 6f 72 74 20 2f  65 74 63 2f 63 72 6f 6e  |report /etc/cron|
00017ed0  2e 68 6f 75 72 6c 79 29  0a 00 00 00 00 00 00 00  |.hourly)........|
00017ee0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017ef0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f30  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f50  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f80  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f90  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fa0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fc0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fd0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fe0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017ff0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00018000  4d 61 72 20 31 30 20 31  35 3a 31 38 3a 33 34 20  |Mar 10 15:18:34 |
00018010  72 6f 6c 6c 79 20 72 73  79 73 6c 6f 67 64 3a 20  |rolly rsyslogd: |
00018020  5b 6f 72 69 67 69 6e 20  73 6f 66 74 77 61 72 65  |[origin software|

所以是的……文件系统必须能够处理此类事件。有商业产品可以提供断电恢复能力,但我不推荐。

当然,尽可能多地使用只读文件系统是一大优势 - 例如,将操作系统放在只读文件系统上,将配置(等等)放在读写文件系统上。这可能会帮助您从损坏中恢复并恢复服务。

此外,日志文件系统将通常会更好地处理此类事件,但不假设任何级别的保证...上面的日志文件位于ext4具有日志记录的文件系统中。

存储介质

您提到 SD 卡是底层存储……这令人担忧。事实上,所有闪存都存在意外断电的问题。这是由于它们的工作方式 - 磨损均衡完全由存储控制器处理,因此它可以随时决定移动页面。

此外,对页面的写入通常包含一整套操作,并且没有保证/标准来规定它们发生的顺序。

  1. 检查是否有已擦除或新页面 - 必要时擦除一页
  2. 从旧页面读取数据
  3. 根据应用修改write()
  4. 撰写新页面
  5. 重新链接逻辑到物理映射

有很多这样的故事,人们拔掉系统或存储设备的电源后发现“我的 128GB SSD 显示为 1GB“ 或者 ”我的 SD 卡不再起作用“, ETC...

引自 JEDEC 84-A441:(诚然指的是 eMMC,但可能相关)

重置卡(使用 CMD0、CMD15 或 e•MMC 的硬件重置)或电源故障将终止任何待处理或活动的编程操作。除非启用了可靠写入,否则这可能会使操作处理的部分或全部数据处于未知状态。主机有责任防止这种情况发生。

概括

不幸的是,实际上没有任何好的/可靠的步骤可以采取来促进“无需经过软件/操作系统卸载过程即可移除已安装的 SD 卡“并且不会遇到问题。

故事的寓意是 - 找到一种正确的方法来sync确保unmount文件系统数据是连续的,并且write()当用户断开连接时没有任何正在进行的操作。

答案2

RFS——三星文件系统“强健文件系统”应该可以满足这一要求。

实际上,您应该能够使用任何日志文件系统或执行写时复制的系统(ext3、ext4 甚至 btrfs)。您面临的风险(适用于任何文件系统)是操作系统可能会缓冲信息,或者在您拔出磁盘时可能尚未完成写入 - 在这种情况下,任何未完成写入的信息都不会被存储(但现有数据不会被破坏,或者,如果被破坏,可以从日志中重放)。

相关内容