歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 如何在Centos7上安裝和使用ZFS

如何在Centos7上安裝和使用ZFS

日期:2017/3/6 9:45:31   编辑:學習Linux

如何在Centos7上安裝和使用ZFS


如何在Centos7上安裝和使用ZFS


導讀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 --nogpgcheck http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpmyum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm

現在安裝內核開發和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 zfszfs 2790271 0zunicode 331170 1 zfszavl 15236 1 zfszcommon 55411 1 zfsznvpair 89086 2 zfs,zcommonspl 92029 3 zfs,zcommon,znvpair

讓我們檢查是否我們可以使用zfs的命令:

[root@li1467-130 ~]# zfs listno 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/sdabrw-rw---- 1 root disk 8, 16 Mar 16 08:12 /dev/sdbbrw-rw---- 1 root disk 8, 32 Mar 16 08:12 /dev/sdcbrw-rw---- 1 root disk 8, 48 Mar 16 08:12 /dev/sddbrw-rw---- 1 root disk 8, 64 Mar 16 08:12 /dev/sdebrw-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 statuspool: zfspoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMzfspool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors: No known data errors

驗證如果池創建成功。

[root@li1467-130 ~]# df -hFilesystem  Size  Used   Avail Use% Mounted on/dev/sda   19G  1.4G    17G   8%   /devtmpfs  488M    0   488M   0%   /devtmpfs     497M    0   497M   0%  /dev/shmtmpfs     497M  50M   447M   11%  /runtmpfs     497M     0   497M   0%  /sys/fs/cgrouptmpfs     100M     0   100M   0%  /run/user/0zfspool     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 statusno pools available

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

zpool create   mirror  ... 

通過重復關鍵字的驅動器我們可以創建多個鏡像。

[root@li1467-130 ~]# zpool create -f mpool mirror sdc sdd mirror sde sdf[root@li1467-130 ~]# zpool statuspool: mpoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMmpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0mirror-1 ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors: No known data errors

在上面的例子中,我們創建了每兩個磁盤鏡像池。
同樣的,我們可以創建一個raidz池。

[root@li1467-130 ~]# zpool create -f rpool raidz sdc sdd sde sdf[root@li1467-130 ~]# zpool statuspool: rpoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMrpool ONLINE 0 0 0raidz1-0 ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors: 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 statuspool: testpoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0errors: No known data errors

正如前面提到的,我不能刪除這個新添加的設備,因為它不是一個冗余或raidz池。

[root@li1467-130 ~]# zpool remove testpool sdecannot 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 statuspool: testpoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sparessdf AVAILerrors: No known data errors[root@li1467-130 ~]# zpool remove testpool sdf[root@li1467-130 ~]# zpool statuspool: testpoolstate: ONLINEscan: none requestedconfig:NAME    STATE    READ WRITE CKSUMtestpool  ONLINE    0     0        0sdc      ONLINE    0      0        0sdd      ONLINE   0      0        0sde      ONLINE   0      0        0errors: 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/sdddd: writing to ‘/dev/sdd’: No space left on device2048001+0 records in2048000+0 records out1048576000 bytes (1.0 GB) copied, 22.4804 s, 46.6 MB/s

我們將使用“scrub”命令來檢測這種損壞。

[root@li1467-130 ~]# zpool scrub testpool[root@li1467-130 ~]# zpool statuspool: testpoolstate: ONLINEstatus: One or more devices could not be used because the label is missing orinvalid. Sufficient replicas exist for the pool to continuefunctioning in a degraded state.action: Replace the device using 'zpool replace'.see: http://zfsonlinux.org/msg/ZFS-8000-4Jscan: scrub repaired 0 in 0h0m with 0 errors on Fri Mar 18 09:59:40 2016config:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdd UNAVAIL 0 0 0 corrupted datasde ONLINE 0 0 0errors: No known data errors

現在我們用SDC替換SDD。

[root@li1467-130 ~]# zpool replace testpool sdd sdc; zpool statuspool: testpoolstate: ONLINEscan: resilvered 83.5K in 0h0m with 0 errors on Fri Mar 18 10:05:17 2016config:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0replacing-0 UNAVAIL 0 0 0sdd UNAVAIL 0 0 0 corrupted datasdc ONLINE 0 0 0sde ONLINE 0 0 0errors: No known data errors[root@li1467-130 ~]# zpool statuspool: testpoolstate: ONLINEscan: resilvered 74.5K in 0h0m with 0 errors on Fri Mar 18 10:00:36 2016config:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdc ONLINE 0 0 0sde ONLINE 0 0 0errors: No known data errors
池的遷移

我們可以使用導出和導入命令在不同的主機之間遷移存儲池。對於這個,在池中使用的磁盤應該從兩個系統中可用。

[root@li1467-130 ~]# zpool export testpool[root@li1467-130 ~]# zpool statusno pools available

zpool import命令列出所有可以利用的池。執行這個系統命令,你想要導入的池。

[root@li1467-131 ~]# zpool importpool: testpoolid: 3823664125009563520state: ONLINEaction: The pool can be imported using its name or numeric identifier.config:testpool ONLINEsdc ONLINEsdd ONLINEsde ONLINE

現在導入要求的池。

[root@li1467-131 ~]# zpool import testpool[root@li1467-131 ~]# zpool statuspool: testpoolstate: ONLINEscan: none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0errors: No known data errors
iostat

Iostat命令可以驗證池設備IO統計。

[root@li1467-130 ~]# zpool iostat -v testpoolcapacity     operations            bandwidthpool     alloc   free      read   write       read  write----------  -----   -----      -----   -----        -----  -----testpool  1.80M 2.86G    22      27        470K 417Ksdc       598K  975M      8       9        200K 139Ksdd       636K 975M      7       9        135K 139Ksde       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 -hFilesystem          Size       Used     Avail     Use%     Mounted on/dev/sda            19G       1.4G     17G       8%           /devtmpfs          488M         0   488M       0%          /devtmpfs             497M         0    497M      0%          /dev/shmtmpfs             497M      50M    447M      11%         /runtmpfs             497M         0    497M      0%        /sys/fs/cgrouptestpool            2.8G        0     2.8G      0%        /testpooltmpfs             100M         0    100M      0%       /run/user/0testpool/students   2.8G          0     2.8G       0%      /testpool/studentstestpool/professors 2.8G          0     2.8G       0%      /testpool/professors

從上面的輸出注意到,在文件系統創建時盡管沒有掛載點,掛載點創建時使用相同的路徑關系池。
ZFS創建允許使用-o選項可以指定使用像掛載點,壓縮、定額、執行等。
你可以列出可用的文件系統使用ZFS的列表:

[root@li1467-130 ~]# zfs listNAME              USED   AVAIL   REFER  MOUNTPOINTtestpool             100M    2.67G    19K     /testpooltestpool/professors    31K   1024M  20.5K    /testpool/professorstestpool/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 secure15M secure[root@li1467-130 ~]# cp /var/log/secure /testpool/students/[root@li1467-130 students]# df -h .Filesystem        Size   Used  Avail  Use%   Mounted ontestpool/students  100M  1.7M  99M    2%   /testpool/students

注意,使用文件系統的大小僅為1.7m,文件大小為15m,我們可以檢查壓縮比。

[root@li1467-130 ~]# zfs get compressratio testpoolNAME   PROPERTY     VALUE      SOURCEtestpool  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 listNAME             USED   AVAIL  REFER  MOUNTPOINTtestpool            100M    2.67G    19K    /testpooltestpool/professors   19K    2.67G    19K    /testpool/professorstestpool/students   1.57M    98.4M  1.57M  /testpool/students[root@li1467-130 ~]# zfs set quota=1G testpool/professors[root@li1467-130 ~]# zfs listNAME              USED   AVAIL  REFER  MOUNTPOINTtestpool             100M   2.67G    19K     /testpooltestpool/professors    19K  1024M    19K     /testpool/professorstestpool/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.txtQuestion paper for the year 2016-17[root@li1467-130 professors]# ls -latotal 4drwxr-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 chemistrydrwxr-xr-x 2 root root  2  Mar 19 10:32 mathsdrwxr-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 snapshotNAME                       USED     AVAIL   REFER   MOUNTPOINTtestpool/professors@03-2016    0        -        20.5K  

我現在將刪除創建的文件和提取的快照。

[root@li1467-130 professors]# rm -rf qpaper.txt[root@li1467-130 professors]# lschemistry maths physics[root@li1467-130 professors]# cd .zfs[root@li1467-130 .zfs]# cd snapshot/03-2016/[root@li1467-130 03-2016]# lschemistry 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]# lschemistry maths physics qpaper.txt

已刪除的文件返回其位置。
我們可以列出所有可用的快照使用ZFS的列表:

[root@li1467-130 ~]# zfs list -t snapshotNAME                       USED   AVAIL  REFER  MOUNTPOINTtestpool/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 snapshotno datasets available
結論

在這篇文章中,您學到了如何在CentOS 7安裝ZFS和使用一些基本的和重要的從zpool命令和ZFS實用程序。這不是一個全面的列表。ZFS有著更多的功能,你可以進一步的探索官方頁面。

原文地址:http://linoxide.com/tools/guide-install-use-zfs-centos-7/翻譯:馮振華

轉載地址:http://www.linuxprobe.com/centos7-install-use-zfs/

http://xxxxxx/Linuxjc/1134323.html TechArticle

Copyright © Linux教程網 All Rights Reserved