使用 zpool 命令示例在 Linux 上设置 ZFS 文件系统
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 文件系统以及从命令行对其进行操作。
- 点赞
- 收藏
- 关注作者
评论(0)