跳转到内容

减少系统盘写入:writecache 插件 ​

完成后,系统日志、统计数据这类频繁的小写入不再直接落到系统盘,U 盘和 SD 卡做系统盘能用得更久;你也清楚正常关机时它会把什么写回去,断电又会丢什么。

适合谁 ​

系统盘类型要不要装
U 盘、SD 卡、eMMC 这类闪存必须装。omv-extras wiki 的原话:不用它,SD 卡和 U 盘会过早损坏
SATA 或 NVMe 的 SSD可选。装的话建议同时开每天刷新,这样能保留更多日志
机械硬盘没有实际收益,不用装

闪存按 4 KB 或更大的块写入。系统日志每行可能只有几十字节(wiki 举的例子是 80 字节),每次小写入都要改写整块,这就是写放大。writecache 的做法是:用 overlayfs 把对选定目录(日志、apt 缓存、RRD 统计、monit 状态等)的写入先攒在内存里(tmpfs,或压缩的 zram),在关机时以及你设定的时间点一次性写回磁盘。wiki 说这样最多能把写入的块数减少到十分之一,这是 wiki 的说法,本站没有测过。

它取代了 OMV 7 里的 flashmemory 插件。flashmemory 已经弃用,仓库在 2025-10 归档,两者在包层面互斥。

插件信息 ​

项内容
包名openmediavault-writecache
来源omv-extras
OMV 8 状态截至 2026-10-22,omv-extras 的 synchrony 软件源为 8.3.1(amd64、arm64)
菜单位置服务 → 写缓存(Services → WriteCache)
依赖要先安装 omv-extras。和 openmediavault-flashmemory、folder2ram 互斥,并取代前者
卸载的影响卸载时会先停用并关闭它的 systemd 单元,再删除单元文件;purge 还会清除它在 OMV 里的设置。用户的共享和文件不受影响

断电或强制关机会丢失还没写回的缓存

  • 影响范围:只涉及系统层的数据:系统日志、性能统计(RRD)、monit 状态、apt 和 dpkg 的临时目录。断电、按住电源键强制关机、系统崩溃时,自上一次刷新以来的这部分会丢。个人文件和共享不受影响。另外它改变了这些系统目录的挂载方式,有过一些小问题的报告,见常见问题。
  • 前置条件:内存够用(wiki 说通常远小于 100 MB);正常关机,别靠强制断电;想保留日志,就打开每天刷新;装之前做好系统盘备份。
  • 怎么回退:服务 → 写缓存 里取消勾选已启动,保存并应用,再重启;或者卸载插件。关闭或卸载前,先点页面上的刷新,把缓存里的内容写回去。

安装与启用 ​

  1. 先安装 omv-extras,再到 系统 → 插件(System → Plugins)安装 openmediavault-writecache。wiki 要求装完在控制台页面硬刷新浏览器(Ctrl+Shift+R,macOS 用 Cmd+Shift+R)。
  2. 进入 服务 → 写缓存,确认已启动(Enabled)是勾选的,这是默认值。wiki 的建议是:对绝大多数人,用默认设置,保留关机时刷新和关机时轮转即可。
  3. 保存,点黄色提示条上的应用。

设置项 ​

下表的默认值来自插件的数据库初始值(新安装时写入)和表单源码,以你界面上显示的为准:

字段默认值说明
使用系统内存(Use system memory)开关掉则改用工作区文件夹(一个共享文件夹)存放缓存变更,意外断电也不丢,但写入会落到那块盘上,不要选系统盘自己
内存支持(Memory backing)tmpfstmpfs 最快,用普通内存;压缩内存 (zram) 能在同样的内存里放更多,代价是一点 CPU。两者都是易失的
tmpfs 大小25%上限,不是预留
zram 大小、zram 压缩512M、zstd只在选了 zram 时出现;大小是压缩前的逻辑容量
日志存储(Journal storage)自动可选自动、易失性(内存)、持久(硬盘),决定 systemd 日志放哪里,见下文
启动时刷新关只在使用工作区文件夹时才有意义
关机时刷新(Flush on shutdown)开关机时把缓存写回磁盘
关机时轮转(Rotate on shutdown)开刷新前先运行 journalctl 的轮转和同步
每小时刷新关增加写入
每天刷新(Flush daily)关时间默认 03:45,可改小时和分钟
每日刷新时轮转开
覆盖路径及策略(Overlay paths and policy)见下哪些目录走缓存,以及怎么处理
刷新后重新加载/重启的服务monit = stopdailystart、rrdcached = stopstart刷新时 rrdcached 先停再启,monit 只在每天的计划刷新时这样处理,免得它们写的数据目录被强行带走

覆盖路径及策略每行一条,写成 <路径> = drop 或 <路径> = flush(还可以带 owner=用户:组、mode=0755)。drop 表示刷新和关机时丢弃缓存的变更,flush 表示写回磁盘。默认有九条:

text
/var/cache/apt/archives = drop
/var/cache/samba = drop
/var/lib/apt/lists = drop
/var/lib/dpkg/updates = flush
/var/lib/openmediavault/rrd = flush
/var/lib/rrdcached = flush
/var/lib/monit = flush
/var/log = flush
/var/tmp = drop

插件自己的 README 还写着 /var/log 默认是 drop,以源码里的默认值 flush 和你界面上的为准。除非你清楚在做什么,不要改这张表。

按系统盘类型怎么设 ​

  • U 盘、SD 卡:用默认值。wiki 的最佳实践还包括让 systemd 日志用易失性存储(内存):源码里新安装的默认值是自动,和 wiki 的写法不一致,闪存系统盘可以手动选易失性(内存),代价是 systemd 日志重启后不保留。每天刷新是可选项,会增加一点磨损。
  • SSD:建议打开每天刷新。
  • 机械硬盘:不用装。

手动刷新 ​

页面底部有两个按钮:

  • 刷新(Flush):马上把缓存写回磁盘。
  • 轮转与刷新(Rotate & Flush):先轮转日志再刷新。想在不重启的情况下,在 诊断 → 系统日志(Diagnostics → System Logs)里看到本次开机以来的日志,点它。

刷新时,「刷新后重新加载/重启的服务」里列的服务会按各自的写法短暂停止再启动,刷新结束后恢复。

检查结果 ​

  1. 服务 → 写缓存 页面里的状态框有内容,并显示已激活。
  2. 在 OMV 的 shell 里查看(只读):
sh
# 在 OMV 的 shell 里,以 root 身份
/usr/sbin/omv-writecache status
findmnt -t overlay

第一条应显示 WriteCache: ACTIVE,并给出 Overlays mounted: 9/9(默认九条路径时)。第二条能列出叠加在这些目录上的 overlay 挂载,以实际输出为准。

  1. 正常重启一次,再到 诊断 → 系统日志 看有没有关机前的日志,验证关机时刷新起作用了。

常见问题 ​

会让 NAS 变快吗。 wiki 的回答:可能,因为内存比磁盘快,但主要好处是减少写入,不是提速。

占多少内存。 wiki 说通常远小于 100 MB。tmpfs 大小的 25% 只是上限。

Docker 数据能放在 U 盘系统盘上吗。 不要。Docker 会持续写入,即使有 writecache 也会很快磨损闪存。放到别的盘,见Compose 插件设置详解。

从 OMV 7 升级上来,flashmemory 怎么办。 OMV 8 的 writecache 声明了取代 flashmemory。升级后确认 系统 → 插件 里装的是 writecache,细节见大版本升级。

升级到 OMV 8 后,每次重启都收到 php8.2-fpm 启动失败的告警邮件。 有用户在 OMV 的 GitHub 上报告过这个问题(issue 2097),维护者怀疑与 writecache 有关,用户的做法是在 服务 → 写缓存 里取消启用、保存、重启,再启用、重启,告警消失。根因没有确认。

日志里出现 Journal file has been deleted, rotating。 当 /var/log 的策略是 flush、并且日志存为持久时,每次刷新都会触发 journald 的这条提示(issue 2275)。8.3.1 起,插件在刷新 /var/log 时会先把 journald 临时挪到 /run,已处理。

用 omv-extras 的整机安装脚本装的系统。 脚本默认会装 writecache,可以用 -f 参数跳过。

闪存盘的寿命终究有限,不管有没有 writecache,系统盘都要有备份。

参考资料 ​

  • omv-extras wiki:Write Cache(最后编辑 2025-12-08)。
  • omv-extras 插件源码:openmediavault-writecache(conf.service.writecache.sh 的默认值、表单 YAML、omv-writecache 与 Salt 状态)。
  • OMV 的 GitHub issue:2097、2275。

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。