Featured image of post Proxmox VE ZFS 存储:池设置、快照和优化Featured image of post Proxmox VE ZFS 存储:池设置、快照和优化

Proxmox VE ZFS 存储:池设置、快照和优化

深入研究 Proxmox VE 上的 ZFS 存储。了解池创建、vdev 类型、压缩、ARC 调整、快照、发送/接收复制和故障排除。

为什么在 Proxmox 上使用 ZFS

ZFS 为 Proxmox VE 带来了企业级功能:通过校验和实现数据完整性(检测并修复静默损坏)、透明压缩、即时快照和克隆以及灵活的类似 RAID 池。它用单个统一的堆栈取代了传统的卷管理和文件系统层。

创建池

池是由虚拟设备 (vdev) 构建的。常见的vdev类型:

Vdev 类型最小磁盘可用容量描述
镜子250%跨两个磁盘镜像数据
RAIDZ1367%单奇偶校验(最多 1 个磁盘故障)
RAIDZ2450%双奇偶校验(最多 2 次失败)
RAIDZ3540%三重奇偶校验(最多 3 次失败)
条纹1100%无冗余(不推荐)

创建镜像池:

zpool create -o ashift=12 tank mirror /dev/sda /dev/sdb

ashift=12 选项可确保 4K 扇区对齐,这对于现代 SSD 和 HDD 至关重要。短行程和分区对齐进一步提高了性能。

添加缓存和日志设备

ZFS 支持单独的设备以实现性能加速:

  • SLOG(单独的意图日志)— 吸收同步写入(NFS、数据库事务)。小型、受电源保护的 SSD(NVMe 或 Optane)可显着提高同步写入性能。不影响读取。
zpool add tank log /dev/nvme0n1p1
  • L2ARC(2 级 ARC)— 在 SSD 上缓存频繁读取的数据。添加超出 RAM 大小的读取缓存。当 ARC 驱逐较高时很有用,但会消耗 CPU 进行索引。
zpool add tank cache /dev/nvme0n1p2

压缩

ZFS 提供透明的块级压缩,在现代硬件上的 CPU 开销可以忽略不计:

算法比率CPU 成本最适合
lz4〜2x非常低通用(默认)
zstd~2–5x低-中档案、混合数据
压缩包~3–6x最大压缩
兹勒〜1x可以忽略不计已经压缩的数据

对数据集启用压缩:

zfs set compression=lz4 tank/vmdata

ARC 调优和 atime

ARC(自适应替换缓存)使用系统 RAM 进行数据缓存。默认情况下,ZFS 最多消耗总 RAM 的 50%。通过内核模块参数调整:

# /etc/modprobe.d/zfs.conf
options zfs zfs_arc_max=8589934592
options zfs zfs_arc_min=4294967296

禁用 atime 以减少 SSD 上的写入放大:

zfs set atime=off tank/vmdata

修剪 SSD

为 SSD 池启用自动 TRIM 以长期保持性能:

zpool set autotrim=on tank

手动修剪可作为一次性操作:

zpool trim tank

快照和克隆

ZFS 快照是瞬时的,并且仅消耗发生变化的块(写入时复制):

zfs snapshot tank/vmdata@pre-update
zfs list -t snapshot

回滚到快照:

zfs rollback tank/vmdata@pre-update

克隆是可写快照,可用于无需复制数据的测试:

zfs clone tank/vmdata@pre-update tank/clone-test

发送/接收复制

ZFS 发送/接收将快照流式传输到另一个池,从而实现异地备份和复制:

zfs send tank/vmdata@pre-update | ssh backup-server "zfs recv backup-pool/vmdata"

增量发送仅在快照之间传输更改的块:

zfs send -i tank/vmdata@pre-update tank/vmdata@post-update | \
  ssh backup-server "zfs recv backup-pool/vmdata"

擦洗和监控

定期清理验证校验和并修复静默损坏:

zpool scrub tank
zpool status -v

通过 Proxmox GUI 或 cron 安排清理。监控池健康状况和 SMART 数据:

smartctl -a /dev/sda

更换故障磁盘

更换冗余 vdev 中的故障磁盘:

zpool offline tank /dev/sda
zpool replace tank /dev/sda /dev/sdc
zpool online tank /dev/sdc

常见故障排除

  • 池导入失败zpool import -D 恢复设备; zpool import -a 导入全部。
  • 设备离线 — 检查电缆,然后检查 zpool online tank /dev/sda
  • 池性能下降 — 检查碎片:zpool list -v tank。如果是 SSD,请修剪。