在Ubuntu 19.10上入门ZFS文件系统
Ubuntu 19.10 的主要新特性之一就是 ZFS。现在你可以很容易的无需额外努力就可以在 Ubuntu 系统上安装 ZFS了。
一般情况下,安装 Linux 都会选择 Ext4 文件系统。但是如果是全新安装 Ubuntu 19.10,在安装的启动阶段可以看到 ZFS 选项。
你可以在安装 Ubuntu 19.10 的时候选择 ZFS
让我们看看 ZFS 为何重要,以及如何在已经安装了 ZFS 的 Ubuntu 上使用它。
ZFS 与其他文件系统有哪些区别?
ZFS 的设计初衷是:处理海量存储和避免数据损坏。ZFS 可以处理 256 千万亿的 ZB 数据。(这就是 ZFS 的 Z)且它可以处理最大 16 EB 的文件。
如果你仅有一个单磁盘的笔记本电脑,你可以体验 ZFS 的数据保护特性。写时复制(COW)特性确保正在使用的数据不会被覆盖,相反,新的数据会被写到一个新的块中,同时文件系统的元数据会被更新到新块中。ZFS 可容易的创建文件系统的快照。这个快照可追踪文件系统的更改,并共享数据块确保节省数据空间。
ZFS 为磁盘上的每个文件分配一个校验和。它会不断的校验文件的状态和校验和。如果发现文件被损坏了,它就会尝试修复文件。
我写过一个文章详细介绍 什么是 ZFS以及它有哪些特性。如果你感兴趣可以去阅读下。
注:请谨记 ZFS 的数据保护特性会导致性能下降。
Ubuntu 下使用 ZFS [适用于中高级用户]
一旦你在你的主磁盘上全新安装了带有 ZFS 的 Ubuntu,你就可以开始体验它的特性。
请注意所有的 ZFS 设置过程都需要命令行。我不知道它有任何 GUI 工具。
创建一个 ZFS 池
这段仅针对拥有多个磁盘的系统。如果你只有一个磁盘,Ubuntu 会在安装的时候自动创建池。
在创建池之前,你需要为池找到磁盘的 id。你可以用命令 lsblk
查询出这个信息。
为三个磁盘创建一个基础池,用以下命令:
<span class="kwd">sudo</span><span class="pln"> zpool create pool</span><span class="pun">-</span><span class="kwd">test</span><span class="pln"> </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdb </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd</span>
请记得替换 pool-test
为你选择的的命名。
这个命令将会设置“无冗余 RAID-0 池”。这意味着如果一个磁盘被破坏或有故障,你将会丢失数据。如果你执行以上命令,还是建议做一个常规备份。
你可以用下面命令将另一个磁盘增加到池中:
<span class="kwd">sudo</span><span class="pln"> zpool add pool</span><span class="pun">-</span><span class="pln">name </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdx</span>
查看 ZFS 池的状态
你可以用这个命令查询新建池的状态:
<span class="kwd">sudo</span><span class="pln"> zpool status pool</span><span class="pun">-</span><span class="kwd">test</span>
Zpool 状态
镜像一个 ZFS 池
为确保数据的安全性,你可以创建镜像。镜像意味着每个磁盘包含同样的数据。使用镜像设置,你可能会丢失三个磁盘中的两个,并且仍然拥有所有信息。
要创建镜像你可以用下面命令:
<span class="kwd">sudo</span><span class="pln"> zpool create pool</span><span class="pun">-</span><span class="kwd">test</span><span class="pln"> mirror </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdb </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdc </span><span class="pun">/</span><span class="pln">dev</span><span class="pun">/</span><span class="pln">sdd</span>
创建 ZFS 用于备份恢复的快照
快照允许你创建一个后备,以防某个文件被删除或被覆盖。比如,我们创建一个快照,当在用户主目录下删除一些目录后,然后把它恢复。
首先,你需要找到你想要的快照数据集。你可以这样做:
<span class="pln">zfs </span><span class="kwd">list</span>
Zfs List
你可以看到我的家目录位于 rpool/USERDATA/johnblood_uwcjk7
。
我们用下面命令创建一个名叫 1910
的快照:
<span class="kwd">sudo</span><span class="pln"> zfs snapshot rpool</span><span class="pun">/</span><span class="pln">USERDATA</span><span class="pun">/</span><span class="pln">johnblood_uwcjk7@1019</span>
快照很快创建完成。现在你可以删除 Downloads
和 Documents
目录。
现在你用以下命令恢复快照:
<span class="kwd">sudo</span><span class="pln"> zfs rollback rpool</span><span class="pun">/</span><span class="pln">USERDATA</span><span class="pun">/</span><span class="pln">johnblood_uwcjk7@1019</span>
回滚的时间长短取决于有多少信息改变。现在你可以查看家目录,被删除的目录(和它的内容)将会被恢复过来。