簡(jiǎn)介
ZFS是一個(gè)擁有邏輯卷管理功能的文件系統(tǒng),最早源自于SUN為Solaris操作系統(tǒng)開(kāi)發(fā)的文件系統(tǒng)。ZFS是一個(gè)具有高存儲(chǔ)容量、文件系統(tǒng)與卷管理概念集成、嶄新的磁盤(pán)邏輯結(jié)構(gòu)的輕量級(jí)文件系統(tǒng),同時(shí)也是一個(gè)便捷的存儲(chǔ)池管理系統(tǒng)。ZFS是一個(gè)使用CDDL 許可證 授權(quán)的開(kāi)源項(xiàng)目。
編譯和測(cè)試方式
1.選擇操作環(huán)境
本文選用華為鯤鵬云服務(wù)ECS KC1實(shí)例做測(cè)試
2. 配置編譯工具
1) 參考ZFS安裝指導(dǎo),安裝依賴包。
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
回顯內(nèi)容示例如下,關(guān)注加粗的內(nèi)容。
[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)如果檢查發(fā)現(xiàn)kernel-devel版本高于當(dāng)前OS版本,則需要升級(jí)操作系統(tǒng)內(nèi)核。
yum upgrade kernel -y
reboot
4)重新檢查版本是否一致。
uname -a
rpm -qa |grep kernel-devel
回顯內(nèi)容示例如下,關(guān)注加粗的內(nèi)容。
[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.配置編譯環(huán)境
通過(guò)華為云發(fā)放的彈性 云服務(wù)器 默認(rèn)已將GCC安裝,無(wú)需單獨(dú)安裝配置。
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.測(cè)試已完成編譯的軟件
步驟一:加載ZFS內(nèi)核模塊
1)加載ZFS內(nèi)核模塊。
cd /usr/local/share/zfs/
./zfs.sh
2)檢查ZFS相關(guān)內(nèi)核模塊是否加載成功。
lsmod |grep zfs
回顯內(nèi)容如下:
[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
步驟二:創(chuàng)建ZFS文件系統(tǒng)
1)創(chuàng)建ZFS存儲(chǔ)池。
“/dev/vdb”必須為未使用過(guò)的磁盤(pán),以避免破壞該盤(pán)中的原有數(shù)據(jù)。
zpool create tank /dev/vdb
2)創(chuàng)建ZFS文件系統(tǒng)。
zfs create tank/test-zfs-01
3)通過(guò)"mount |grep test-zfs-01" 或 "df -h"查看文件系統(tǒng)是否掛載。
回顯內(nèi)容如下所示,關(guān)注加粗的內(nèi)容。
[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文件系統(tǒng)。
zfs umount tank/test-zfs-01
5)通過(guò)"mount |grep test-zfs-01" 或 "df -h"查看文件系統(tǒng)是否卸載成功。
回顯內(nèi)容如下所示。
[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文件系統(tǒng)。
zfs mount tank/test-zfs-01
7) 通過(guò)"mount |grep test-zfs-01" 或 "df -h"查看文件系統(tǒng)是否掛載成功。
已知問(wèn)題匯總
問(wèn)題描述:
configure時(shí)出現(xiàn)"“error: cannot guess build type; you must specify one”提示當(dāng)前編譯類型無(wú)法找到。
如下所示:
configure: error: cannot guess build type; you must specify one
問(wèn)題原因:?jiǎn)栴}的原因是自帶“config.guess”版本不匹配。
解決方法一:指定平臺(tái),手動(dòng)編譯
./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