5

工作人员,这个问题适用于任何相信 Debian linux 的人,更准确地说是 Raspbian,它是在 Raspberry Pi 板上运行的版本:

Raspberry Pi 的所有用户都应该知道:操作系统安装在 SD 卡上。而且问题是SD卡是闪存,这种类型的内存只支持有限数量的写操作。

我想知道Raspbian是否在空闲时写入SD卡。如果发生这种情况,我该如何禁用?

我找到了这个:

David Härdeman 在闪存设备上运行 Linux 的技巧

如果您在 USB 闪存盘上运行 NSLU2,您可能需要做很多事情来减少底层闪存设备的磨损(因为它只支持有限数量的写入)。

注意:本文档当前描述的是 Debian etch (4.0),需要更新到 Debian squeeze (6.0) 和 Debian wheezy (7.0)。有些提示可能仍然适用,但有些可能不适用。

默认情况下,ext3 文件系统每五秒将元数据更改写入磁盘。这可以通过使用 commit=N 参数安装根文件系统来增加,该参数告诉内核延迟写入每 N 秒。

内核为每个已读取的文件写入一个新的 atime,为每次读取生成一个写入。这可以通过使用 noatime 选项挂载文件系统来禁用。上述两项都可以通过在 /etc/fstab 中添加例如 noatime,commit=120,... 来完成。这也可以通过运行以下命令在已挂载的文件系统上完成:

mount -o remount,noatime,commit=120 /

系统每天都会运行 updatedb,它会为系统上的所有文件创建一个数据库,以便与 locate 命令一起使用。这也会给文件系统带来一些压力,所以你可能想通过添加来禁用它

出口 0

在 /etc/cron.daily/find 脚本的早期。

syslogd 在默认安装中会在记录一些新信息后直接将大量日志文件同步到磁盘。您可能需要更改 /etc/syslog.conf 以便每个文件名都以 -(减号)开头,这意味着写入不会立即同步(这会增加系统崩溃时丢失某些日志消息的风险)。例如,如下一行:

内核。* /var/log/kern.log

将更改为:

kern.* -/var/log/kern.log

您可能还希望通过将某些消息类别记录到 /dev/null 来完全禁用它们,有关详细信息,请参阅 syslog.conf(5)。

此外,syslogd 喜欢每 20 分钟写一次 -- MARK -- 行来记录文件,以表明 syslog 仍在运行。这可以通过更改 /etc/default/syslogd 中的 SYSLOGD 来禁用,以便它读取

SYSLOGD="-m 0"

进行任何更改后,您需要通过运行重新启动 syslogd

/etc/init.d/syslogd 重启

如果您在闪存设备上有一个交换分区或交换文件,您可能希望不时将其移动到磁盘的不同部分,以确保磁盘的不同部分受到它可能生成的频繁写入的影响. 对于交换文件,这可以通过在删除旧交换文件之前创建一个新交换文件来完成。

如果您在闪存设备上存储了交换分区或交换文件,则可以通过将 /proc/sys/vm/swappiness 设置为零来确保尽可能少地使用它。

内核还有一个名为laptop_mode 的设置,它可以延迟写入磁盘(最初是为了让笔记本电脑磁盘在不使用时减速,因此得名)。/proc/sys/vm/ 下的许多文件控制它的工作方式:

/proc/sys/vm/laptop_mode:读取后多少秒应该开始写出更改的文件(这是基于读取将导致原本旋转的磁盘再次旋转的假设)。

/proc/sys/vm/dirty_writeback_centisecs:内核应该多久检查一次是否有“脏”(已更改)数据写入磁盘(以厘秒为单位)。

/proc/sys/vm/dirty_expire_centisecs:在内核认为“脏”数据足够老可以写入磁盘之前,它应该有多老。通常将其设置为与上面的dirty_writeback_centisecs 相同的值是一个好主意。

/proc/sys/vm/dirty_ratio:在生成数据的进程将被强制写出之前用于存储脏数据的最大内存量(百分比)。将其设置为较高的值应该不是问题,因为如果系统内存不足,也会发生写出。

/proc/sys/vm/dirty_background_ratio:允许停止将脏数据写入磁盘的较低内存量(百分比)。这应该比上面的dirty_ratio低很多,以允许内核一次性写出大块的脏数据。

上述所有内核参数都可以使用自定义初始化脚本进行调整,例如这个示例脚本。将其存储到例如 /etc/init.d/kernel-params,使其可执行

chmod a+x /etc/init.d/kernel-params

并确保它通过运行执行

update-rc.d 内核参数默认值

注意:大多数这些设置通过增加内存使用量来减少写入磁盘的次数。这增加了内存不足情况的风险(这可能会触发内核中可怕的 OOM 杀手)。这甚至会在有可用内存可用时发生(例如,当内核需要分配多个连续页面并且只有零碎的空闲页面可用时)。

与任何调整一样,建议您密切关注可用内存的数量并根据您的工作负载调整调整(例如,通过使用不那么激进的缓存和增加交换性)。

本文由 David Härdeman 提供

返回到 NSLU2 页面上的 Debian。

http://www.cyrius.com/debian/nslu2/linux-on-flash/

有人有更多提示吗?

4

2 回答 2

0

您可以在加载后将文件放入 tmpfs 并在关闭之前使用来自http://www.observium.org/wiki/Persistent_RAM_disk_RRD_storage的脚本将它们写回

但这可能是有害的:
Tmpfs破坏掉电时的所有变化,必须使用 UPS;
Raspberry Pi RAM 远非大,不要浪费它。

如果你的 pi 经常写小文件,这对你有用

于 2015-03-04T16:52:15.653 回答
0

我一直在使用各种树莓派设置,迄今为止还没有遇到 SD 卡问题(手指交叉)。话虽如此,有一些证据表明 SD 卡寿命相关问题

不过,快速的谷歌搜索确实显示了更多提示:

  1. 越大越好 - 减少特定部分的负载
  2. 写入内存以获取温度
  3. 仅将引导分区存储在 SD 卡上,并将操作系统留在 USB 驱动器上

http://www.makeuseof.com/tag/extend-life-raspberry-pis-sd-card/

无论如何,听到有人在他们的 SD 卡寿命中拥有覆盆子集群或类似集群会很有趣!(https://resin.io/blog/what-would-you-do-with-a-120-raspberry-pi-cluster/

于 2015-01-30T08:44:04.067 回答