DIY NAS系列04 — ZFS 存储池管理

存储池简介

存储池,或简称为 "池",在 ZFS 中具有至关重要的地位。它们是一组存储设备的集合,这些设备被聚合并提供一块共享的、连续的存储空间,以供 ZFS 数据集使用。ZFS 的池模型创新性地简化了存储管理,它摆脱了传统文件系统需要预定义分区和大小的限制,为用户提供了更高的灵活性和更强的容错能力。在接下来的文章中,我们将详细介绍如何创建和管理 ZFS 存储池,让我们一起深入了解它的工作原理和如何最大限度地发挥其潜力。

重点说明
在创建存储池的时候,不建议使用 /dev/sdb 设备名称来创建存储池,因为重启服务器以后设备名称有可能发生变化,所以最好使用设备 ID 号,ZFS 是支持基于设备 ID 号创建存储池的。
[root@demo ~]# ls -l /dev/disk/by-id | grep scsi-0ATA_SanDisk_SDSSDH31_180546800457
lrwxrwxrwx 1 root root  9 Jun 26 22:23 scsi-0ATA_SanDisk_SDSSDH31_180546800457 -> ../../sdb

[root@demo ~]# zpool status
  pool: SSD
 state: ONLINE
config:

        NAME                                       STATE     READ WRITE CKSUM
        SSD                                        ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546800457  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_181290801368  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546801146  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_181325802022  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546801835  ONLINE       0     0     0

errors: No known data errors

创建存储池

注意事项
创建存储池的时候,zfs 默认可以创建 raidz 这种类型,但实际这种类型是 simple 模式,即: RAID 0 模式,没有安全可言。常用类型有: simple(RAID0)、mirror(镜像模式)、raidz1(RAID5)、raidz2(RAID6)、raidz3(ZFS独有),详细参考《DIY NAS系列02 -- 浅谈 ZFS 文件系统》。
# 在前面有提到不要使用设备名,而应该使用设备 ID 号来创建zpool。raidz 默认会创建成 simple 模式。  
zpool create SSD raidz /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546800457 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_181290801368 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546801146 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_181325802022 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546801835

# 查看对应存储池
[root@demo ~]# zpool status
  pool: SSD
 state: ONLINE
config:

        NAME                                       STATE     READ WRITE CKSUM
        SSD                                        ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546800457  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_181290801368  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546801146  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_181325802022  ONLINE       0     0     0
          scsi-0ATA_SanDisk_SDSSDH31_180546801835  ONLINE       0     0     0

errors: No known data errors

# RAID 5 模式
zpool create SSD raidz1 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546800457 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_181290801368 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546801146 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_181325802022 /dev/disk/by-id/scsi-0ATA_SanDisk_SDSSDH31_180546801835

# 验证是否为 RAID 5 模式,raidz1-0 字样表示 raidz1 模式。
[root@demo ~]# zpool status
  pool: SSD
 state: ONLINE
config:

        NAME                                         STATE     READ WRITE CKSUM
        SSD                                          ONLINE       0     0     0
          raidz1-0                                   ONLINE       0     0     0
            scsi-0ATA_SanDisk_SDSSDH31_180546800457  ONLINE       0     0     0
            scsi-0ATA_SanDisk_SDSSDH31_181290801368  ONLINE       0     0     0
            scsi-0ATA_SanDisk_SDSSDH31_180546801146  ONLINE       0     0     0
            scsi-0ATA_SanDisk_SDSSDH31_181325802022  ONLINE       0     0     0
            scsi-0ATA_SanDisk_SDSSDH31_180546801835  ONLINE       0     0     0

errors: No known data errors

# 当然我们还可以通过磁盘容量进行计算,比如: 木子这里5个1TB的磁盘,显示的空间是3.6TB,实际有一个盘做为了检验盘。  
[root@demo ~]# df -lh | grep SSD
SSD                  3.6T   87G  3.5T   3% /SSD

在创建 ZFS 存储池之后,我们注意到每个磁盘都有一个 8 M 的分区被单独划分出来。这是因为在构建 ZFS 存储池的过程中,ZFS 会在每个磁盘上预保留一块空间,这部分空间一般不直接用于存储用户数据,而是被用于储存 ZFS 元数据,包括 RAID 相关的信息。

每个 ZFS vdev(即每个单独的硬盘)都会携带这样的 ZFS 元数据,例如校验和、RAID 重建信息等。这些元数据帮助实现了 ZFS 的核心特性,包括数据完整性校验、自我修复和 RAID 冗余等。

在一个由多个磁盘构成的 ZFS 存储池中,每个磁盘都将储存该存储池的元数据,包括其他磁盘的状态信息。这意味着即使有磁盘出现故障,ZFS 仍然可以借助其他磁盘上的元数据来恢复数据,保持系统的正常运行。这一设计是 ZFS 的核心部分,它保证了 ZFS 系统的稳健性和数据的可靠性。

尽管为了实现这些功能,我们牺牲了一部分磁盘空间,但这通常是值得的,因为我们换来的是更高的数据安全性和系统可用性。

# 查看对应磁盘信息
[root@demo ~]# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 931.5G  0 disk 
├─sda1        8:1    0 931.5G  0 part 
└─sda9        8:9    0     8M  0 part 
sdb           8:16   0 223.6G  0 disk 
├─sdb1        8:17   0   600M  0 part /boot/efi
├─sdb2        8:18   0     1G  0 part /boot
└─sdb3        8:19   0   222G  0 part 
  ├─rl-root 253:0    0    70G  0 lvm  /
  ├─rl-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─rl-home 253:2    0 144.2G  0 lvm  /home
sdc           8:32   0 931.5G  0 disk 
├─sdc1        8:33   0 931.5G  0 part 
└─sdc9        8:41   0     8M  0 part 
sdd           8:48   0 931.5G  0 disk 
├─sdd1        8:49   0 931.5G  0 part 
└─sdd9        8:57   0     8M  0 part 
sde           8:64   0 931.5G  0 disk 
├─sde1        8:65   0 931.5G  0 part 
└─sde9        8:73   0     8M  0 part 
sdf           8:80   0 931.5G  0 disk 
├─sdf1        8:81   0 931.5G  0 part 
└─sdf9        8:89   0     8M  0 part 

# 在创建存储池的时候,会自动创建一个与存储池名称相同的文件系统
[root@demo ~]# df -lh
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                7.7G     0  7.7G   0% /dev/shm
tmpfs                3.1G  8.7M  3.1G   1% /run
/dev/mapper/rl-root   70G  3.7G   67G   6% /
/dev/sdb2           1014M  303M  712M  30% /boot
/dev/sdb1            599M  7.0M  592M   2% /boot/efi
/dev/mapper/rl-home  145G  1.1G  144G   1% /home
tmpfs                1.6G  4.0K  1.6G   1% /run/user/0
SSD                  3.6T  128K  3.6T   1% /SSD

# 查看文件系统信息
[root@demo ~]# zfs list SSD
NAME   USED  AVAIL     REFER  MOUNTPOINT
SSD    153K  3.52T     35.1K  /SSD

# 删除存储池
[root@demo ~]# zpool destroy SSD

# 没有可用的存储池
[root@demo ~]# zpool status
no pools available

# 检查文件系统属性
[root@demo ~]# zfs get all SSD
NAME  PROPERTY              VALUE                  SOURCE
SSD   type                  filesystem             -
SSD   creation              Thu Jun 15 20:30 2023  -
SSD   used                  232K                   -
SSD   available             3.52T                  -
SSD   referenced            35.9K                  -
SSD   compressratio         1.00x                  -
SSD   mounted               yes                    -
SSD   quota                 none                   default
SSD   reservation           none                   default
SSD   recordsize            128K                   default
SSD   mountpoint            /SSD                   default
SSD   sharenfs              off                    default # 是否启动共享nfs
......略

写在最后

默认情况下,ZFS 会创建一个基础的文件系统,然而这只是触及了 ZFS 文件系统潜力的冰山一角。ZFS 的强大之处在于它可以创建多种不同类型的子文件系统,比如拥有快照功能或去重功能的文件系统。对于这些高级功能,以及如何使用 ZFS 来创建和管理这些不同类型的子文件系统,我们将在下一篇文章中进行详细介绍。让我们一起期待并探索 ZFS 文件系统的深度和广度,在下一篇"ZFS 文件系统简介"中,我们将进一步挖掘 ZFS 的魅力。

变更记录

  • 2024-03-06
    • 创建存储池部分,新增 RAID 模式识别与说明。
Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,每一篇 [文档] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇