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

存储池简介

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

重点说明: 在创建存储池的时候,不建议使用 /dev/sdb 设备名称来创建存储池,因为重启服务器以后设备名称有可能发生变化,所以最好使用设备 ID 号,ZFS 是支持基于设备 ID 号创建存储池的。

[root@qmini-nas ~]# 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@qmini-nas ~]# 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

创建存储池

# 在前面有提到不要使用设备名,而应该使用设备 ID 号来创建zpool。
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@qmini-nas ~]# 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 存储池之后,我们注意到每个磁盘都有一个 8 M 的分区被单独划分出来。这是因为在构建 ZFS 存储池的过程中,ZFS 会在每个磁盘上预保留一块空间,这部分空间一般不直接用于存储用户数据,而是被用于储存 ZFS 元数据,包括 RAID 相关的信息。

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

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

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

# 查看对应磁盘信息
[root@localhost ~]# 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@localhost ~]# 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@localhost ~]# zfs list SSD
NAME   USED  AVAIL     REFER  MOUNTPOINT
SSD    153K  3.52T     35.1K  /SSD

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

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

# 检查文件系统属性
[root@localhost SSD]# 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 的魅力。

下篇预告: DIY NAS 系列05 — ZFS 文件系统简介

用一杯咖啡支持我们,每一篇 [技术博文] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。
暂无评论

发送评论 编辑评论


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