简介
ZFS是一个拥有逻辑卷管理功能的文件系统,最早源自于SUN为Solaris操作系统开发的文件系统。ZFS是一个具有高存储容量、文件系统与卷管理概念集成、崭新的磁盘逻辑结构的轻量级文件系统,同时也是一个便捷的存储池管理系统。ZFS是一个使用CDDL 许可证 授权的 开源 项目。
编译和测试方式
1.选择操作环境
本文选用华为鲲鹏 云服务 ECS KC1实例做测试
2. 配置编译工具
1) 参考ZFS安装指导,安装依赖包。
yum install autoconf automake libtool rpm-build ksh -y
yum install zlib-devel libuuid-devel libattr-devel libblkid-devel libselinux-devel libgudev1-devel -y
yum install libacl-devel libaio-devel device-mapper-devel openssl-devel libtirpc-devel elfutils-libelf-devel -y
yum install kernel-devel -y
yum install epel-release -y
yum install python36 python36-devel python36-setuptools python36-cffi -y
2) 检查OS版本与kernel-devel是否一致。
uname -a
rpm -qa |grep kernel-devel
回显内容示例如下,关注加粗的内容。
[root@ecs-0001 ~]# uname -a
Linux ecs-0001 4.14.0-115.5.1.el7a.aarch64 #1 SMP Mon Feb 4 16:38:08 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
[root@ecs-0001 ~]# rpm -qa |grep kernel-devel
kernel-devel-4.14.0-115.8.1.el7a.aarch64
3)如果检查发现kernel-devel版本高于当前OS版本,则需要升级操作系统内核。
yum upgrade kernel -y
reboot
4)重新检查版本是否一致。
uname -a
rpm -qa |grep kernel-devel
回显内容示例如下,关注加粗的内容。
[root@ecs-0001 ~]# uname -a
Linux ecs-0001 4.14.0-115.8.1.el7a.aarch64 #1 SMP Wed Jun 5 15:01:21 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
[root@ecs-0001 ~]# rpm -qa |grep kernel-devel
kernel-devel-4.14.0-115.8.1.el7a.aarch64
3. 获取源代码
ZFS源码下载。
wget https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz
4.配置编译环境
通过华为云发放的弹性 云服务器 默认已将GCC安装,无需单独安装配置。
5.编译源代码
tar -zxvf zfs-0.8.1.tar.gz
cd zfs-0.8.1
./configure --build=arm-linux
make -s -j$(nproc)
make install
6.测试已完成编译的软件
步骤一:加载ZFS内核模块
1)加载ZFS内核模块。
cd /usr/local/share/zfs/
./zfs.sh
2)检查ZFS相关内核模块是否加载成功。
lsmod |grep zfs
回显内容如下:
[root@ecs-0001 zfs]# lsmod |grep zfs
zfs 3932160 20489422
icp 393216 16532263 zfs
zlua 327680 15447843 zfs
zcommon 262144 14838387 zfs
zunicode 524288 14039163 zfs
znvpair 262144 13535480 zcommon,zfs
zavl 262144 12979271 zfs
spl 262144 11258883 znvpair,zcommon,zfs,icp,zavl
步骤二:创建ZFS文件系统
1)创建ZFS存储池。
“/dev/vdb”必须为未使用过的磁盘,以避免破坏该盘中的原有数据。
zpool create tank /dev/vdb
2)创建ZFS文件系统。
zfs create tank/test-zfs-01
3)通过"mount |grep test-zfs-01" 或 "df -h"查看文件系统是否挂载。
回显内容如下所示,关注加粗的内容。
[root@ecs-0001 zfs]# mount |grep test-zfs-01
tank/test-zfs-01 on /tank/test-zfs-01 type zfs (rw,xattr,noacl)
[root@ecs-0001 zfs]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 6.7G 0 6.7G 0% /dev
tmpfs 6.7G 0 6.7G 0% /dev/shm
tmpfs 6.7G 21M 6.7G 1% /run
tmpfs 6.7G 0 6.7G 0% /sys/fs/cgroup
/dev/vda2 39G 20G 17G 56% /
/dev/vda1 1022M 7.7M 1015M 1% /boot/efi
//192.168.1.244/FileShare 3.2G 76K 3.2G 1% /tmp/smb
tmpfs 1.4G 0 1.4G 0% /run/user/0
tank 9.3G 128K 9.3G 1% /tank
tank/test-zfs-01 9.3G 128K 9.3G 1% /tank/test-zfs-01
4)卸载ZFS文件系统。
zfs umount tank/test-zfs-01
5)通过"mount |grep test-zfs-01" 或 "df -h"查看文件系统是否卸载成功。
回显内容如下所示。
[root@ecs-0001 zfs]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 6.7G 0 6.7G 0% /dev
tmpfs 6.7G 0 6.7G 0% /dev/shm
tmpfs 6.7G 21M 6.7G 1% /run
tmpfs 6.7G 0 6.7G 0% /sys/fs/cgroup
/dev/vda2 39G 20G 17G 56% /
/dev/vda1 1022M 7.7M 1015M 1% /boot/efi
//192.168.1.244/FileShare 3.2G 76K 3.2G 1% /tmp/smb
tmpfs 1.4G 0 1.4G 0% /run/user/0
tank 9.3G 128K 9.3G 1% /tank
6)挂载ZFS文件系统。
zfs mount tank/test-zfs-01
7) 通过"mount |grep test-zfs-01" 或 "df -h"查看文件系统是否挂载成功。
已知问题汇总
问题描述:
configure时出现"“error: cannot guess build type; you must specify one”提示当前编译类型无法找到。
如下所示:
configure: error: cannot guess build type; you must specify one
问题原因:问题的原因是自带“config.guess”版本不匹配。
解决方法一:指定平台,手动编译
./configure --build=arm-linux
make -s -j$(nproc)
解决方法二:替换ZFS自带“config.guess”。
mv config/config.guess config/config.guess.bak
cp /usr/share/automake-1.13/config.guess config/
make -s -j$(nproc)
参考资料
ZFS:https://zfsonlinux.org/
ZFS wiki:https://github.com/zfsonlinux/zfs/wiki