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 来浏览、使用它们。