Btrfs子卷
和 Linux LVM逻辑卷管理 类似,Btrfs提供了卷管理能力,但是也有一些借鉴 ZFS 的管理改进:
本文实践中,我采用独立子卷来提供 Btrfs NFS
创建独立子卷
创建子卷: 这里创建一个
cloud-atlas_build
子卷,用于输出我的 Sphinx文档 编译输出目录:# 先清理掉 build 目录下文件: make clean rm -rf /home/huatai/docs/github.com/cloud-atlas/build/*
在 /data
挂载卷下创建 cloud-atlas_build
子卷:
在Btrfs文件/data挂载卷下创建子卷 cloud-atlas_build
# 在 ``/data`` 已挂载的btrfs目录下创建子卷 cloud-atlas_build
btrfs subvolume create /data/cloud-atlas_build
可以手工命令挂载子卷:
# 挂载子卷 cloud-atlas_build mount -t btrfs -o subvol=cloud-atlas_build /dev/nvme0n1p7 /home/huatai/docs/github.com/cloud-atlas/build
备注
注意,首先需要将 Btrfs
根卷挂载到 /data
目录,这样才能在 /data
下面创建子卷 /data/cloud-atlas_build
挂载后检查
df -h
可以看到:Filesystem Size Used Avail Use% Mounted on ... /dev/nvme0n1p7 47G 7.9G 39G 17% /data /dev/nvme0n1p7 47G 7.9G 39G 17% /data/docs/github.com/cloud-atlas/build
为了能够启动时自动挂载,需要在在 /etc/fstab
中创建子卷的对应配置,但是怎么指定设备文件呢?
请注意上文中 Btrfs 文件系统以及其下的子卷都是使用了相同的设备 /dev/nvme0n1p7
,所以在 /etc/fstab
中,子卷的设备文件其实和父卷是一样的,差别仅在挂载选项上:
通过配置 /etc/fstab btrfs的子卷 cloud-atlas_build 实现btrfs子卷挂载
echo "UUID=efd22ea6-9365-4bc3-a233-e61d1d159fcd /data/docs/github.com/cloud-atlas/build btrfs subvol=cloud-atlas_build 0 1" >> /etc/fstab
systemctl daemon-reload
mount /data/docs/github.com/cloud-atlas/build
备注
接下来就可以实践 Btrfs NFS 将上述 cloud-atlas_build
子卷通过NFS输出给 kind(本地docker模拟k8s集群) 集群使用构建一个简单的个人WEB网站
实践案例
为 debootstrap 提供一个独立 btrfs subvolume ubuntu-dev
:
创建 btrfs subvolume
ubuntu-dev
uuid=d80f2f08-3b50-4b19-a0eb-058fb47693b0
pool=/var/lib/docker
subvol=ubuntu-dev
btrfs subvolume create ${pool}/${subvol}
echo "/dev/disk/by-uuid/${uuid} ${pool}/${subvol} btrfs defaults,compress=lzo,subvol=${subvol} 0 1" >> /etc/fstab
mount ${pool}/${subvol}