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。
為了對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 errorsiostat
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