什么是ZFS

簡(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