关于freebsd:FreeBSD启用ZFS快照功能

48次阅读

共计 3970 个字符,预计需要花费 10 分钟才能阅读完成。

FreeBSD 的 ZFS 果然不让人悲观,在保障数据安全的前提下,效率也十分的高。4 块硬盘组成的 raidz 较 NVME 固态硬盘的速率略低,但不显著。

而快照则是 ZFS 更外围的性能,ZFS 能够达到秒级创立快照,这个速度重大的超出了本人的认知。

创立数据集(档案零碎)

zfs 并不是能够间接对所有的文件夹设置快照的,要想对某个文件夹设置快照,则须要先建设档案零碎(数据集),比方我以后存在存储池 yzpool,则能够应用以下命令建设存储池:

# zfs create yzpool/data
# zfs create yzpool/data/hosts
# zfs create yzpool/data/hosts/20pro

留神:在建设数据集时,须要由父到子顺次建设。

此时咱们便建设了 3 个数据集,别离是 data, data/hosts 以及 data/hosts/20pro。而后咱们便能够对这个 20pro 文件夹设置快照了。

创立快照

此时进入 data/hosts/20pro 文件夹,并创立一个测试文件:echo "sfsdf" >> hello.text,而后执行

# zfs snapshot yzpool/data/hosts/20pro@22-11-19

便胜利的创立了第一个快照,快照创立的地位位于 yzpool/data/hosts/20pro 文件夹下的 .zfs/snapshot 子文件夹,能够应用 ls 命令来间接查看。

# ls -a -l .zfs/snapshot/ 
total 1
dr-xr-xr-x+ 3 root  wheel  3 Nov 20 01:50 .
dr-xr-xr-x+ 3 root  wheel  3 Nov 20 01:48 ..
drwxr-xr-x  2 root  wheel  3 Nov 20 01:49 22-11-19

顺便看一下快照大小:

# du .zfs/snapshot/
7    .zfs/snapshot/22-11-19
7    .zfs/snapshot/

创立复原快照

接着咱们新增一个文件,并且批改原文件:

root@nfs:/yzpool/data/hosts/20pro # echo "123" >> hello.text 
root@nfs:/yzpool/data/hosts/20pro # cat hello.text 
sfsdf
123
root@nfs:/yzpool/data/hosts/20pro # echo "456" >> text.text
root@nfs:/yzpool/data/hosts/20pro # cat text.text 
456

而后咱们再建设个快照:

root@nfs:/yzpool/data/hosts/20pro # zfs snapshot yzpool/data/hosts/20pro@22-11-19-18-13
root@nfs:/yzpool/data/hosts/20pro # ls -a -l .zfs/snapshot/
total 1
dr-xr-xr-x+ 4 root  wheel  4 Nov 20 01:59 .
dr-xr-xr-x+ 3 root  wheel  3 Nov 20 01:48 ..
drwxr-xr-x  2 root  wheel  3 Nov 20 01:49 22-11-19
drwxr-xr-x  2 root  wheel  4 Nov 20 01:55 22-11-19-18-13
root@nfs:/yzpool/data/hosts/20pro # du .zfs/snapshot/
14    .zfs/snapshot/22-11-19-18-13
7    .zfs/snapshot/22-11-19
21    .zfs/snapshot/

以后的状况下,咱们领有了两个快照,第一个快照中咱们新建了一个文件,第二个快照中有两个文件。

当初咱们再建设第 3 个文件:

root@nfs:/yzpool/data/hosts/20pro # echo "333" >> 3.txt
root@nfs:/yzpool/data/hosts/20pro # ls
3.txt        hello.text    text.text

最初咱们尝试进行快照复原,须要 留神 的是:快照间是有依存关系的,比方咱们当初想复原快照22-11-19,则会失去不可能间接复原的正告:

root@nfs:/yzpool/data/hosts/20pro # zfs rollback yzpool/data/hosts/20pro@22-11-19
cannot rollback to 'yzpool/data/hosts/20pro@22-11-19': more recent snapshots or bookmarks exist
use '-r' to force deletion of the following snapshots and bookmarks:
yzpool/data/hosts/20pro@22-11-19-18-13

这里因为咱们创立快照将基于最近的快照,具体的起因不太好解释,总之就是记住如果有重要数据的话,复原快照前对快照对行备份就对了。

在这里咱们应用 -r 参考来复原到非最新的快照,则会发现快照 22-11-19-18-13 间接被删除了。

root@nfs:/yzpool/data/hosts/20pro # zfs rollback -r yzpool/data/hosts/20pro@22-11-19
root@nfs:/yzpool/data/hosts/20pro # ls
hello.text
root@nfs:/yzpool/data/hosts/20pro # ls .zfs/snapshot/
22-11-19

主动快照

定义一个保留 1 周的主动快照是个备份的好方法,主动备份的形式有很多,在这咱们应用zfsnap2

# pkg install zfsnap2

装置实现后测试一下,比方对根数据集 data 创立快照:

# [root@nfs /yzpool/data/hosts/20pro]# zfsnap snapshot -v -a 1w yzpool/data
/sbin/zfs snapshot  yzpool/data@2022-11-20_03.01.57--1w ... DONE
[root@nfs /yzpool/data/hosts/20pro]# zfs list -t snapshot
NAME                                  USED  AVAIL     REFER  MOUNTPOINT
yzpool/data@2022-11-20_03.01.57--1w     0B      -      140K  -
yzpool/data/hosts/20pro@22-11-19       93K      -      145K  -
[root@nfs /yzpool/data/hosts/20pro]# zfsnap snapshot -v -a 1w -r yzpo

如果咱们想为数据集建设递归快照,则还能够退出 -r 参数:

[root@nfs /yzpool/data/hosts/20pro]# zfs list -t snapshot
NAME                                              USED  AVAIL     REFER  MOUNTPOINT
yzpool/data@2022-11-20_03.01.57--1w                 0B      -      140K  -
yzpool/data@2022-11-20_03.03.04--1w                 0B      -      140K  -
yzpool/data/hosts@2022-11-20_03.03.04--1w           0B      -      140K  -
yzpool/data/hosts/20pro@22-11-19                   93K     
yzpool/data/hosts/20pro@2022-11-20_03.03.04--1w     0B      -      157K  -
yzpool/data/hosts/test@2022-11-20_03.03.04--1w      0B      -      140K  -

此时将主动为 data, data/hosts, data/hosts/20pro, data/hosts/test 别离创立快照。该快照的有效期为 1 周,在 1 周后如果执行了销毁操作,则该快照将被主动销毁。

因为以后工夫还不够 1 周,所以测试 zfsnap 的销毁快照操作后,什么也不会产生:

# zfsnap destroy -rv yzpool/data

更多的用法请参考 zfsnap 官网文档。

相熟了用户当前,最初咱们为每天的快照备份、销毁来制订个打算工作。

# crontab -e

写入以下内容:

10   2  *   *   *  root   zfsnap snapshot -v -a 1w -r yzpool/data >> /yzpool/log/zfsnap.log
43   3  *   *   *   root   zfsnap destroy -rv yzpool/data >> /yzpool/log/zfsnap.log

则每天的 2 点 10 分将进行快照生成(这个很快),每天的 3 点 43 将删除过期的快照(因为须要进行快照数据的合并,这个反而要花一些工夫)。

删除数据集

数据集的删除并不像一般文件夹那样能够应用 rm 命令,而是应用 zfs destroy 命令,如果该数据集关联了相干快照,则会失去以下提醒:

# [root@nfs /yzpool/data/hosts]# zfs destroy yzpool/data/hosts/test
cannot destroy 'yzpool/data/hosts/test': filesystem has children
use '-r' to destroy the following datasets:
yzpool/data/hosts/test@2022-11-20_03.03.04--1w

此时退出 -r 参数即可实现删除操作,同时该操作也同步删除了该数据集对应的快照:

[root@nfs /yzpool/data/hosts]# zfs destroy -r yzpool/data/hosts/test

rsync

最初,咱们再联合 rsync 文件定时同步,从而达到快照及 rsync 双重备份的目标。

参考

https://docs.oracle.com/cd/E3…

https://docs.freebsd.org/zh-t…

正文完
 0