歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 如何在Centos7上安裝和使用ZFS

如何在Centos7上安裝和使用ZFS

日期:2017/3/3 14:07:22   编辑:Linux技術
導讀ZFS文件系統的英文名稱為ZettabyteFileSystem,也叫動態文件系統(DynamicFileSystem),是第一個128位文件系統。最初是由Sun公司為Solaris10操作系統開發的文件系統。作為OpenSolaris開源計劃的一部分,ZFS於2005年11月發布,被Sun稱為是終極文件系統,經歷了10年的活躍開發,而最新的開發將全面開放,並重新命名為OpenZFS。ZFS優勢
ZFS是一種先進的、高度可擴展的文件系統,最初是由Sun Microsystems開發的,現在OpenZFS是項目的一部分。有這麼多文件系統可用在Linux上,那自然要問ZFS有什麼特別之處。不同於其它文件系統,它不僅是一個文件系統邏輯卷管理器。ZFS使其受歡迎的特性是:
1. 數據完整性——數據一致性和完整性通過即寫即拷和校驗技術保證。
2. 存儲空間池——可用存儲驅動器一起放入稱為zpool的單個池。
3. 軟件RAID ——像發出一個命令一樣,建立一個raidz數組。
4. 內置的卷管理器——ZFS充當卷管理器。
5. Snapshots、克隆、壓縮——這些都是一些ZFS提供的高級功能。
在本指南中,我們將學習在CentOS 7服務器上如何安裝、設置和使用一些重要的ZFS命令。
術語
在我們繼續之前,讓我們了解一些ZFS的常用的術語。
Pool:存儲驅動器的邏輯分組,它是ZFS的基本構建塊,從這裡將存儲空間分配給數據集。
Datasets:ZFS文件系統的組件即文件系統、克隆、快照和卷被稱為數據集。
Mirror:一個虛擬設備存儲相同的兩個或兩個以上的磁盤上的數據副本,在一個磁盤失敗的情況下,相同的數據是可以用其他磁盤上的鏡子。
Resilvering:在恢復設備時將數據從一個磁盤復制到另一個磁盤的過程。
Scrub:擦除用於一致性檢驗在ZFS像在其他文件系統如何使用fsck。
安裝ZFS
為了對CentOS安裝ZFS,我們需要先安裝支持包EPEL倉庫,然後在ZFS存儲庫上安裝所需的ZFS包。
yum localinstall --nogpgcheckhttp://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum localinstall --nogpgcheck' target='_blank'>http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm[/code] 
現在安裝內核開發和zfs包,內核開發的軟件包是需要ZFS建立模塊和插入到內核中。
yum install kernel-devel zfs

驗證zfs模塊插入到內核使用的lsmod命令,如果沒有,使用‘modprobe命令手動插入它。
[root@li1467-130 ~]# lsmod |grep zfs
[root@li1467-130 ~]# modprobe zfs
[root@li1467-130 ~]# lsmod |grep zfs
zfs 2790271 0
zunicode 331170 1 zfs
zavl 15236 1 zfs
zcommon 55411 1 zfs
znvpair 89086 2 zfs,zcommon
spl 92029 3 zfs,zcommon,znvpair

讓我們檢查是否我們可以使用zfs的命令:
[root@li1467-130 ~]# zfs list
no datasets available

管理
ZFS主要有兩個工具,zpool和ZFS。zpool處理使用磁盤實用程序創建和維護ZFS池負責數據的創建和維護。
zpool utility
創建和銷毀池
首先驗證可用的磁盤創建一個存儲池。
[root@li1467-130 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0  Mar 16 08:12 /dev/sda
brw-rw---- 1 root disk 8, 16 Mar 16 08:12 /dev/sdb
brw-rw---- 1 root disk 8, 32 Mar 16 08:12 /dev/sdc
brw-rw---- 1 root disk 8, 48 Mar 16 08:12 /dev/sdd
brw-rw---- 1 root disk 8, 64 Mar 16 08:12 /dev/sde
brw-rw---- 1 root disk 8, 80 Mar 16 08:12 /dev/sdf

創建一個池的驅動器。
zpool create  <pool name.   .... 
[root@li1467-130 ~]# zpool create -f zfspool sdc sdd sde sdf

zpool狀態的命令顯示可用池的狀態。
[root@li1467-130 ~]# zpool status
pool: zfspool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zfspool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
errors: No known data errors

驗證如果池創建成功。
[root@li1467-130 ~]# df -h
Filesystem    Size   Used      Avail  Use%   Mounted on
/dev/sda      19G    1.4G        17G      8%      /
devtmpfs    488M        0      488M      0%     /dev
tmpfs          497M        0      497M      0%    /dev/shm
tmpfs          497M    50M     447M     11%   /run
tmpfs          497M         0     497M      0%   /sys/fs/cgroup
tmpfs          100M         0     100M      0%   /run/user/0
zfspool         3.7G         0       3.7G      0%  /zfspoolv

如你所見,使用zpool創造了一個池的名字zfspool大小3.7 GB的空間,同時掛載在/ zfspool。
用命令 'zpool destroy' 銷毀一個地址池:
zpool destroy 
[root@li1467-130 ~]# zpool destroy zfspool
[root@li1467-130 ~]# zpool status
no pools available

現在讓我們嘗試創建一個簡單的鏡像池。
zpool create   mirror  ...

通過重復關鍵字的驅動器我們可以創建多個鏡像。
[root@li1467-130 ~]# zpool create -f mpool mirror sdc sdd mirror sde sdf
[root@li1467-130 ~]# zpool status
pool: mpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
mpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
errors: No known data errors

在上面的例子中,我們創建了每兩個磁盤鏡像池。
同樣的,我們可以創建一個raidz池。
[root@li1467-130 ~]# zpool create -f rpool raidz sdc sdd sde sdf
[root@li1467-130 ~]# zpool status
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
errors: No known data errors

在ZFS池管理設備
一旦創建一個池,從池中可以添加或刪除熱備件和緩存設備,從鏡像池和替換設備中連接或者分離。但是冗余和raidz設備不能從池中刪除。我們將看到如何在這一節中執行這些操作。
我首先創建一個池稱為“testpool”組成的兩個設備,sdc和sdd。另一個設備sde將被添加到這裡。
[root@li1467-130 ~]# zpool create -f testpool sdc sdd
[root@li1467-130 ~]# zpool add testpool sde
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors

正如前面提到的,我不能刪除這個新添加的設備,因為它不是一個冗余或raidz池。
[root@li1467-130 ~]# zpool remove testpool sde
cannot remove sde: only inactive hot spares, cache, top-level, or log devices can be removed

但我可以在這個池添加一個空閒磁盤和刪除它。
[root@li1467-130 ~]# zpool add testpool spare sdf
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
spares
sdf AVAIL
errors: No known data errors
[root@li1467-130 ~]# zpool remove testpool sdf
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:
NAME        STATE       READ  WRITE   CKSUM
testpool    ONLINE       0          0               0
sdc            ONLINE       0           0               0
sdd            ONLINE      0            0               0
sde            ONLINE      0            0               0
errors: No known data errors

同樣的,我們可以使用attach命令附加磁盤鏡像或非鏡像的池和detach命令從鏡像磁盤池來分離。
zpool attach    
zpool detach

當設備發生故障或損壞,我們可以使用replace命令替換它。
zpool replace

在鏡像配置當中我們將爆力的測試一個設備。
[root@li1467-130 ~]# zpool create -f testpool mirror sdd sde

這將創建一個鏡像磁盤池組成的SDD和SDE。現在,讓我們故意損壞SDD寫零到磁盤中。
[root@li1467-130 ~]# dd if=/dev/zero of=/dev/sdd
dd: writing to ‘/dev/sdd’: No space left on device
2048001+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 22.4804 s, 46.6 MB/s

我們將使用“scrub”命令來檢測這種損壞。
[root@li1467-130 ~]# zpool scrub testpool
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see:http://zfsonlinux.org/msg/ZFS-8000-4J scan: scrub repaired 0 in 0h0m with 0 errors on Fri Mar 18 09:59:40 2016
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdd UNAVAIL 0 0 0 corrupted data
sde ONLINE 0 0 0
errors: No known data errors

現在我們用SDC替換SDD。
[root@li1467-130 ~]# zpool replace testpool sdd sdc; zpool status
pool: testpool
state: ONLINE
scan: resilvered 83.5K in 0h0m with 0 errors on Fri Mar 18 10:05:17 2016
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
replacing-0 UNAVAIL 0 0 0
sdd UNAVAIL 0 0 0 corrupted data
sdc ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors
[root@li1467-130 ~]# zpool status
pool: testpool
state: ONLINE
scan: resilvered 74.5K in 0h0m with 0 errors on Fri Mar 18 10:00:36 2016
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors

池的遷移
我們可以使用導出和導入命令在不同的主機之間遷移存儲池。對於這個,在池中使用的磁盤應該從兩個系統中可用。
[root@li1467-130 ~]# zpool export testpool
[root@li1467-130 ~]# zpool status
no pools available

zpool import命令列出所有可以利用的池。執行這個系統命令,你想要導入的池。
[root@li1467-131 ~]# zpool import
pool: testpool
id: 3823664125009563520
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
testpool ONLINE
sdc ONLINE
sdd ONLINE
sde ONLINE

現在導入要求的池。
[root@li1467-131 ~]# zpool import testpool
[root@li1467-131 ~]# zpool status
pool: testpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errors

iostat
Iostat命令可以驗證池設備IO統計。
[root@li1467-130 ~]# zpool iostat -v testpool
capacity          operations                        bandwidth
pool          alloc      free            read     write             read   write
----------    -----     -----            -----     -----                -----   -----
testpool    1.80M  2.86G        22            27               470K  417K
sdc             598K   975M           8              9               200K  139K
sdd             636K  975M            7              9                135K  139K
sde             610K   975M           6              9                 135K 139K
----------   -----     -----           -----          -----               -----  -----

zfs utility
我們現在會移動到ZFS utility。在這裡,我們將看看如何創建、銷毀數據集、文件系統壓縮、配額和快照。
創建和銷毀文件系統
ZFS文件系統可以使用ZFS創建命令創建
zfs create 
[root@li1467-130 ~]# zfs create testpool/students
[root@li1467-130 ~]# zfs create testpool/professors
[root@li1467-130 ~]# df -h
Filesystem                    Size             Used          Avail          Use%          Mounted on
/dev/sda                       19G              1.4G          17G             8%                     /
devtmpfs                   488M                  0      488M             0%                    /dev
tmpfs                          497M                  0       497M            0%                   /dev/shm
tmpfs                          497M            50M       447M           11%                  /run
tmpfs                          497M                 0        497M            0%                /sys/fs/cgroup
testpool                       2.8G                  0         2.8G            0%               /testpool
tmpfs                          100M                  0        100M            0%             /run/user/0
testpool/students     2.8G                   0         2.8G             0%            /testpool/students
testpool/professors  2.8G                   0         2.8G             0%           /testpool/professors

從上面的輸出注意到,在文件系統創建時盡管沒有掛載點,掛載點創建時使用相同的路徑關系池。
ZFS創建允許使用-o選項可以指定使用像掛載點,壓縮、定額、執行等。
你可以列出可用的文件系統使用ZFS的列表:
[root@li1467-130 ~]# zfs list
NAME                           USED     AVAIL     REFER    MOUNTPOINT
testpool                         100M       2.67G       19K         /testpool
testpool/professors        31K     1024M   20.5K        /testpool/professors
testpool/students        1.57M     98.4M   1.57M      /testpool/students

我們用銷毀選項銷毀文件系統。
zfs destroy
壓縮
現在我們將了解在ZFS怎樣壓縮,在我們開始使用壓縮之前,我們需要使它使用“設置壓縮”。
zfs set

一旦這樣做,壓縮和解壓縮將以透明模式發生在文件系統上面。
在我們的示例中,我將使學生目錄使用lz4壓縮算法壓縮。
[root@li1467-130 ~]# zfs set compression=lz4 testpool/students

我現在要復制一個文件到該文件系統大小15m,並檢查它的大小。
[root@li1467-130 /]# cd /var/log
[root@li1467-130 log]# du -h secure
15M secure
[root@li1467-130 ~]# cp /var/log/secure /testpool/students/
[root@li1467-130 students]# df -h .
Filesystem               Size     Used   Avail    Use%      Mounted on
testpool/students   100M   1.7M   99M        2%      /testpool/students

注意,使用文件系統的大小僅為1.7m,文件大小為15m,我們可以檢查壓縮比。
[root@li1467-130 ~]# zfs get compressratio testpool
NAME      PROPERTY         VALUE            SOURCE
testpool    compressratio     9.03x

配額和預訂
讓我用一個真實的例子來解釋配額。假設我們有一個要求,在一所大學,以限制磁盤空間使用的文件系統為教授和學生。讓我們假設我們需要分配給教授和學生分為1GB和100MB。我們可以利用“配額”在ZFS來滿足這一要求。配額確保文件系統使用的磁盤空間的數量不超過規定的限度。保留有助於在實際分配和保證所需的磁盤空間的數量是可用的文件系統。
zfs set quota= 
zfs set reservation= 
[root@li1467-130 ~]# zfs set quota=100M testpool/students
[root@li1467-130 ~]# zfs set reservation=100M testpool/students
[root@li1467-130 ~]# zfs list
NAME                          USED      AVAIL    REFER    MOUNTPOINT
testpool                        100M       2.67G       19K        /testpool
testpool/professors      19K       2.67G        19K       /testpool/professors
testpool/students      1.57M       98.4M    1.57M    /testpool/students
[root@li1467-130 ~]# zfs set quota=1G testpool/professors
[root@li1467-130 ~]# zfs list
NAME                           USED     AVAIL    REFER    MOUNTPOINT
testpool                         100M     2.67G       19K          /testpool
testpool/professors       19K    1024M       19K         /testpool/professors
testpool/students       1.57M    98.4M    1.57M       /testpool/students

在上面的例子中,我們已經給教授和學生為1GB與100MB。觀察ZFS列表結果,最初,他們有2.67gb每個的大小和設置配額,價值也隨之發生了相應的變化。
快照
快照是在某個時間點的ZFS文件系統的只讀副本。他們不在ZFS池消耗任何額外的空間。我們可以回滾到相同的狀態,在稍後的階段,按用戶要求或僅提取一個單一的或一組文件。
我現在就從我們前面的例子,然後在在testpool/professors把這個文件系統快照創建一些目錄和文件。
[root@li1467-130 ~]# cd /testpool/professors/
[root@li1467-130 professors]# mkdir maths physics chemistry
[root@li1467-130 professors]# cat > qpaper.txt
Question paper for the year 2016-17
[root@li1467-130 professors]# ls -la
total 4
drwxr-xr-x  5  root root    6   Mar 19 10:34 .
drwxr-xr-x  4  root root    4   Mar 19 09:59 ..
drwxr-xr-x  2  root root    2   Mar 19 10:33 chemistry
drwxr-xr-x  2  root root    2   Mar 19 10:32 maths
drwxr-xr-x  2  root root    2   Mar 19 10:32 physics
-rw-r--r--     1  root root  36   Mar 19 10:35 qpaper.txt

快照,可以使用下面的語法:
zfs snapshot <filesystem|volume@>
[root@li1467-130 professors]# zfs snapshot testpool/professors@03-2016
[root@li1467-130 professors]# zfs list -t snapshot
NAME                                             USED         AVAIL     REFER     MOUNTPOINT
testpool/professors@03-2016       0                -                20.5K

我現在將刪除創建的文件和提取的快照。
[root@li1467-130 professors]# rm -rf qpaper.txt
[root@li1467-130 professors]# ls
chemistry maths physics
[root@li1467-130 professors]# cd .zfs
[root@li1467-130 .zfs]# cd snapshot/03-2016/
[root@li1467-130 03-2016]# ls
chemistry maths physics qpaper.txt
[root@li1467-130 03-2016]# cp -a qpaper.txt /testpool/professors/
[root@li1467-130 03-2016]# cd /testpool/professors/
[root@li1467-130 professors]# ls
chemistry maths physics qpaper.txt

已刪除的文件返回其位置。
我們可以列出所有可用的快照使用ZFS的列表:
[root@li1467-130 ~]# zfs list -t snapshot
NAME                                             USED     AVAIL    REFER    MOUNTPOINT
testpool/professors@03-2016    10.5K       -              20.5K       -

最後,讓我們使用zfs摧毀命令銷毀快照:
zfs destroy <filesystem|volume@>
 
[root@li1467-130 ~]# zfs destroy testpool/professors@03-2016
[root@li1467-130 ~]# zfs list -t snapshot
no datasets available

結論
在這篇文章中,您學到了如何在CentOS 7安裝ZFS和使用一些基本的和重要的從zpool命令和ZFS實用程序。這不是一個全面的列表。ZFS有著更多的功能,你可以進一步的探索官方頁面。
本文轉載自:http://www.linuxprobe.com/centos7-install-use-zfs/
免費提供最新Linux技術教程書籍,為開源技術愛好者努力做得更多更好:http://www.linuxprobe.com/
Copyright © Linux教程網 All Rights Reserved