Raspberry Pi 打造更具弹性的 File 系统
文件范围
本文档适用于以下树莓派产品:
树莓派 0 | 树莓派 1 | 树莓派 2 | 树莓派 3 | 树莓派 4 | 树莓派 400 | CM1 | CM3 | CM4 | CM 5 | 微微 | ||||
0 | W | H | A | B | A | B | B | 全部 | 全部 | 全部 | 全部 | 全部 | 全部 | 全部 |
* | * | * | * | * | * | * | * | * | * | * | * | * | * |
|
介绍
Raspberry Pi Ltd 的设备经常被用作数据存储和监控设备,通常用于可能突然断电的地方。与任何计算设备一样,断电可能会导致存储损坏。本白皮书提供了一些选项,指导您如何通过选择合适的 file 系统和设置,以确保数据完整性。本白皮书假设 Raspberry Pi 运行 Raspberry Pi (Linux) 操作系统 (OS),并已完全更新至最新固件和内核。
什么是数据损坏以及它为什么会发生?
数据损坏是指在写入、读取、存储、传输或处理过程中发生的计算机数据意外更改。本文档中,我们仅指存储,而非传输或处理。当写入过程在完成之前被中断,导致写入无法完成时,可能会发生损坏,例如amp如果断电,则会导致数据丢失。现在值得快速介绍一下 Linux 操作系统(以及 Raspberry Pi 操作系统)如何将数据写入存储。Linux 通常使用写入缓存来存储要写入存储的数据。这些缓存将数据缓存(临时存储)在随机存取存储器 (RAM) 中,直到达到某个预定义的限制,此时所有未完成的对存储介质的写入都将在一个事务中完成。这些预定义的限制可能与时间和/或大小有关。例如amp例如,数据可能会被缓存,每五秒才写入一次存储器,或者仅在积累到一定量的数据后才写出。这些方案用于提高性能:一次性写入大量数据比写入大量小块数据更快。
但是,如果在数据存储到缓存和写入之间断电,数据就会丢失。在写入过程的后续阶段,即数据物理写入存储介质的过程中,还可能出现其他问题。一旦某个硬件(例如,amp即使设备(例如安全数字 (SD) 卡接口)被告知写入数据,数据仍然需要一定的时间才能被物理存储。同样,如果在这极短的时间内发生电源故障,写入的数据可能会损坏。关闭计算机系统(包括 Raspberry Pi)时,最佳做法是使用关机选项。这将确保所有缓存数据都已写出,并且硬件有时间将数据实际写入存储介质。大多数 Raspberry Pi 系列设备使用的 SD 卡非常适合作为廉价的硬盘替代品,但随着时间的推移,它们容易出现故障,具体取决于它们的使用方式。SD 卡中使用的闪存具有有限的写入周期寿命,当接近该极限时,它们可能会变得不可靠。大多数 SD 卡使用一种称为损耗均衡的程序来确保其使用寿命尽可能长,但最终它们可能会失效。这可能需要数月到数年的时间,具体取决于写入或(更重要的是)从卡中擦除的数据量。不同卡的使用寿命可能存在很大差异。 SD 卡故障通常由随机 file 由于 SD 卡的部分功能无法使用,导致损坏。
数据损坏还有其他原因,包括但不限于存储介质缺陷、存储写入软件(驱动程序)或应用程序本身的错误。就本白皮书而言,任何可能导致数据丢失的过程均定义为损坏事件。
什么可以引发写入操作?
大多数应用程序都会对存储进行某种写入操作,例如ample 配置信息、数据库更新等。其中一些 file这些文件甚至可能是临时的,即仅在程序运行时使用,并且不需要在电源循环后进行维护;但是,它们仍然会导致写入存储介质。即使您的应用程序实际上没有写入任何数据,Linux 也会在后台不断地写入存储,主要是写入日志信息。
硬件解决方案
虽然并非本白皮书的全部讨论范围,但值得一提的是,防止意外断电是一种常用且易于理解的缓解数据丢失的方法。不间断电源 (UPS) 等设备可确保电源稳定供电,如果 UPS 断电,在电池供电的情况下,它可以通知计算机系统即将断电,以便在备用电源耗尽之前正常关机。由于 SD 卡的使用寿命有限,因此制定更换制度以确保在 SD 卡达到使用寿命之前进行更换可能非常有用。
强壮的 file 系统
Raspberry Pi 设备可以通过多种方式增强其抵御损坏事件的能力。这些方法的防损坏能力各不相同,但每一种措施都能降低损坏发生的概率。
- 减少写入
只需减少应用程序和 Linux 操作系统的写入量即可带来有益的效果。如果您进行了大量日志记录,那么在发生损坏事件时发生写入的可能性就会增加。减少应用程序中的日志记录取决于最终用户,但 Linux 中的日志记录也可以减少。如果您使用基于闪存的存储(例如 eMMC、SD 卡),这一点尤其重要,因为它们的写入生命周期有限。 - 更改提交时间
提交时间 file 系统缓存数据的时间,指的是在将数据全部复制到存储之前缓存数据的时间。增加此时间可以通过批量处理大量写入来提高性能,但如果在数据写入之前发生损坏事件,则可能导致数据丢失。减少提交时间可以降低发生损坏事件导致数据丢失的可能性,尽管这并不能完全避免这种情况。
更改主 EXT4 的提交时间 file Raspberry Pi OS 系统,你需要编辑 \etc\fstab file 这定义了如何 file 系统在启动时安装。 - $sudo nano /etc/fstab
将以下内容添加到根目录的 EXT4 条目中 file 系统:
- 提交=
因此,fstab 可能如下所示,其中提交时间已设置为 3 秒。如果没有特别设置,提交时间将默认为 5 秒。
暂时的 file 系统
如果申请需要临时 file 存储,即仅在应用程序运行时使用的数据,不需要在关机时保存,那么防止对存储进行物理写入的一个好选择是使用临时 file 系统,tmpfs。因为这些 file 系统是基于 RAM 的(实际上是在虚拟内存中),写入 tmpfs 的任何数据都不会写入物理存储,因此不会影响闪存寿命,并且不会因损坏事件而受损。
创建一个或多个 tmpfs 位置需要编辑 /etc/fstab file,控制所有 file Raspberry Pi OS 系统。以下示例ample 将基于存储的位置 /tmp 和 /var/log 替换为临时 file 系统位置。第二个示例ample 取代了标准日志文件夹,限制了 file 系统容量为 16MB。
- tmpfs /tmp tmpfs 默认值,noatime 0 0
- tmpfs /var/log tmpfs 默认值,noatime,size=16m 0 0
还有一个第三方脚本可以帮助设置日志记录到 RAM,可以在 GitHub 上找到。它还具有一个附加功能,可以按照预定义的时间间隔将基于 RAM 的日志转储到磁盘。
只读根 file 系统
根 file 系统(rootfs)是 file 系统在根目录所在的磁盘分区上,它是 file 所有其他 file 系统在启动时挂载。在 Raspberry Pi 上,它是 /,默认情况下它位于 SD 卡上,是一个完全可读写的 EXT4 分区。还有一个启动文件夹,它被挂载为 /boot,是一个可读写的 FAT 分区。将 rootfs 设置为只读可以防止对其进行任何形式的写入访问,从而使其对损坏事件的鲁棒性更高。但是,除非采取其他措施,否则这意味着任何内容都无法写入 file 系统完全无法访问,因此禁止将应用程序中的任何类型的数据保存到 rootfs。如果您需要存储应用程序中的数据,但想要一个只读的 rootfs,一种常见的方法是添加一个 USB 记忆棒或类似设备,仅用于存储用户数据。
笔记
如果您正在使用交换 file 使用只读 file 系统,你需要移动交换 file 到读/写分区。
覆盖 file 系统
覆盖 file 系统(overlayfs)结合了两个 file 系统,上部 file 系统和较低的 file 系统。当名称同时存在于 file 系统,上层的对象 file 系统可见,而物体在下方 file 系统要么被隐藏,要么在目录的情况下与上层对象合并。Raspberry Pi 在 raspi-config 中提供了一个选项来启用覆盖文件系统 (overlayfs)。这将使根文件系统 (下层) 变为只读,并创建一个基于 RAM 的上层 file 系统。这给出了与只读非常相似的结果 file 系统重启后,所有用户更改都将丢失。您可以使用命令行 raspi-config 或使用“首选项”菜单上的 Raspberry Pi 配置桌面应用程序来启用覆盖文件系统 (overlayfs)。
还有其他 overlayfs 实现,可以将所需的更改从上层同步到下层 file 系统按照预定的时间表运行。例如amp比如,您可能每十二小时将用户主文件夹的内容从上层复制到下层。这会将写入过程限制在很短的时间内,意味着损坏的可能性要小得多,但也意味着如果在同步之前断电,则自上次同步以来生成的任何数据都会丢失。计算模块上的 pSLC Raspberry Pi 计算模块设备上使用的 eMMC 内存是 MLC(多层单元),其中每个存储单元代表 2 位。pSLC 或伪单层单元是一种 NAND 闪存技术,可在兼容的 MLC 存储设备中启用,其中每个单元仅代表 1 位。它旨在在 SLC 闪存的性能和耐用性与 MLC 闪存的成本效益和更高容量之间取得平衡。pSLC 具有比 MLC 更高的写入耐久性,因为降低数据写入单元的频率可以减少磨损。虽然MLC的写入次数约为3,000到10,000次,但pSLC的写入次数却显著增加,接近SLC的耐用性水平。与使用标准MLC的设备相比,pSLC技术的耐用性提升意味着其使用寿命更长。
MLC 内存比 SLC 内存更具成本效益,但 pSLC 虽然比纯 MLC 内存性能和耐用性更高,但却是以牺牲容量为代价的。配置 pSLC 的 MLC 设备容量只有标准 MLC 设备的一半(甚至更少),因为每个单元仅存储一位,而不是两位或更多位。
实现细节
pSLC 在 eMMC 上作为增强用户区域(也称为增强存储)实现。增强用户区域的实际实现并未在 MMC 标准中定义,通常为 pSLC。
- 增强用户区是一个概念,而 pSLC 是一种实现。
- pSLC 是实现增强用户区 (Enhanced User Area) 的一种方法。
- 在撰写本文时,Raspberry Pi 计算模块上使用的 eMMC 使用 pSLC 实现增强用户区域。
- 无需将整个 eMMC 用户区域配置为增强用户区域。
- 将内存区域编程为增强用户区域是一次性操作。这意味着它无法撤消。
开启它
Linux 在 mmc-utils 包中提供了一组用于操作 eMMC 分区的命令。在 CM 设备上安装标准 Linux 操作系统,并按如下方式安装工具:
- sudo apt安装mmc-utils
获取有关 eMMC 的信息(由于需要显示的信息很多,因此该命令会通过管道传输到 less 中):
- sudo mmc extcsd 读取 /dev/mmcblk0 | 更少
警告
以下操作仅需一次性操作,一次即可完成,且不可撤消。此外,您还应在使用计算模块之前运行这些操作,因为它们会擦除所有数据。eMMC 的容量将减少到之前的一半。
用于启用 pSLC 的命令是 mmc enh_area_set,它需要几个参数来指定 pSLC 将在多大的内存区域内启用。以下示例ample 使用整个区域。有关如何使用 eMMC 子集的详细信息,请参阅 mmc 命令帮助 (man mmc)。
设备重启后,您将需要重新安装操作系统,因为启用 pSLC 将清除 eMMC 的内容。
Raspberry Pi CM Provisioner 软件提供了一个选项,可以在配置过程中设置 pSLC。该选项可在 GitHub 上找到: https://github.com/raspberrypi/cmprovision.
- 设备外 file 系统/网络启动
Raspberry Pi 可以通过网络连接启动,例如amp使用网络 File 系统(NFS)。这意味着一旦设备完成其第一个tage boot,而不是加载其内核和根目录 file 系统从 SD 卡启动后,会从网络服务器加载。一旦运行,所有 file 操作在服务器上进行,而不是在本地 SD 卡上进行,本地 SD 卡在程序中不再发挥任何作用。 - 云解决方案
如今,许多办公任务都在浏览器中完成,所有数据都存储在云端。将数据存储在 SD 卡之外显然可以提高可靠性,但代价是需要始终保持网络连接,并可能产生云服务提供商的费用。用户可以使用功能齐全的 Raspberry Pi OS 安装,并搭配针对 Raspberry Pi 优化的浏览器,访问谷歌、微软、亚马逊等供应商提供的任何云服务。另一种选择是使用瘦客户端供应商,他们将 Raspberry Pi OS 替换为运行在中央服务器(而非 SD 卡)上的资源上的操作系统/应用程序。瘦客户端的工作原理是远程连接到基于服务器的计算环境,大多数应用程序、敏感数据和内存都存储在该环境中。
结论
只要遵循正确的关机程序,Raspberry Pi 的 SD 卡存储就非常可靠。这在可以控制关机的家庭或办公室环境中非常有效,但在工业用途或电源不稳定的区域使用 Raspberry Pi 设备时,采取额外的预防措施可以提高可靠性。
简而言之,提高可靠性的选项可以列举如下:
- 使用知名的、可靠的 SD 卡。
- 使用更长的提交时间、使用临时 file 系统,使用 overlayfs 或类似的东西。
- 使用网络启动或云存储等设备外存储。
- 实施在 SD 卡达到使用寿命之前更换它的制度。
- 使用 UPS。
Raspberry Pi 是 Raspberry Pi Ltd 的商标
树莓派有限公司
版权页
© 2020-2023 Raspberry Pi Ltd(原 Raspberry Pi (Trading) Ltd.)
本文档根据知识共享署名-禁止演绎 4.0 国际 (CC BY-ND) 许可。
- 构建日期:2024-06-25
- 构建版本:githash:3e4dad9-clean
法律免责声明
不时修改的 RASPBERRY PI 产品(包括数据表)的技术和可靠性数据(“资源”)由 RASPBERRY PI LTD(“RPL”)“按原样”提供,以及任何明示或暗示的保证,包括但不限于TO,不提供针对特定用途的适销性和适用性的默示保证。 在适用法律允许的最大范围内,在任何情况下,RPL 均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于替代商品或服务的采购;使用损失、数据, 或利润; 或业务中断),无论是基于合同、严格责任或侵权行为(包括疏忽或其他)以任何方式因使用资源而引起的任何责任理论,即使已被告知这种可能性此类损坏。
RPL 保留随时对资源或其中描述的任何产品进行任何增强、改进、更正或任何其他修改的权利,恕不另行通知。资源适用于具有适当设计知识水平的熟练用户。用户对其对资源的选择和使用以及对其中描述的产品的任何应用负全部责任。用户同意赔偿并免除 RPL 因其使用资源而产生的所有责任、费用、损害或其他损失。RPL 仅允许用户将资源与 Raspberry Pi 产品结合使用。禁止将资源用于其他任何用途。RPL 未授予任何其他 RPL 或其他第三方知识产权的许可。
高风险活动。Raspberry Pi 产品并非设计、制造或预期用于需要故障安全性能的危险环境,例如核设施、飞机导航或通信系统、空中交通管制、武器系统或安全关键应用(包括生命支持系统和其他医疗设备)的运行,在这些环境中,产品故障可能直接导致死亡、人身伤害或严重的物理或环境损害(“高风险活动”)。RPL 明确否认任何明示或暗示的高风险活动适用性保证,并且对于在高风险活动中使用或包含 Raspberry Pi 产品不承担任何责任。Raspberry Pi 产品受 RPL 标准条款约束。RPL 提供的资源不会扩展或以其他方式修改 RPL 标准条款,包括但不限于其中表达的免责声明和保证。
常见问题
- 问:本文档支持哪些 Raspberry Pi 产品?
答:本文档适用于各种 Raspberry Pi 产品,包括 Pi 0 W、Pi 1 A/B、Pi 2 A/B、Pi 3、Pi 4、Pi 400、CM1、CM3、CM4、CM5 和 Pico。 - 问:如何减少 Raspberry Pi 设备上数据损坏的可能性?
答:您可以通过最小化写入操作(尤其是日志记录活动)并调整提交时间来减少数据损坏 file 本文档中描述的系统。
文件/资源
![]() |
Raspberry Pi 打造更具弹性的 File 系统 [pdf] 用户指南 Pi 0,Pi 1,打造更具弹性 File 系统更具弹性 File 系统,弹性 File 系统, File 系统 |