在上一个教程中 ,我们学习了如何创建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
选项。 快照名称必须满足以下命名要求:
filesystem@snapname volume@snapname
# zfs snapshot datapool/docs@version1
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/docs@version1 0 - 19.5K -
创建数据池/文档的
快照。
要破坏快照,我们可以像往常一样使用zfs destroy
命令。
# zfs destroy datapool/docs@version1
# zfs list -t snapshot
no datasets available
回滚快照
对于模拟,我们需要在/ docs
目录中创建一个测试文件。
# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1
# zfs snapshot datapool/docs@version1
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/docs@version1 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/docs@version1 9.50K - 19.5K -
# zfs rollback datapool/docs@version1
# cat /docs/data.txt
version 1
我们可以看到, data.txt
的内容回到以前的内容。
如果要重命名快照,可以使用zfs rename
命令。
# zfs rename datapool/docs@version1 datapool/docs@version2
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/docs@version2 9.50K - 19.5K -
注意:如果存在此数据集的快照,则不能销毁数据集,但是我们可以使用-r选项来覆盖该数据集。
# zfs destroy datapool/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
datapool/docs@version2
# 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/docs@today
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/docs@today 0 - 19K -
现在我们从今天
的快照数据池/ docs @中
创建一个克隆
# zfs clone datapool/docs@today 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 / docs @今天
已被克隆到/ datapool / pict。
当我们检查/ datapool / pict
目录的内容时,内容应该与/ datapool / docs
相同。
# ls /datapool/pict
folder1 folder2 folder3 folder4 folder5
克隆快照之后,在删除数据集之前,无法删除快照。
# zfs destroy datapool/docs@today
cannot destroy 'datapool/docs@today': snapshot has dependent clones
use '-R' to destroy the following datasets:
datapool/pict
# zfs destroy datapool/pict
最后我们可以摧毁快照。
# zfs destroy datapool/docs@today
# 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
pool:backuppool
状态:在线
扫描:无请求
配置:
名称状态阅读写入CKSUM
backuppool ONLINE 0 0 0
镜像0在线0 0 0
sde在线0 0 0
sdf ONLINE 0 0 0
错误:没有已知的数据错误
创建一个我们将要复制的数据集。
# zfs snapshot datapool/docs@today
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
datapool/docs@today 0 - 19K -
# ls /docs/
folder1 folder2 folder3 folder4 folder5
现在是做复制的时候了。
# zfs send datapool/docs@today | 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 / docs @今天
已成功复制到备份/备份
。
要将数据集复制到另一台机器,我们可以使用以下命令:
# zfs send datapool/docs@today | ssh otherserver zfs recv backuppool/backup
完成
结论
快照,克隆和复制是ZFS最强大的功能。 快照用于创建文件系统或卷的时间点副本,克隆用于创建重复的数据集,复制用于将数据集从一个数据池复制到同一台计算机上的另一个数据池,或复制数据池之间的不同机器。