您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何在linux中安裝和使用ZFS的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
ZFS文件系統(tǒng)的英文名稱為Zettabyte File System,也叫動態(tài)文件系統(tǒng)(Dynamic File System),是第一個128位文件系統(tǒng)。
ZFS是一種先進的、高度可擴展的文件系統(tǒng),最初是由Sun Microsystems開發(fā)的,現(xiàn)在OpenZFS是項目的一部分。有這么多文件系統(tǒng)可用在Linux上,那自然要問ZFS有什么特別之處。不同于其它文件系統(tǒng),它不僅是一個文件系統(tǒng)邏輯卷管理器。ZFS使其受歡迎的特性是:
\1. 數(shù)據(jù)完整性——數(shù)據(jù)一致性和完整性通過即寫即拷和校驗技術保證。 \2. 存儲空間池——可用存儲驅動器一起放入稱為zpool的單個池。 \3. 軟件RAID ——像發(fā)出一個命令一樣,建立一個raidz數(shù)組。 \4. 內置的卷管理器——ZFS充當卷管理器。 \5. Snapshots、克隆、壓縮——這些都是一些ZFS提供的高級功能。
在本指南中,我們將學習在CentOS 7服務器上如何安裝、設置和使用一些重要的ZFS命令。
在我們繼續(xù)之前,讓我們了解一些ZFS的常用的術語。 Pool:存儲驅動器的邏輯分組,它是ZFS的基本構建塊,從這里將存儲空間分配給數(shù)據(jù)集。 Datasets:ZFS文件系統(tǒng)的組件即文件系統(tǒng)、克隆、快照和卷被稱為數(shù)據(jù)集。 Mirror:一個虛擬設備存儲相同的兩個或兩個以上的磁盤上的數(shù)據(jù)副本,在一個磁盤失敗的情況下,相同的數(shù)據(jù)是可以用其他磁盤上的鏡子。 Resilvering:在恢復設備時將數(shù)據(jù)從一個磁盤復制到另一個磁盤的過程。 Scrub:擦除用于一致性檢驗在ZFS像在其他文件系統(tǒng)如何使用fsck。
為了對CentOS安裝ZFS,我們需要先安裝支持包EPEL倉庫,然后在ZFS存儲庫上安裝所需的ZFS包。
yum localinstall --nogpgcheck http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum localinstall --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
現(xiàn)在安裝內核開發(fā)和zfs包,內核開發(fā)的軟件包是需要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 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 listno datasets available
ZFS主要有兩個工具,zpool和ZFS。zpool處理使用磁盤實用程序創(chuàng)建和維護ZFS池負責數(shù)據(jù)的創(chuàng)建和維護。
zpool utility
創(chuàng)建和銷毀池 首先驗證可用的磁盤創(chuàng)建一個存儲池。
[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
創(chuàng)建一個池的驅動器。
zpool create # zpool create -f zfspool sdc sdd sde sdf
zpool狀態(tài)的命令顯示可用池的狀態(tài)。
[root@li1467-130 ~]# zpool statuspool: 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
驗證如果池創(chuàng)建成功。
[root@li1467-130 ~]# df -hFilesystem 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創(chuàng)造了一個池的名字zfspool大小3.7 GB的空間,同時掛載在/ zfspool。 用命令 ‘zpool destroy’ 銷毀一個地址池:
zpool destroy[root@li1467-130 ~]# zpool destroy zfspool[root@li1467-130 ~]# zpool statusno pools available
現(xiàn)在讓我們嘗試創(chuàng)建一個簡單的鏡像池。
zpool create mirror ...
通過重復關鍵字的驅動器我們可以創(chuàng)建多個鏡像。
[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
在上面的例子中,我們創(chuàng)建了每兩個磁盤鏡像池。 同樣的,我們可以創(chuàng)建一個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
一旦創(chuàng)建一個池,從池中可以添加或刪除熱備件和緩存設備,從鏡像池和替換設備中連接或者分離。但是冗余和raidz設備不能從池中刪除。我們將看到如何在這一節(jié)中執(zhí)行這些操作。 我首先創(chuàng)建一個池稱為“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
當設備發(fā)生故障或損壞,我們可以使用replace命令替換它。
zpool replace
在鏡像配置當中我們將爆力的測試一個設備。
[root@li1467-130 ~]# zpool create -f testpool mirror sdd sde
這將創(chuàng)建一個鏡像磁盤池組成的SDD和SDE?,F(xiàn)在,讓我們故意損壞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
現(xiàn)在我們用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
我們可以使用導出和導入命令在不同的主機之間遷移存儲池。對于這個,在池中使用的磁盤應該從兩個系統(tǒng)中可用。
[root@li1467-130 ~]# zpool export testpool[root@li1467-130 ~]# zpool statusno pools available
zpool import命令列出所有可以利用的池。執(zhí)行這個系統(tǒng)命令,你想要導入的池。
[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
現(xiàn)在導入要求的池。
[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統(tǒng)計。
[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---------- ----- ----- ----- ----- ----- -----
我們現(xiàn)在會移動到ZFS utility。在這里,我們將看看如何創(chuàng)建、銷毀數(shù)據(jù)集、文件系統(tǒng)壓縮、配額和快照。
創(chuàng)建和銷毀文件系統(tǒng)
ZFS文件系統(tǒng)可以使用ZFS創(chuàng)建命令創(chuàng)建
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
從上面的輸出注意到,在文件系統(tǒng)創(chuàng)建時盡管沒有掛載點,掛載點創(chuàng)建時使用相同的路徑關系池。 ZFS創(chuàng)建允許使用-o選項可以指定使用像掛載點,壓縮、定額、執(zhí)行等。 你可以列出可用的文件系統(tǒng)使用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
我們用銷毀選項銷毀文件系統(tǒng)。 zfs destroy
現(xiàn)在我們將了解在ZFS怎樣壓縮,在我們開始使用壓縮之前,我們需要使它使用“設置壓縮”。
zfs set
一旦這樣做,壓縮和解壓縮將以透明模式發(fā)生在文件系統(tǒng)上面。 在我們的示例中,我將使學生目錄使用lz4壓縮算法壓縮。
[root@li1467-130 ~]# zfs set compression=lz4 testpool/students
我現(xiàn)在要復制一個文件到該文件系統(tǒng)大小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 on testpool/students 100M 1.7M 99M 2% /testpool/students
注意,使用文件系統(tǒng)的大小僅為1.7m,文件大小為15m,我們可以檢查壓縮比。
[root@li1467-130 ~]# zfs get compressratio testpoolNAME PROPERTY VALUE SOURCE testpool compressratio 9.03x
配額和預訂
讓我用一個真實的例子來解釋配額。假設我們有一個要求,在一所大學,以限制磁盤空間使用的文件系統(tǒng)為教授和學生。讓我們假設我們需要分配給教授和學生分為1GB和100MB。我們可以利用“配額”在ZFS來滿足這一要求。配額確保文件系統(tǒng)使用的磁盤空間的數(shù)量不超過規(guī)定的限度。保留有助于在實際分配和保證所需的磁盤空間的數(shù)量是可用的文件系統(tǒng)。
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 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 listNAME 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
在上面的例子中,我們已經(jīng)給教授和學生為1GB與100MB。觀察ZFS列表結果,最初,他們有2.67gb每個的大小和設置配額,價值也隨之發(fā)生了相應的變化。
快照是在某個時間點的ZFS文件系統(tǒng)的只讀副本。他們不在ZFS池消耗任何額外的空間。我們可以回滾到相同的狀態(tài),在稍后的階段,按用戶要求或僅提取一個單一的或一組文件。 我現(xiàn)在就從我們前面的例子,然后在在testpool/professors把這個文件系統(tǒng)快照創(chuàng)建一些目錄和文件。
[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 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 [root@li1467-130 professors]# zfs snapshot testpool/professors@03-2016[root@li1467-130 professors]# zfs list -t snapshotNAME USED AVAIL REFER MOUNTPOINT testpool/professors@03-2016 0 - 20.5K
我現(xiàn)在將刪除創(chuàng)建的文件和提取的快照。
[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 MOUNTPOINT testpool/professors@03-2016 10.5K - 20.5K -
最后,讓我們使用zfs摧毀命令銷毀快照:
zfs destroy [root@li1467-130 ~]# zfs destroy testpool/professors@03-2016[root@li1467-130 ~]# zfs list -t snapshotno datasets available
感謝各位的閱讀!關于“如何在linux中安裝和使用ZFS”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。