華為云計算 云知識 什么是ZFS
什么是ZFS

簡介

ZFS是一個擁有邏輯卷管理功能的文件系統(tǒng),最早源自于SUN為Solaris操作系統(tǒng)開發(fā)的文件系統(tǒng)。ZFS是一個具有高存儲容量、文件系統(tǒng)與卷管理概念集成、嶄新的磁盤邏輯結(jié)構(gòu)的輕量級文件系統(tǒng),同時也是一個便捷的存儲池管理系統(tǒng)。ZFS是一個使用CDDL 許可證 授權(quán)的開源項目。

編譯和測試方式

1.選擇操作環(huán)境

本文選用華為鯤鵬云服務(wù)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

回顯內(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版本高于當前OS版本,則需要升級操作系統(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)境

通過華為云發(fā)放的彈性 云服務(wù)器 默認已將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內(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存儲池。

“/dev/vdb”必須為未使用過的磁盤,以避免破壞該盤中的原有數(shù)據(jù)。

zpool create tank /dev/vdb

2)創(chuàng)建ZFS文件系統(tǒng)。

zfs create tank/test-zfs-01

3)通過"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)通過"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)     通過"mount |grep test-zfs-01" 或 "df -h"查看文件系統(tǒng)是否掛載成功。

已知問題匯總

問題描述:

configure時出現(xiàn)"“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