ZFS管理准备
我在ZFS管理实践的准备工作主要有:
Apple ARM架构芯片M1 Pro 的MacBook Pro 2022,采用 Asahi Linux
Intel Core i7-4850HQ处理器 的MacBook Pro 2013,采用 Arch Linux
由于笔记本电脑只有1块 NVMe存储 设备,所以和我在 私有云架构 的3块NVMe构建 Open Virtual Machine Firmware(OMVF) 虚拟化集群不同,采用将一块磁盘通过 parted分区工具 划分成多个分区,然后在分区上建立 zpool
,以满足 Docker ZFS 存储驱动 和 libvirt_zfs_pool 。
前置工作
首先需要完成 Arch Linux上运行ZFS 的以下安装(选择其中之一):
磁盘分区
使用 parted分区工具 对磁盘进行分区
Apple ARM架构芯片M1 Pro 的MacBook Pro 2022
备注
本段ZFS磁盘准备采用了3个分区独立构建zpool,这种方式适合生产环境(需要使用独立3个磁盘)。
考虑到模拟测试环境节约磁盘消耗,我在 Gentoo上运行ZFS(xcloud) 和 树莓派5 NVMe存储ZFS 模拟中,变通采用了合并zpool,以便划分子卷时不会浪费空间。
Apple ARM架构芯片M1 Pro 的MacBook Pro 2022自身存储 500GB ,使用 parted
检查:
parted /dev/nvme0n1 print
输出显示空闲空间在 181GB~495GB
之间:
Model: APPLE SSD AP0512R (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 24.6kB 524MB 524MB iBootSystemContainer
2 524MB 149GB 148GB
3 149GB 151GB 2500MB
4 151GB 152GB 500MB fat32 boot, esp
5 152GB 181GB 29.0GB ext4
6 495GB 500GB 5369MB RecoveryOSContainer
规划如下:
50GB 用于数据存储
150GB用于 libvirt ZFS存储池 构建虚拟机集群
剩余空间(约114GB) 用于 Docker ZFS 存储驱动 构建 kind(本地docker模拟k8s集群)
分区:
parted -a optimal /dev/nvme0n1 mkpart primary 181GB 231GB
parted -a optimal /dev/nvme0n1 mkpart primary 231GB 381GB
parted -a optimal /dev/nvme0n1 mkpart primary 381GB 495GB
parted /dev/nvme0n1 name 7 zpool-data
parted /dev/nvme0n1 name 8 zpool-libvirt
parted /dev/nvme0n1 name 9 zpool-docker
完成后再次检查 parted /dev/nvme0n1 print
可以看到如下分区输出:
Model: APPLE SSD AP0512R (nvme)
Disk /dev/nvme0n1: 500GB
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 24.6kB 524MB 524MB iBootSystemContainer
2 524MB 149GB 148GB
3 149GB 151GB 2500MB
4 151GB 152GB 500MB fat32 boot, esp
5 152GB 181GB 29.0GB ext4
7 181GB 231GB 50.2GB zpool-data
8 231GB 381GB 150GB zpool-libvirt
9 381GB 495GB 114GB zpool-docker
6 495GB 500GB 5369MB RecoveryOSContainer
Intel Core i7-4850HQ处理器 的MacBook Pro 2013
Intel Core i7-4850HQ处理器 的MacBook Pro 2013存储 1TB ,使用 parted
检查:
parted /dev/nvme0n1 print
输出显示空闲空间:
Model: SAMSUNG MZVL21T0HCLR-00B00 (nvme)
Disk /dev/nvme0n1: 1024GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 256MB 255MB fat32 ESP boot, esp
2 256MB 64.0GB 63.7GB xfs primary
可以看到空间是 64.0GB~1024GB
,规划如下:
创建分区3,完整分配
64.0GB~1024GB
,这个分区构建zpool-data
但是挂载到/var/lib/docker
,因为 Docker ZFS 存储驱动 是采用完整的 zfs pool来构建的在
zpool-data
存储池下构建存储docs
卷,用于存储个人数据在
zpool-data
存储池构建用于 kind(本地docker模拟k8s集群) 需要的 在Kubernetes中部署NFS / 在Kubernetes中部署iSCSI / 在Kubernetes中部署hostPath存储 等,来模拟 Kubernetes持久化存储卷
分区:
parted -a optimal /dev/nvme0n1 mkpart primary 64GB 1024GB
parted /dev/nvme0n1 name 3 zpool-data
完成后检查 parted /dev/nvme0n1 print
可以看到新增加的第3个分区:
Model: SAMSUNG MZVL21T0HCLR-00B00 (nvme)
Disk /dev/nvme0n1: 1024GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 256MB 255MB fat32 ESP boot, esp
2 256MB 64.0GB 63.7GB xfs primary
3 64.0GB 1024GB 960GB primary
完整磁盘用于ZFS
请注意,在前文中,我在模拟系统上都是采用将一块磁盘划分为多个分区,原因只是因为笔记本电脑只有一块磁盘( NVMe存储 ),我需要用分区来实现特定目的的ZFS部署。实际上,在生产环境,通常都是完整使用整块磁盘,无需分区。
单条命令安装kubeflow 需要共享存储,我采用 Ubuntu上运行ZFS ( HPE ProLiant DL360 Gen9服务器 ) 构建ZFS使用的就是完整物理磁盘