apiv1


一、安装与基础配置

1. 安装 ZFS

2. 创建存储池


二、管理数据集

1. 创建数据集(类似子目录)

sudo zfs create -o mountpoint=/mnt/data mypool/data

2. 设置挂载点

sudo zfs set mountpoint=/mnt/mydata mypool/data

3. 查看属性

zfs get all mypool/data

三、快照与恢复

1. 创建快照

sudo zfs snapshot mypool/data@20231001

2. 列出快照

zfs list -t snapshot

3. 恢复快照

sudo zfs rollback mypool/data@20231001

4. 删除快照

sudo zfs destroy mypool/data@20231001

四、数据保护与传输

1. 克隆数据集

sudo zfs clone mypool/data@20231001 mypool/cloned_data

2. 发送/接收数据(跨池备份)

# 发送快照到文件
sudo zfs send mypool/data@20231001 > backup.zfs

# 接收快照恢复
sudo zfs receive -F newpool/data < backup.zfs

五、优化与维护

1. 启用压缩(节省空间)

sudo zfs set compression=lz4 mypool/data

2. 禁用去重(避免内存耗尽)

sudo zfs set dedup=off mypool

3. 限制内存占用(小内存设备)

echo "options zfs zfs_arc_max=536870912" | sudo tee /etc/modprobe.d/zfs.conf  # 限制为 512MB
sudo reboot

4. 定期清理检查

# 数据完整性检查
sudo zpool scrub mypool

# 查看池健康状态
zpool status -v

六、故障处理

1. 强制导入池

sudo zpool import -f mypool

2. 修复损坏设备

sudo zpool replace mypool /dev/sda /dev/sdb

3. 查看错误日志

dmesg | grep zfs

七、常用命令速查

| 功能 | 命令 | |——————|———————————–| | 列出所有存储池 | zpool list | | 查看数据集空间 | zfs list -o name,used,avail | | 重命名数据集 | zfs rename oldname newname | | 导出存储池 | zpool export mypool | | 升级存储池特性 | zpool upgrade mypool |


以下是如何在 ZFS 中创建和管理加密数据集的补充内容:


八、加密数据集管理

ZFS 支持原生加密(从 ZFS 0.8+ 开始),加密单位为数据集(Dataset)。以下是常用操作:

1. 创建加密数据集

# 创建时直接启用加密(需设置密码)
sudo zfs create -o encryption=aes-256-gcm -o keyformat=passphrase mypool/secret_data

# 输入加密密码(至少 8 字符)

2. 使用密钥文件(免交互密码)

# 生成随机密钥文件(推荐)
sudo dd if=/dev/urandom of=/etc/zfs/secret.key bs=32 count=1
sudo chmod 600 /etc/zfs/secret.key

# 创建加密数据集并绑定密钥文件
sudo zfs create -o encryption=aes-256-gcm -o keyformat=raw -o keylocation=file:///etc/zfs/secret.key mypool/encrypted_data

3. 挂载/卸载加密数据集

# 手动加载密钥并挂载(需密码或密钥)
sudo zfs load-key mypool/secret_data
sudo zfs mount mypool/secret_data

# 卸载并卸载密钥
sudo zfs unmount mypool/secret_data
sudo zfs unload-key mypool/secret_data

4. 自动挂载加密数据集

# 启用自动挂载(需提前加载密钥)
sudo zfs set keystatus=on mypool/secret_data
sudo zfs set mountpoint=/mnt/secret mypool/secret_data

# 开机时自动加载密钥(通过 systemd)
sudo systemctl enable zfs-load-key@mypool-secret_data.service

5. 管理密钥和密码

# 修改加密密码
sudo zfs change-key -l mypool/secret_data

# 添加备用密钥文件
sudo zfs create -o encryption=on -o keylocation=file:///path/new_key mypool/data

# 查看加密状态
zfs get encryption,keylocation,keystatus mypool/secret_data

# 加载密钥解密
zfs load-key -L file:///path/to/keyfile -r mypool/secret_data

注意事项

  1. 密钥备份
    加密数据集完全依赖密钥,务必备份密钥文件到安全位置(如离线 U 盘)。丢失密钥将导致数据永久无法访问!

  2. 性能影响
    AES-256-GCM 加密对 CPU 有轻微负担(ARM 设备可能更明显),但对内存影响较小。

  3. 跨系统挂载
    迁移加密数据集时,需同时传输密钥文件,并在目标系统执行 zfs load-key


加密常用命令速查

| 功能 | 命令 | |————————-|———————————————–| | 强制卸载所有加密数据集 | sudo zfs unmount -a && sudo zfs unload-key -a | | 临时挂载为明文 | sudo zfs mount -o readonly=on -o keylocation=prompt mypool/data | | 加密现有数据集 | 不支持,需创建新数据集并迁移数据。 |


通过加密功能,可以在共享存储或敏感数据场景中保护隐私。建议优先使用密钥文件+自动加载方案,避免频繁输入密码。


zfs-mount.sh

#!/bin/sh
zpool import -f -a
zfs load-key -a
zfs mount -a

系统启动时调用,比如使用rc.local


通过服务导入密钥

cat << 'EOF' > /etc/systemd/system/zfs-load-key.service
[Unit]
Description=Load ZFS keys
DefaultDependencies=no
Before=zfs-mount.service
After=zfs-import.target
Requires=zfs-import.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/zfs mount -a
ExecStart=/sbin/zfs load-key -a

[Install]
WantedBy=zfs-mount.service
EOF

systemctl enable zfs-load-key