FreeBSD 中文社区翻译文章存档
FreeBSD 中文社区
  • FreeBSD 网络文章集锦
  • 2025 年
    • BSD 许可证一览
    • FreeBSD 上的 ZFS 日志压缩
    • 为 FreeBSD 发声:FOSDEM 2025 参会报告
    • zfs 速查手册
    • FreeBSD 开发计划
    • 谁在使用 FreeBSD(基金会官方版本)
    • FreeBSD 特色开发项目
    • 如何将基于 Electron 的应用程序移植到 FreeBSD
    • FreeBSD:原始操作系统发行版的火炬传承者
    • 浏览 FreeBSD 新的季度和两年一次发布计划
    • FreeBSD 日专访 BSD 守护神 Beastie
  • 2024 年 11 月
    • 苹果的开源基石:macOS 和 iOS 背后的 BSD 传统
    • 在动荡的开源世界中保持稳定:FreeBSD 的持久稳定性
    • 为什么你应该使用 FreeBSD
    • FreeBSD 13.4: 新特性及其发展历程
    • Quantum Leap Research 和 FreeBSD 基金会将投资 75 万美元以改善笔记本电脑支持和用户体验
    • 主权科技基金将投资 68.64 万欧元用于 FreeBSD 基础设施现代化
  • 2024 年 7 月
    • BSD 老将:Michael J. Karels 逝世,享年 68 岁
    • 讣告——Michael "Mike" John Karels
    • 配置自己的 VPN——基于 OpenBSD、Wireguard、IPv6 和广告拦截
    • 如何在 FreeBSD 中指定 CPU 类型
    • 使用 BIOS 引导和 UEFI 引导的 GPT 分区的区别和制作方法
    • 通过替换 ZFS 镜像池中的磁盘来扩容
    • 通过将 ZFS 池构建为镜像结构,消除异常数据的影响
    • ZFS 池破坏实验
    • FreeBSD ports 开发技术研究
    • FreeBSD pkg 命令概述
    • portsnap 被淘汰了,本应由 git 代替,但结果我发现自己用的是 got
    • ccache 在构建 FreeBSD 的 buildworld 时的效率
    • 关于对 FreeBSD 发布计划和生命周期的修订
  • 2023 年 12 月
    • FreeBSD 新手?来参与社区吧
    • 介绍来 FreeBSD 的学生
    • EuroBSDCon 2023 旅行报告——Bojan Novković
    • 什么是开发播客?FreeBSD 项目的演变
    • EuroBSDCon 2023 旅行报告——Mark Johnston
    • TalkDev:探索开源的未来
    • 为什么选择 FreeBSD?Metify 展示迁移到 FreeBSD 如何对两个新产品进行增强
    • FreeBSD 基金会宣布通过 SSDF 认证
    • 2023 年全球开放大会报告
    • FreeBSD v14:恪守类 Unix 操作系统传统,提升安全性与性能
  • 2023 年 9 月
    • 认识 2023 年参与 FreeBSD 谷歌编程之夏项目的学生:Soobin Rho
    • 认识 2023 年参与 FreeBSD 谷歌编程之夏项目的学生:Aymeric Wibo
    • FreeBSD 企业工作组首次会议总结
    • 认识 2023 年 FreeBSD 谷歌编程之夏的学生:Sudhanshu Mohan Kashyap
    • 认识 2023 年夏季滑铁卢大学合作学生:Naman Sood
    • FreeBSD 基金会 2023 年暑期实习生:Jake Freeland
    • 第二次企业工作组会议回顾
    • OpenBSD 与 FreeBSD:有何不同,哪个更好?
  • 2023 年 9 月以前
    • 在 FreeBSD 的 jail 中安装 NextCloud
    • 参与宣传:2023 年 5 月的 FreeBSD 开发者峰会和 BSDCan
    • 恭喜 FreeBSD 迎来 30 周年!为什么开源项目 FreeBSD 能够持续存在
    • 庆祝 FreeBSD 成立 30 周年:许可证
    • 聚集在开放领域工作的公益和慈善基金会
    • 在 Linode 上安装 pfSense
    • 在 FreeBSD 的 jail 中安装 NextCloud
    • 将 FreeBSD 上的 Ansible 主机和客户机都安装在 Jail 中
    • FreeBSD 简介 | BSD.pw 研讨会
    • 如何在 FreeBSD 上安装 Python
    • 升级到 FreeBSD 13.2 的十大理由
    • 采访 FreeBSD 基金会执行董事 Deb Goodkin
    • 我们使用开源的 FreeBSD 作为企业操作系统的 5 个原因
    • 关于 BSD 与 Linux 的典型讨论
    • OpenBSD 太棒了
    • systemd 背后的真正动机
    • systemd 在任何地方都不安全
    • 为什么你应该将所有东西从 Linux 迁移到 BSD
    • 如何在 FreeBSD 上设置一个简单且实际工作的 WireGuard 服务器
    • 选择 FreeBSD 而非 GNU/Linux 的技术性原因
    • GPL 之殇
    • FreeBSD 与研究社区
    • 在 OpenBSD 和 FreeBSD 之间选择的区别
    • FreeBSD 是一个令人惊叹的操作系统
    • 留意日期:2023 年 11 月的自由软件组织厂商峰会
    • JENNY 日常使用的系统:FreeBSD 13.2
    • FreeBSD Ports 中的 OPTIONS 功能介绍——使用 OPTIONS_SET/OPTIONS_UNSET/NO_DIALOG 进行操作和实践
    • FreeBSD Bhyve 上的 PCI 直通
    • 2023 年 FreebBSD 谷歌编程之夏学生介绍:Raghav Sharma
    • 2023 年 7 月软件开发项目进展报道
    • 用于研究的 FreeBSD:CHERI/Morello
    • 在 FreeBSD Jail 中使用 OpenRC 启动并运行 Devuan GNU+Linux 系统
由 GitBook 提供支持

FreeBSD 中文社区

在本页
  • 日志轮转
  • ZFS 数据压缩
  • 配置 newsyslog
  • 修改 syslog 的轮转命名方案
  • 应用更改

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 2025 年

FreeBSD 上的 ZFS 日志压缩

上一页BSD 许可证一览下一页为 FreeBSD 发声:FOSDEM 2025 参会报告

最后更新于11天前

这有帮助吗?

  • 原文:

  • 2025-4-16

系统日志是关于系统运行时发生事件的重要信息来源。FreeBSD 默认的日志系统是 syslog,它会根据主题将日志写入 /var/log/ 下的不同文件。最常见的事件和那些不属于任何其他类别的事件,会被写入 /var/log/messages。

日志轮转

随着时间推移,日志会不断增长,并由守护进程 newsyslog 进行轮转。在轮转时,newsyslog 会创建新的日志文件,同时重命名旧的日志文件,同时对其进行压缩以节省空间。默认的命名规则是根据文件的时间添加(或增加)一个数字。例如,当前的日志文件会被加上扩展名 .1,而旧的 .1 文件会被重命名为 .2。超出 .7 的日志文件会作为最老的日志被删除。两个配置文件控制了日志的大小、日志总数以及其他轮转规则和日志行为:/etc/newsyslog.conf 和 syslog.conf。

ZFS 数据压缩

OpenZFS 提供了一些强大而高效的压缩算法,能实时压缩数据集中的数据。每当系统写入日志文件时,ZFS 会在主内存中对其进行压缩,然后再写入底层存储。当再次读取文件时,ZFS 会自动解压所请求的数据,并以未压缩形式呈现给应用程序。这种方式在压缩率和便捷性上都具有巨大优势,因为文件系统会自动完成所有压缩步骤。而传统的 syslog 压缩方式仍是通过对文件进行压缩和解压来实现。当访问旧日志文件时,用户需要先使用类似 bzcat 的程序进行解压。而 ZFS 往往能提供更高的压缩率,因此也非常适合接管 syslog 的压缩任务。

配置 newsyslog

在基于 ZFS 的根系统中,/var/log 位于一个单独的数据集上。使用以下命令查看当前使用的压缩算法:

zfs get compression zroot/var/log

我们在此使用 FreeBSD 安装器默认的存储池名称(zroot)。如果运行 zpool list -Ho name 返回了不同的名称,请根据实际情况修改命令。如果输出为 off,请将其设置为 手册页中列出的某种压缩算法。较好的开始是 lz4 或 zstd:

zfs set compression=zstd zroot/var/log

请注意,ZFS 只会压缩新的数据,不会影响数据集中已存在的旧文件。接下来我们将对 newsyslog 配置做些修改,以禁用其自身的压缩。FreeBSD 在 中对 /etc/newsyslog.conf 文件各字段做了详细说明。配置文件最后一列(标志位)包含了在轮转日志时要应用的压缩算法。既然我们要让 ZFS 负责压缩,请删除每个相关日志条目的此列中的标志 J。修改完成后保存并退出 newsyslog.conf。

修改 syslog 的轮转命名方案

这一步不是必须的,但可以更方便地识别某个被轮转日志的时间点。前面提到,旧日志文件会被加上从 .1 到 .7 的扩展名。在查找某个特定日期的旧日志时,可能需要逐个打开这些文件,十分麻烦。如果直接将轮转日期加入文件名会不会更方便?例如,messages.20240914T210000 表示该 messages 文件最后一次轮转发生在 2024 年 9 月 14 日 21:00:00。当然能配置成这种格式,可参考 newsyslog 的 -t 参数说明。

我们可以通过编辑 /etc/crontab,将这种命名方式应用于每个日志文件。找到如下带注释的行:

# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog

修改为如下内容:

# Rotate log files every hour, if necessary.
0       *       *       *       *       root    newsyslog -t DEFAULT

保存并退出。

应用更改

为了让这些更改生效,重启守护进程 newsyslog 和 syslog:

service newsyslog restart
service syslogd restart

ZFS 现在将处理 /var/log 中的未压缩日志文件。日志轮转依然进行,但旧日志不再由 newsyslog 进行压缩。要检查 ZFS 压缩带来的空间节省效果,可运行以下命令:

zfs get refcompressratio zroot/var/log

下面是某个几周前进行了此更改的系统输出结果:

NAME           PROPERTY          VALUE     SOURCE
zroot/var/log  refcompressratio  40.60x    -

这意味着日志文件大小仅为原始未压缩大小的 1/40。ZFS 还提供了关于未压缩前大小的属性信息:

zfs get used,logicalreferenced zroot/var/log
NAME           PROPERTY           VALUE   SOURCE
zroot/var/log  used               2.28M   -
zroot/var/log  logicalreferenced  91.0M   -

对于如此小的改动,获得如此多的空间节省是十分可观的。新的日志文件在今后轮转时也将采用新的命名方案。若想进一步了解 FreeBSD 中的日志系统,可阅读 手册章节。

虽然这些更改很少而且简单,我们还为你编写了一个 Ansible playbook 来实现自动化 😊 。

ZFS Log Compression on FreeBSD
zfsprops
newsyslog.conf(5)
《系统日志配置》
点击这里查看