如何在Linux上的ZFS中设置快照和克隆
Ubuntu 16.04中值得注意的新功能是添加了ZFS文件系统。
长期以来,此文件系统被称为Solaris的杀手级功能。
它已被移植到Linux,但是由于Sun明智地选择了不兼容的许可证,因此它不会被集成到主线内核中。
他们这样做是为了声称可以拥有Linux没有的某些功能。
明智的选择对他们没有任何好处,我们在这里不会谈论Sun的命运,也不会在GPL许可的内核中使用CDDL许可的内核模块的合法性。
事实是,无论法律警告如何,Canonical都将ZFS放入Ubuntu。
安装ZFS文件系统并制作磁盘阵列
我们要做的第一件事是使用命令安装ZFS文件系统
sudo apt install zfs
接下来,我们需要查看必须使用哪些磁盘,因此让我们使用lsblk命令
我向VM添加了4个磁盘,每个磁盘8GB,因此我们将使用它们来测试ZFS。
首先,我们将使阵列跨越所有4个磁盘。
它将进行条带化,以实现最佳速度和尺寸。
这些是虚拟磁盘,并非像它们中的任何一个一样会发生故障,因此条带RAID 0似乎可以进行测试。
对于生产,我们需要RAID 5.
sudo zpool create -f theitroad /dev/sdb /dev/sdc /dev/sdd /dev/sde
此命令将在所有提到的驱动器上跨越raid 0阵列。
它们在我的VM上都是空的,但是如果我们使用的是真正的驱动器,请确保在任何驱动器上都没有唯一重要数据的唯一副本,因为它将丢失。
如果我们想知道为什么我们必须使用选项-f,那是因为默认情况下ZFS假定EFI和GPT,而我创建的VirtualBox VM具有BIOS和MBR。
然后让我们看看我们创建了什么。
sudo zpool status theitroad
现在,我们需要在我们创建的theitroad zpool上创建ZFS文件系统。
sudo zfs create theitroad/test
此命令在轮询和挂载中创建ZFS文件系统测试。
让我们看一下该文件系统:
sudo zfs list -r theitroad
如何拍摄ZFS快照
由于其中有空的zpool和空的文件系统,因此让我们对其进行快照。
快照的格式为zpoolname/fsname @ snapshotname,因此我们将使用以下命令:
sudo zfs snapshot theitroad/test@snap1 sudo zfs list -t snapshot
现在让我们创建一些数据,以便我们可以返回快照并查看情况如何变化。
sudo nano /theitroad/test/ourdata.txt
在nano类型123或者所需的任何随机数据中,然后将其保存。
使用cat命令检查是否有数据,然后使用以下命令再制作一个快照
sudo zfs snapshot theitroad/test@snap2
然后让我们重新打开数据文件并添加更多数字。
sudo nano /theitroad/test/ourdata.txt
例如,将其设置为12345.
现在,我们回滚到快照。
以下是命令以及输出:
miki@miki-VirtualBox:~$cat /theitroad/test/ourdata.txt 12345 miki@miki-VirtualBox:~$sudo zfs rollback theitroad/test@snap2 miki@miki-VirtualBox:~$cat /theitroad/test/ourdata.txt 123 miki@miki-VirtualBox:~$sudo zfs rollback theitroad/test@snap1 cannot rollback to 'theitroad/test@snap1': more recent snapshots or bookmarks exist use '-r' to force deletion of the following snapshots and bookmarks: theitroad/test@snap2 miki@miki-VirtualBox:~$sudo zfs rollback -r theitroad/test@snap1 miki@miki-VirtualBox:~$cat /theitroad/test/ourdata.txt cat: /theitroad/test/ourdata.txt: No such file or directory miki@miki-VirtualBox:~$
我们看到回滚sudo zfs rollback theitroad/test @ snapname是执行回滚的命令,剩下的就是说明数据的变化。
当我们回到起点时,根本没有文件,这是正确的,因为我们在制作文件之前先制作了快照。
但是要返回第一个快照,我们必须使用标志-r删除snap2,因为ZFS仅允许返回最新的快照。
因此,它通过删除snap2使snap1最新。
我们可以使用以下命令删除其余快照:
sudo zfs destroy theitroad/test@snap1
如何执行ZFS克隆
zfs中的克隆是从快照创建的,如果文件系统的快照位于不同的装入点和其名称下,则它会使文件系统的快照成为克隆。
出于所有目的和目的,它将以不同的文件系统开始,尽管其文件系统的内容与上一个文件系统的内容相同。
由于具有重复数据删除功能,新文件系统似乎没有占用任何空间,但是随着文件系统开始分散,该空间将开始被使用。
因此,让我们首先在文件系统中创建一些文件和目录
sudo touch /theitroad/test/file{1..9} && sudo mkdir /theitroad/test/dir{1..9} miki@miki-VirtualBox:~$ls /theitroad/test/ dir1 dir3 dir5 dir7 dir9 file2 file4 file6 file8 dir2 dir4 dir6 dir8 file1 file3 file5 file7 file9
接下来,我们将制作快照并将快照中的文件系统克隆到名为clonedfs的新文件系统中。
sudo zfs snapshot theitroad/test@snap3 sudo zfs clone theitroad/test@snap3 theitroad/clonedfs sudo zfs list
接下来让我们检查clonedfs的内容:
miki@miki-VirtualBox:~$ls /theitroad/clonedfs/ dir1 dir3 dir5 dir7 dir9 file2 file4 file6 file8 dir2 dir4 dir6 dir8 file1 file3 file5 file7 file9
这是相同的。
至此我们完成了,让我们删除。
不能先删除快照再删除快照
miki@miki-VirtualBox:~$sudo zfs destroy theitroad/test@snap3 cannot destroy 'theitroad/test@snap3': snapshot has dependent clones use '-R' to destroy the following datasets: theitroad/clonedfs
因此,我们可以在删除快照时使用-R选项来执行此操作,也可以先删除克隆,然后再执行重做命令。
我们将做第一个选择。
sudo zfs destroy -R theitroad/test@snap3
然后我们破坏测试文件系统
sudo zfs destroy -R theitroad/test
然后让我们删除zpool
sudo zpool destroy theitroad
在RAIDZ上打个招呼
在本教程中,我们使用了经典的RAID O,但在生产中,我们可能需要尝试RAIDZ。
这是创建具有不同raidz级别的zpool的方法。
sudo zpool create theitroad raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde
要更改raidz级别,只需键入raidz2或者raidz3而不是raidz。