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 目录重命名:

将/home目录重命名(备份)
mv /home /home.bak
  • 由于 zpool-data 存储池已经在 X86移动云ZFS 构建好,所以忽略创建 ZFS 存储池步骤,直接创建卷 home ,并且创建 home 卷下面的子(用户目录):

创建 zpool-data 存储池的 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存储挂载目录:

创建 zpool-data 存储池的 home 卷以及子卷的挂载情况
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 目录数据:

恢复/home/huatai目录数据
chown huatai:staff /home/huatai
chmod 700 /home/huatai
su - huatai

(cd /home.bak/huatai && tar cf - .)|(cd /home/huatai && tar xf -)

参考