溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在linux中安裝和使用ZFS

發(fā)布時間:2022-02-18 11:18:04 來源:億速云 閱讀:500 作者:小新 欄目:開發(fā)技術

這篇文章給大家分享的是有關如何在linux中安裝和使用ZFS的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

ZFS文件系統(tǒng)的英文名稱為Zettabyte File System,也叫動態(tài)文件系統(tǒng)(Dynamic File System),是第一個128位文件系統(tǒng)。

如何在linux中安裝和使用ZFS

ZFS優(yōu)勢

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。

安裝ZFS

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

在ZFS池管理設備

一旦創(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----------   -----     -----           -----          -----               -----  -----

zfs utility

我們現(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”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI