ZFS快速起步¶
我在近期的ZFS实践大多数是围绕虚拟化和容器技术展开的:
实际上对ZFS操作较少
不过,在 X86移动云ZFS 将磁盘大部分构建提供给 Docker ZFS 存储驱动 存储池 zpool-data
之后,我希望将这个存储池中部分空间用于数据存储。毕竟要充分利用有限的磁盘空间,采用完整的大ZFS存储池可以得到较高的利用率。
当前存储使用情况:
# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zpool-data 888G 877M 887G - - 0% 0% 1.00x ONLINE - # zfs list NAME USED AVAIL REFER MOUNTPOINT zpool-data 877M 860G 1.77M /var/lib/docker zpool-data/0e7zhf1ohmfdfgqnsq1gy0b7n 62K 860G 43.0M legacy zpool-data/2u92kzautzwoc6qrp9keufrqa 41.5K 860G 43.1M legacy zpool-data/44045b17230cf2c63a9c3099a48d546f8d7eb301a4bb9f62bbb675746b59f5b4 42K 860G 11.0M legacy ... 容器占用
准备在
zpool-data
下构建一个home
卷,挂载到/home
目录,这样大多数数据都能够得到有效保存首先以
root
身份登陆,并确保/home
目录没有用户访问,将/home
目录重命名:
mv /home /home.bak
由于
zpool-data
存储池已经在 X86移动云ZFS 构建好,所以忽略创建 ZFS 存储池步骤,直接创建卷home
,并且创建home
卷下面的子(用户目录):
#zfs create zpool-data/home
#zfs set mountpoint=/home zpool-data/home
# 采用一条命令创建挂载好目录的ZFS卷
zfs create -o mountpoint=/home zpool-data/home
# 为每个用户创建独立的子卷,对于ZFS来说会自动形成层次结构的目录挂载
zfs create zpool-data/home/huatai
对于存储池下创建的 根
卷,需要指定挂载目录;对于 根
卷下的子卷,可以不指定挂载目录,则会自动按照层次结构进行独立卷挂载,非常巧妙的管理模式
完成后使用
df -h
检查可以看到当前ZFS存储挂载目录:
Filesystem Size Used Avail Use% Mounted on
...
zpool-data 860G 1.9M 860G 1% /var/lib/docker
zpool-data/home 860G 128K 860G 1% /home
zpool-data/home/huatai 860G 128K 860G 1% /home/huatai
卷和子卷会从上一级ZFS继承属性,由于在 X86移动云ZFS 已经配置了
zpool-data
压缩属性,所以使用zfs get compression
可以看到卷和子卷都继承了压缩属性:# zfs get compression zpool-data/home NAME PROPERTY VALUE SOURCE zpool-data/home compression lz4 inherited from zpool-data # zfs get compression zpool-data/home/huatai NAME PROPERTY VALUE SOURCE zpool-data/home/huatai compression lz4 inherited from zpool-data
可以设置卷的quota,例如:
zfs set quota=10G zpool-data/home/huatai
恢复
/home/huatai
目录数据:
chown huatai:staff /home/huatai
chmod 700 /home/huatai
su - huatai
(cd /home.bak/huatai && tar cf - .)|(cd /home/huatai && tar xf -)