Linux 操作系统支持和可用的文件系统类型非常多,既然这些文件系统都可以正常工作,我们为什么要去尝试一个新的文件系统呢?其实,不同 Linux 文件系统类型并不完全相同,不然也不用搞出这么多种类来了。其中有些还具有比较明显的优势,比如——ZFS 文件系统。
为什么选择ZFS文件系统
ZFS 文件系统非常之棒,它是一个真正的现代文件系统,其内置的功能对处理数据负载非常有意义。
如果你正考虑将 ZFS 用于超快速 NVMe SSD,那它可能不是最佳选择。ZFS 速度相对较慢并不太关紧要,它旨在用于存储大量数据并保持安全,所以很多 NAS 平台都将 ZFS 用作默认(主要)的文件系统。
使用 ZFS 时无需配置传统的 RAID 阵列,相反,我们可以通过创建 ZFS 池的方式随时将磁盘驱动器添加到这些池(Pool)当中。ZFS 池的使用方式和行为几乎与 RAID 无异,但其功能还是建立在文件系统之上的。
ZFS 完全可以充当 LVM 的替代品,允许我们快速创建和管理分区,无需处理较低级别的内容并担心相关风险。同时,ZFS 也是一个 CoW 文件系统,这意味着 ZFS 可以保护你的数据不会随着时间的推移逐渐损坏,ZFS 还可以创建文件的校验和并允许将这些文件回滚到以前的工作版本。
安装ZFS文件系统支持
在 Ubuntu 中安装、使用 ZFS 文件系统非常简单,但 Ubuntu LTS 和最新 Ubuntu 版本的安装方式有所不同。
Ubuntu 16.04 LTS:sudo apt install zfs
Ubuntu 17.04 及更新:sudo apt install zfsutils
在安装好实用程序后,就可以使用 ZFS 提供的工具来创建 ZFS 驱动器和分区了。
创建ZFS池
ZFS 池的概念与 RAID 非常类似,如果你了解 Windows 10 中的存储空间就不难理解它了。
RAID0
RAID0 想必大家都知道,它只是将所有磁盘驱动器集成到一个巨大的存储空间而已。它可以提高驱动器读写速度,但无数据容错能力,只要有其中一块磁盘坏掉,就会有数据丢失。
要使用 ZFS 实现 RAID0,只需创建一个简单的池:
sudo zpool create pool-name /dev/sdc /dev/sdd
RAID1(镜像)
使用 mirror 关键字就可以实现 ZFS 的 RAID1 功能,RAID1 不用多介绍了吧,就是创建硬盘的 1 对 1 副本。这样不仅可以有数据的完整备份副本,同时还可以提高读写性能。当然,物理磁盘的总存储空间量也会减半。
sudo zpool create pool-name mirror /dev/sdc /dev/sdd
RAID5(RAIDZ1)
ZFS 将 RAID5 功能实现为 RAIDZ1。RAID5 要求驱动器的倍数为 3 , 其中 1/3 的空间用于写入奇偶校验数据,并保留 2/3 的数据存储空间。如果其中一个驱动器出现故障, 阵列将保持联机状态, 但应尽快更换故障磁盘。
sudo zpool create pool-name raidz1 /dev/sdc /dev/sdd /dev/sde
RAID6(RAIDZ2)
RAID6 与 RAID5 类似,但它的工作原理是磁盘数量的 4 倍,而非 3 倍。 它使用 2 倍的奇偶校验数据,允许最多 2 个驱动器故障。
sudo zpool create pool-name raidz2 /dev/sdc /dev/sdd /dev/sde /dev/sdf
RAID10
RAID10 旨在读写速度提升和数据冗余与条带化,需要至少 4 块磁盘的倍数,而且只有一半的数据存储空间,可通过创建两个镜像的方式来创建 RAID10。
sudo zpool create pool-name mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf
使用ZFS池
一旦在 Ubuntu 中创建了 ZFS 池,我们还需要使用一些管理工具。首先,可以通过如下命令来检查和查看 ZFS 池的状态:
sudo zpool status
当检查 ZFS 状态时,池将通知你需要知道的所有更新。要更新池,请运行如下命令:
sudo zpool upgrade pool-name
也可以使用如下命令更新所有 ZFS 池:
sudo zpool upgrade -a
当然,你也可以随时向池中添加新的磁盘驱动器,只需使用 zpool 指定池名称和驱动器位置即可:
sudo zpool add pool-name /dev/sdx
最后提醒大家,ZFS 池会在 Linux 的根文件系统中创建一个目录以供用户使用。你可以使用 GUI 文件管理器或 CLI 来浏览、使用它们。