使用 zpool 命令示例在 Linux 上设置 ZFS 文件系统

举报
Tiamo_T 发表于 2022/10/06 08:20:18 2022/10/06
【摘要】 ZFS 将卷管理器和文件系统与几个高级特性结合在一起。 在本文中,我们将对 ZFS 进行高级介绍,解释如何在 linux 上安装 ZFS、创建 ZFS 池以及几个 ZFS zpool 命令。

ZFS 将卷管理器和文件系统与几个高级特性结合在一起。

在本文中,我们将对 ZFS 进行高级介绍,解释如何在 linux 上安装 ZFS、创建 ZFS 池以及几个 ZFS zpool 命令。

一、ZFS简介

以下是 ZFS 文件系统的一些特性:

  • 防止数据损坏
  • 支持高存储容量
  • 高效的数据压缩
  • 拍摄文件系统的快照
  • 写时复制克隆
  • RAID Z 支持
  • 完整性检查
  • 自动修复和支持原生 NFSV4 ACL

这最初是由 Sun Microsystems 为 Solaris 平台开发的。2010 年,Oracle 收购了 Sun 微系统,并在 ZFS 文件系统上做了很多改进。

ZFS 最近在 Linux 上变得流行起来,因为它变得更加稳定。

Linux 端口上的 ZFS 由劳伦斯利弗莫尔国家实验室 (LLNL) 生产。

Linux 上的 ZFS 是一个内核模块,您可以下载、编译和安装。您不必修补或重新编译内核。

您可以从此处下载适用于您各自操作系统发行版的源代码包。

2. 在 Linux 上安装 ZFS

在本文中,我们将在 CentOS 服务器上安装 ZFS。但是,下面提到的 zfs 命令对于 Linux 发行版上的几乎所有发行版都是相同的,除了安装部分。

执行以下 yum 命令在 Redhat/CentOS 上安装 ZFS。

# yum localinstall --nogpgcheck https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm

# yum install kernel-devel zfs

请确保满足所有依赖项。安装通常失败的依赖项之一是安装 GCC 编译器的要求。在这种情况下,请在安装 ZFS 之前安装 GCC 编译器。

确保 ZFS 模块已加载我们 lsmod 命令,如下所示:

#lsmod | grep zfs
zfs 1188621 0
zcommon 45591 1 zfs
znvpair 81046 2 zfs,zcommon
zavl 6900 1 zfs
zunicode 323051 1 zfs
spl 264548 5 zfs、zcommon、znvpair、zavl、zunicode

在相关的说明中,您可能想阅读有关如何创建Linux 可加载内核模块的基础知识。

我们在此服务器上添加了一些磁盘(/dev/sdb 到 /dev/sdf)来测试 ZFS 功能。

# ls -l /dev/sd*
brw-rw----. 1 root disk 8,  0 Jul 15 15:52 /dev/sda
brw-rw----. 1 root disk 8,  1 Jul 15 15:52 /dev/sda1
brw-rw----. 1 root disk 8,  2 Jul 15 15:52 /dev/sda2
brw-rw----. 1 root disk 8,  3 Jul 15 15:52 /dev/sda3
brw-rw----. 1 root disk 8, 16 Jul 16 10:57 /dev/sdb
brw-rw----. 1 root disk 8, 32 Jul 16 10:57 /dev/sdc
brw-rw----. 1 root disk 8, 48 Jul 16 10:58 /dev/sdd
brw-rw----. 1 root disk 8, 64 Jul 16 11:27 /dev/sde
brw-rw----. 1 root disk 8, 80 Jul 16 11:27 /dev/sdf

3. 创建一个 zpool

Zpool 命令用于配置 ZFS 中的存储池。存储池是为 zfs 数据集提供物理存储和数据复制的设备集合。

下面创建一个 zpool。

# zpool create -f mypool raidz sdb sdc sdd sde sdf

在上面的例子中:

  • create 代表创建一个新池。
  • -f 选项是忽略磁盘分区标签,因为这些是新磁盘
  • raidz 是突袭级别。RAIDZ 只不过是 RAID-5 的变体,它允许更好地分配奇偶校验并消除“RAID-5”写入漏洞(断电后数据和奇偶校验不一致)。
  • raidz 组可以具有单、双或部落奇偶校验,这意味着它可以分别承受一个、两个或三个故障而不会丢失任何数据。数据和奇偶校验在 raidz 组内的所有磁盘上进行条带化。

接下来,验证我们刚刚创建的 zpool 的状态。

# zpool status
  pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0

errors: No known data errors

创建池后,如果您执行 df –h,您将看到新创建的池自动安装在挂载点上。

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vglocal-rootlv   14G  2.4G   11G  18% /
tmpfs                       939M     0  939M   0% /dev/shm
/dev/sda1                   504M   46M  433M  10% /boot
mypool                      3.9G     0  3.9G   0% /mypool

4.创建镜像池

要创建镜像池,请使用带有以下选项的 zpool create 命令。

如果特定镜像组中的任何磁盘发生故障,则另一个磁盘仍然保存数据。一旦更换了故障磁盘,内容就会被镜像回(也称为重新同步)到新更换的磁盘。

# zpool create -f mypool mirror sdb sdc mirror sdd sde

接下来,验证我们刚刚创建的镜像 zpool 的状态:

# zpool status -v
  pool: mypool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0

errors: No known data errors

5. Zpool 导入导出

在某些情况下,您可能需要在系统之间迁移 zfs 池。

ZFS 通过从一个系统导出池并将其导入另一个系统来实现这一点。

要导出任何池,请使用 zpool export 命令,并且 zpool import 命令用于导入池,如以下示例所示:

# zpool export mypool

# zpool import mypool

6. 查看 ZFS Pool 的 I/O 统计信息

要查看 zpool I/O 统计信息,请使用 zpool iostat 命令,如下所示:

# zpool iostat -v mypool
               capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
mypool       147K  4.95G      0      0     33    252
  mirror      54K  3.97G      0      0     10     84
    sdb         -      -      0      0    536    612
    sdc         -      -      0      0    282    612
  mirror      93K  1008M      0      0     23    168
    sdd         -      -      0      0    288    696
    sde         -      -      0      0    294    696
----------  -----  -----  -----  -----  -----  -----

7. 删除 ZFS 池

要销毁池,请使用 zpool destroy 命令,如下所示:

# zpool destroy mypool

8. 更换 ZFS 池中损坏的磁盘

要在发生故障或损坏后更换磁盘,请使用以下命令:

# zpool replace mypool sde sdf

9. 用新磁盘扩展 ZFS 池

要通过添加新磁盘来扩展 zpool,请使用 zpool 命令,如下所示:

# zpool add -f mypool sde

10. 将备用磁盘添加到 ZFS 池

您还可以使用以下命令将备用磁盘添加到 zfs 池,方法是将备用设备添加到 zfs 池。

故障磁盘由备用设备自动替换,管理员可以在以后更换故障磁盘。

请注意,您还可以在多个 ZFS 池之间共享备用设备。

# zpool add -f mypool spare sde

在本文的下一部分中,我们将解释如何使用 ZFS 池来创建 ZFS 文件系统、挂载 ZFS 文件系统以及从命令行对其进行操作。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。