移动云计算的Btrfs实践
由于 Asahi Linux 的内核迭代非常激进,最新的 v6.1 内核已经超出了 OpenZFS
支持的最高 v6.0版本,所以在 使用zfs-dkms在arch linux(ARM)编译安装ZFS 遇到困难。为了能够在 移动云架构 中实践前沿Linux技术,考虑到 Btrfs
是Linux内核主线内置支持,我于2022年11月,改为采用 Btrfs
来构建 Docker btrfs 存储驱动 。
前置工作
安装
btrfs-progs
工具:
pacman -S btrfs-progs
modprobe btrfs
磁盘分区
由于在 Apple ARM架构芯片M1 Pro 的MacBook Pro 2022,我放弃了之前的 使用zfs-dkms在arch linux(ARM)编译安装ZFS ,但是分区方式沿用,所以依然使用 parted分区工具 对磁盘进行分区,做了一些细微调整:
分区名 |
LVM卷 |
大小 |
用途 |
---|---|---|---|
btrfs-data |
50G |
个人数据存储 |
|
btrfs-docker |
48G |
|
|
lvm-libvirt |
|
用于libvirt的LVM卷(合计) |
|
base-1 |
16G |
基础虚拟机1 |
|
base-2 |
16G |
基础虚拟机2 |
|
base-3 |
16G |
基础虚拟机3 |
|
ceph-1 |
56G |
ceph数据盘1 |
|
ceph-2 |
56G |
ceph数据盘2 |
|
ceph-3 |
56G |
ceph数据盘3 |
|
划分分区:
# 50G data,48G docker,216G libvirt(3个vm 共48G + 3个Ceph存储 168G)
parted -a optimal /dev/nvme0n1 mkpart primary 181GB 231GB
parted -a optimal /dev/nvme0n1 mkpart primary 231GB 279GB
parted -a optimal /dev/nvme0n1 mkpart primary 279GB 495GB
parted /dev/nvme0n1 name 7 btrfs-data
parted /dev/nvme0n1 name 8 btrfs-docker
parted /dev/nvme0n1 name 9 lvm-libvirt
完成后检查
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 btrfs-data
8 231GB 279GB 48.0GB btrfs-docker
9 279GB 495GB 216GB lvm-libvirt
6 495GB 500GB 5369MB RecoveryOSContainer
备注
分区删除然后重建可能需要重启系统才能正确感知分区,我尝试 partx -a /dev/nvme0n1
和 partprobe
都没有成功
btrfs文件系统
对分区 7/8 进行文件系统格式化,并挂载(启用
lzo
压缩):
sudo mkfs.btrfs -f -L data /dev/nvme0n1p7
sudo mkfs.btrfs -f -L docker /dev/nvme0n1p8
# 分区UUID采用 blkid /dev/nvme0n1p7 查看
echo "UUID=efd22ea6-9365-4bc3-a233-e61d1d159fcd /data btrfs defaults,compress=lzo 0 1" >> /etc/fstab
echo "UUID=9dcef08a-a2f4-4128-abb0-2cb6f63644a6 /var/lib/docker btrfs defaults,compress=lzo 0 1" >> /etc/fstab
mkdir /data
mkdir /var/lib/docker
mount /data
mount /var/lib/docker