存储池简介
存储池,或简称为 "池",在 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
创建存储池
# 在前面有提到不要使用设备名,而应该使用设备 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 模式识别与说明。