如何在 Linux 上的 ZFS 中使用快照、克隆和复制如何在 Linux 上的 ZFS 中使用快照、克隆和复制如何在 Linux 上的 ZFS 中使用快照、克隆和复制如何在 Linux 上的 ZFS 中使用快照、克隆和复制
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上的 ZFS 中使用快照、克隆和复制

在此页

  1. ZFS 快照 - 概述
  2. 创建和销毁 ZFS 快照
  3. 回滚快照
  4. ZFS 克隆概述
  5. 创建和销毁 ZFS 克隆
  6. ZFS 复制概述
  7. 配置 ZFS 复制
  8. 结论

在上一个教程中,我们学习了如何创建 zpool 和 ZFS 文件系统或数据集。在本教程中,我将逐步向您展示如何使用 ZFS 快照、克隆和复制。快照,克隆。和复制是 ZFS 文件系统最强大的特性。

ZFS 快照 - 概述

快照是 ZFS 最强大的功能之一,快照提供文件系统或卷的只读时间点副本,不会占用 ZFS 池中的额外空间。当块引用更改时,快照仅使用空间。快照通过仅记录当前数据集与先前版本之间的差异来节省磁盘空间。

快照的典型用途是在执行软件安装或系统升级等危险操作时,快速备份文件系统的当前状态。

创建和销毁 ZFS 快照

卷的快照不能直接访问,但可以克隆、备份和回滚。创建和销毁 ZFS 快照非常容易,我们可以使用 zfs snapshot 和 zfs destroy 命令。

创建一个名为数据池的池。

# zpool create datapool mirror /dev/sdb /dev/sdc 
# zpool list
NAME       SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
datapool  1.98G    65K  1.98G         -     0%     0%  1.00x  ONLINE  -

现在,我们有了一个名为数据池的池,接下来我们必须创建一个 ZFS 文件系统来模拟快照功能。

# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool       93.5K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs

要创建文件系统的快照,我们可以通过指定池和快照名称来使用 zfs snapshot 命令。如果我们想递归地创建快照,我们可以使用 -r 选项。快照名称必须满足以下命名要求:



# zfs snapshot datapool/      0      -  19.5K  -

创建数据池/文档的快照。

要销毁快照,我们可以像往常一样使用 zfs destroy 命令。

# zfs destroy datapool/
# zfs list -t snapshot
no datasets available

回滚快照

为了模拟,我们需要在 /docs 目录中创建一个测试文件。

# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1
# zfs snapshot datapool/     9K      -  19.5K  -

现在我们更改/docs/data.txt的内容

# echo "version 2" > /docs/data.txt
# cat /docs/data.txt
version 2

我们可以完全回滚到一个较旧的快照,这将为我们提供拍摄快照时的时间点副本。

# zfs list -t snapshot
NAME                     USED  AVAIL  REFER  MOUNTPOINT
datapool/
# cat /docs/data.txt
version 1

我们可以看到,data.txt 的内容又回到了之前的内容。

如果我们想重命名快照,我们可以使用 zfs rename 命令。

# zfs rename datapool/  9.50K      -  19.5K  -

注意:如果该数据集的快照存在,则无法销毁该数据集,但我们可以使用 -r 选项来覆盖它。

# zfs destroy datapool/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
datapool/
# zfs destroy -r datapool/docs
# zfs list -t snapshot
no datasets available

ZFS 克隆概述

克隆是一个可写卷或文件系统,其初始内容与创建它的数据集相同。

创建和销毁 ZFS 克隆

只能从快照创建克隆,并且只有删除基于该快照的克隆才能删除快照。要创建克隆,请使用 zfs clone 命令。

# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool       93.5K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs
# mkdir /docs/folder{1..5}
# ls /docs/
folder1  folder2  folder3  folder4  folder5
# zfs snapshot datapool/      0      -    19K  -

现在我们从快照数据池/[email 创建一个克隆

# zfs clone datapool/ datapool/pict
# zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool        166K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs
datapool/pict     1K  1.92G    19K  /datapool/pict

克隆过程完成,快照 datapool/[email 已被克隆到 /datapool/pict。当我们查看/datapool/pict 目录的内容时,内容应该与/datapool/docs 相同。

# ls /datapool/pict
folder1  folder2  folder3  folder4  folder5

我们克隆快照后,除非删除数据集,否则无法删除快照。

# zfs destroy datapool/': snapshot has dependent clones
use '-R' to destroy the following datasets:
datapool/pict
# zfs destroy datapool/pict

最后我们可以销毁快照。

# zfs destroy datapool/
# zfs list -t snapshot
no datasets available

ZFS 复制概述

这个ZFS复制的基础是快照,我们可以随时创建快照,而且我们可以创建任意数量的快照。通过不断创建、传输和恢复快照,您可以在一台或多台机器之间提供同步。 ZFS 提供了一个内置的序列化功能,可以将数据的流表示形式发送到标准输出。

配置 ZFS 复制

在本节中,我想向您展示如何将数据集从数据池复制到备份池,但不仅可以将数据存储在连接到本地系统的另一个池中,还可以通过网络将其发送到另一个系统。用于复制数据的命令是 zfs send 和 zfs receive。

创建另一个名为 backuppool 的池。

# zpool create backuppool mirror sde sdf
# zpool list
NAME         SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
backuppool  1.98G    50K  1.98G         -     0%     0%  1.00x  ONLINE  -
datapool    1.98G   568K  1.98G         -     0%     0%  1.00x  ONLINE  -

检查池状态:

# zpool status
  pool: datapool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0

errors: No known data errors

池:备份池
状态:在线
扫描:未请求
配置:
名称 状态 读写校验和
备份池 在线 0 0 0
镜像-0 在线 0 0 0
sde 在线 0 0 0
sdf 在线 0 0 0

错误:没有已知的数据错误

创建一个可以很好复制的数据集。

# zfs snapshot datapool/      0      -    19K  -
# ls /docs/
folder1  folder2  folder3  folder4  folder5

是时候进行复制了。

# zfs send datapool/ | zfs receive backuppool/backup
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
backuppool           83K  1.92G    19K  /backuppool
backuppool/backup    19K  1.92G    19K  /backuppool/backup
datapool            527K  1.92G    19K  /datapool
datapool/docs        19K  1.92G    19K  /docs
# ls /backuppool/backup
folder1  folder2  folder3  folder4  folder5

数据集 datapool/[email 已成功复制到 backuppool/backup。

要将数据集复制到另一台机器,我们可以使用以下命令:

# zfs send datapool/ | ssh otherserver zfs recv backuppool/backup

完毕。

结论

快照、克隆和复制是 ZFS 最强大的特性。快照用于创建文件系统或卷的时间点副本,克隆用于创建重复数据集,复制用于将数据集从一个数据池复制到同一台机器上的另一个数据池,或在不同机器之间复制数据池机器。

©2015-2025 艾丽卡 support@alaica.com