外观
减少系统盘写入: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);正常关机,别靠强制断电;想保留日志,就打开每天刷新;装之前做好系统盘备份。
- 怎么回退:
服务 → 写缓存里取消勾选已启动,保存并应用,再重启;或者卸载插件。关闭或卸载前,先点页面上的刷新,把缓存里的内容写回去。
安装与启用
- 先安装 omv-extras,再到
系统 → 插件(System → Plugins)安装openmediavault-writecache。wiki 要求装完在控制台页面硬刷新浏览器(Ctrl+Shift+R,macOS 用Cmd+Shift+R)。 - 进入
服务 → 写缓存,确认已启动(Enabled)是勾选的,这是默认值。wiki 的建议是:对绝大多数人,用默认设置,保留关机时刷新和关机时轮转即可。 - 保存,点黄色提示条上的应用。
设置项
下表的默认值来自插件的数据库初始值(新安装时写入)和表单源码,以你界面上显示的为准:
| 字段 | 默认值 | 说明 |
|---|---|---|
| 使用系统内存(Use system memory) | 开 | 关掉则改用工作区文件夹(一个共享文件夹)存放缓存变更,意外断电也不丢,但写入会落到那块盘上,不要选系统盘自己 |
| 内存支持(Memory backing) | tmpfs | tmpfs 最快,用普通内存;压缩内存 (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)里看到本次开机以来的日志,点它。
刷新时,「刷新后重新加载/重启的服务」里列的服务会按各自的写法短暂停止再启动,刷新结束后恢复。
检查结果
服务 → 写缓存页面里的状态框有内容,并显示已激活。- 在 OMV 的 shell 里查看(只读):
sh
# 在 OMV 的 shell 里,以 root 身份
/usr/sbin/omv-writecache status
findmnt -t overlay第一条应显示 WriteCache: ACTIVE,并给出 Overlays mounted: 9/9(默认九条路径时)。第二条能列出叠加在这些目录上的 overlay 挂载,以实际输出为准。
- 正常重启一次,再到
诊断 → 系统日志看有没有关机前的日志,验证关机时刷新起作用了。
常见问题
会让 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。