成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Linux上使用ZFS

運維 系統運維
雖然 ZFS 存在于未來處于風險之中的操作系統中,但是它很容易成為最先進、功能最豐富的文件系統之一。它合并了可變塊大小、壓縮、加密、重復數據刪除、快照、克隆以及(顧名思義)對大容量的支持。了解 ZFS 背后的概念,并了解目前如何在使用用戶空間文件系統(Filesystem in Userspace,FUSE)的 Linux 上使用 ZFS。

本文探究了在 Linux 中使用 ZFS 的兩種方法。第一種使用了用戶空間文件系統(Filesystem in Userspace,FUSE)系統來推動 ZFS 文件系統到用戶空間以便避免許可問題。第二種方法是一個 ZFS 本機端口,用于集成到 Linux 內核,同時避免知識產權問題。

 Linux 與文件系統具有有趣的關系。因為 Linux 是開放式的,所以它往往是下一代文件系統和創新文件系統理念的關鍵開發平臺。兩個有趣的最新示例包括可大規模擴展的 Ceph 和連續快照文件系統 nilfs2(當然,主力文件系統,比如第四個擴展文件系統 [ext4] 的演化)。它還是舊有文件系統的考古遺址 — DOS VFAT、Macintosh(HPFS)、VMS ODS-2 和 Plan-9 的遠程文件系統協議。但是對于您發現在 Linux 內受支持的所有文件系統,有一個因其實現的功能會讓人產生相當大的興趣:Oracle 的 Zettabyte 文件系統(Zettabyte File System,ZFS)。

ZFS 是由 Sun Microsystems(在 Jeff Bonwick 下)設計和開發的,在 2004 年首次公布,并在 2005 年融入 Sun Solaris)。雖然將最流行的開放式操作系統與談論最多的、功能最豐富的文件系統配對在一起是最理想的匹配,但是許可問題制約了集成。Linux 通過 GNU 公共許可證(General Public License,GPL)獲得保護,而 ZFS 是由 Sun 的通用開發和發布許可(Common Development and Distribution License,CDDL)涵蓋的。這些許可協議具有不同的目標并引入了沖突的限制。所幸,這并不意味著您作為 Linux 用戶不能享受 ZFS 及其提供的功能。

ZFS 簡介

將 ZFS 稱為文件系統有點名不副實,因為它在傳統意義上不僅僅是個文件系統。ZFS 將邏輯卷管理器的概念與功能豐富的和可大規模擴展的文件系統結合起來。讓我們開始先探索一些 ZFS 所基于的原則。首先,ZFS 使用池存儲模型,而不是傳統的基于卷的模型。這意味著 ZFS 視存儲為可根據需要動態分配(和縮減)的共享池。這優于傳統模型,在傳統模型中,文件系統位于卷上,使用獨立卷管理器來管理這些資產。ZFS 內嵌入的是重要功能集(如快照、即寫即拷克隆、連續完整性檢查和通過 RAID-Z 的數據保護)的實現。更進一步,可以在 ZFS 卷的頂端使用您自己最喜愛的文件系統(如 ext4)。這意味著您可以獲得那些 ZFS 的功能,如獨立文件系統中的快照(該文件系統可能并不直接支持它們)。

但是 ZFS 不只是組成有用文件系統的功能集合。相反,它是構建出色文件系統的集成和補充功能的集合。讓我們來看看其中的一些功能,然后再看看它們的一些實際應用。

存儲池

正如前面所討論的,ZFS 合并了卷管理功能來提取底層物理存儲設備到文件系統。ZFS 對存儲池(稱為 zpools)進行操作,而不是直接查看物理塊設備,存儲池構建自虛擬驅動器,可由驅動器或驅動器的一部分物理地進行表示。此外,可以動態構造這些池,甚至這些池正在活躍地使用時也可以。

即寫即拷

ZFS 使用即寫即拷模型來管理存儲中的數據。雖然這意味著數據永遠不會寫入到位(從來沒有被覆蓋),而是寫入新塊并更新元數據來引用數據。即寫即拷有利的原因有多個(不僅僅是因為它可以啟用的快照和克隆等一些功能)。由于從來不覆蓋數據,這可以更簡單地確保存儲永遠不會處于不一致的狀態(因為在新的寫入操作完成以后較早的數據仍保留)。這允許 ZFS 基于事務,且更容易實現類似原子操作等的功能。

即寫即拷設計的一個有趣的副作用是文件系統的所有寫入都成為順序寫入(因為始終進行重新映射)。此行為避免存儲中的熱點并利用順序寫入的性能(比隨機寫入更快)。

數據保護

可以使用 ZFS 的眾多保護方案之一來保護由虛擬設備組成的存儲池。您不但可以跨兩個或多個設備(RAID 1)來對池進行鏡像,通過奇偶校驗來保護該池(類似于 RAID 5),而且還可以跨動態帶區寬度(后面詳細介紹)來鏡像池。基于池中設備數量,ZFS 支持各種不同的的奇偶校驗方案。例如,您可以通過 RAID-Z (RAID-Z 1) 來保護三個設備;對于四個設備,您可以使用 RAID-Z 2(雙重奇偶校驗,類似于 RAID6)。對于更大的保護來說,您可以將 RAID-Z 3 用于更大數量的磁盤進行三重奇偶校驗。

為提高速度(不存在錯誤檢測以外的數據保護),您可以跨設備進行條帶化(RAID 0)。您還可以創建條帶化鏡像(來鏡像條帶化設備),類似于 RAID 10。

ZFS 的一個有趣屬性隨 RAID-Z、即寫即拷事務和動態條帶寬度的組合而來。在傳統的 RAID 5 體系結構中,所有磁盤都必須在條帶內具有其自己的數據,或者條帶不一致。因為沒有方法自動更新所有磁盤,所以這可能產生眾所周知的 RAID 5 寫入漏洞問題(其中在 RAID 集的驅動器中條帶是不一致的)。假設 ZFS 處理事務且從不需要寫入到位,則寫入漏洞問題就消除了。此方法的另外一個便捷性體現在磁盤出現故障且需要重建時。傳統的 RAID 5 系統使用來自該集中其他磁盤的數據來重建新驅動器的數據。RAID-Z 遍歷可用的元數據以便只讀取有關幾何學的數據并避免讀取磁盤上未使用的空間。隨著磁盤變得更大以及重建次數的增加,此行為變得更加重要。

校驗和

雖然數據保護提供了在故障時重新生成數據的能力,但是這并不涉及處于第一位的數據的有效性。ZFS 通過為寫入的每個塊的元數據生成 32 位校驗和(或 256 位散列)解決了此問題。在讀取塊時,將驗證此校驗和以避免靜默數據損壞問題。在有數據保護(鏡像或 AID-Z)的卷中,可自動讀取或重新生成備用數據。

在 ZFS 上校驗和與元數據存儲在一起,所以可以檢測并更正錯位寫入 — 如果提供數據保護(RAID-Z)—。

快照和克隆

由于 ZFS 的即寫即拷性質,類似快照和克隆的功能變得易于提供。因為 ZFS 從不覆蓋數據而是寫入到新的位置,所以可以保護較早的數據(但是在不重要的情況下被標記為刪除以逆轉磁盤空間)。快照 就是舊塊的保存以便及時維護給定實例中的文件系統狀態。這種方法也是空間有效的,因為無需復制(除非重新寫入文件系統中的所有數據)。克隆是一種快照形式,在其中獲取可寫入的快照。在這種情況下,由每一個克隆共享初始的未寫入塊,且被寫入的塊僅可用于特定文件系統克隆。

可變塊大小

傳統的文件系統由匹配后端存儲(512 字節)的靜態大小的塊組成。ZFS 為各種不同的使用實現了可變塊大小(通常大小達到 128KB,但是您可以變更此值)。可變塊大小的一個重要使用是壓縮(因為壓縮時的結果塊大小理想情況下將小于初始大小)。除了提供更好的存儲網絡利用外,此功能也使存儲系統中的浪費最小化(因為傳輸更好的數據到存儲需要更少的時間)。

在壓縮以外,支持可變塊大小還意味著您可以針對所期望的特定工作量優化塊大小,以便改進性能。

其他功能

ZFS 并入了許多其他功能,如重復數據刪除(最小化數據重復)、可配置的復制、加密、緩存管理的自適應更換緩存以及在線磁盤清理(標識并修復在不使用保護時可以修復的潛在錯誤)。它通過巨大的可擴展性來實現該功能,支持 16 千兆兆個字節的可尋址存儲(264 字節)。#p#

在 Linux 上使用 ZFS

現在您已經了解了 ZFS 背后的一些抽象概念,讓我們在實踐中看看其中的一些概念。本演示使用了 ZFS-FUSE。FUSE 是一種機制,允許您在沒有內核代碼(除 FUSE 內核模塊和現有的文件系統代碼以外)情況下在用戶空間中實現文件系統。該模塊為用戶和文件系統實現提供從內核文件系統接口到用戶空間的橋梁。首先,安裝 ZFS-FUSE 包(下面的演示針對 Ubuntu)。

安裝 ZFS-FUSE

安裝 ZFS-FUSE 很簡單,尤其是在使用 apt 的 Ubuntu 上。下面的命令行安裝了您開始使用 ZFS-FUSE 所需的一切:

$ sudo apt-get install zfs-fuse

此命令行安裝 ZFS-FUSE 和所有其他依賴包( 我的也需要 libaiol),為新的程序包執行必要的設置并啟動 zfs-fuse 守護進程。

使用 ZFS-FUSE

在此演示中,您使用環回設備以便在主機操作系統內將磁盤仿真為文件。要開始此操作,請通過 dd 實用程序(參見清單 1)創建這些文件(使用 /dev/zero 作為源)。在創建了四個磁盤映像之后,使用 losetup 將磁盤映像與環路設備關聯在一起。

清單 1. 使用 ZFS-FUSE 的設置

$ mkdir zfstest
$ cd zfstest
$ dd if=/dev/zero of=disk1.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 1.235 s, 54.3 MB/s
$ dd if=/dev/zero of=disk2.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 0.531909 s, 126 MB/s
$ dd if=/dev/zero of=disk3.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 0.680588 s, 98.6 MB/s
$ dd if=/dev/zero of=disk4.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 0.429055 s, 156 MB/s
$ ls
disk1.img disk2.img disk3.img disk4.img
$ sudo losetup /dev/loop0 ./disk1.img
$ sudo losetup /dev/loop1 ./disk2.img
$ sudo losetup /dev/loop2 ./disk3.img
$ sudo losetup /dev/loop3 ./disk4.img
$

有了四臺設備作為您的 ZFS 塊設備(總大小 256MB),使用 zpool 命令來創建您的池。您可以使用 zpool 命令來管理 ZFS 存儲池,不過您將看到,您可以將其用于各種其他目的。下面的命令要求通過四個設備創建 ZFS 存儲池并通過 RAID-Z 提供數據保護。在此命令后為一個列表請求,以便提供您池中的數據(參見清單 2)。

清單 2. 創建 ZFS 池

$ sudo zpool create myzpool raidz /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzpool 96.5K 146M 31.4K /myzpool
$

您還可以研究池的一些屬性,如清單 3 所示,其代表默認值。對于其他事項,您可以查看可用容量和已使用的部分。(為了簡潔,此代碼已經被壓縮。)

清單 3. 查看存儲池的屬性

$ sudo zfs get all myzpool
NAME PROPERTY VALUE SOURCE
myzpool type filesystem -
myzpool creation Sat Nov 13 22:43 2010 -
myzpool used 96.5K -
myzpool available 146M -
myzpool referenced 31.4K -
myzpool compressratio 1.00x -
myzpool mounted yes -
myzpool quota none default
myzpool reservation none default
myzpool recordsize 128K default
myzpool mountpoint /myzpool default
myzpool sharenfs off default
myzpool checksum on default
myzpool compression off default
myzpool atime on default
myzpool copies 1 default
myzpool version 4 -
...
myzpool primarycache all default
myzpool secondarycache all default
myzpool usedbysnapshots 0 -
myzpool usedbydataset 31.4K -
myzpool usedbychildren 65.1K -
myzpool usedbyrefreservation 0 -
$

現在,讓我們實際使用 ZFS 池。首先,在您的池中創建目錄,然后在該目錄中啟用壓縮(使用 zfs set 命令)。其次,將文件復制到其中。我已經選擇了大小 120KB 左右的文件來查看 ZFS 壓縮的效果。請注意您的池掛載在根目錄上,因此就像您的根文件系統內的目錄一樣加以處理。一旦復制該文件,您就可以列出它來表示文件已存在(但與原來同樣大小)。通過使用 dh 命令,您可以看到文件大小為原來的一半,這說明 ZFS 已經將其壓縮。您還可以查看 compressratio 屬性,了解您的池有多少已經被壓縮(使用默認壓縮程序,gzip)。清單 4 顯示了該壓縮。

清單 4. 演示 ZFS 壓縮

$ sudo zfs create myzpool/myzdev
$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzpool 139K 146M 31.4K /myzpool
myzpool/myzdev 31.4K 146M 31.4K /myzpool/myzdev
$ sudo zfs set compression=on myzpool/myzdev
$ ls /myzpool/myzdev/
$ sudo cp ../linux-2.6.34/Documentation/devices.txt /myzpool/myzdev/
$ ls -la ../linux-2.6.34/Documentation/devices.txt
-rw-r--r-- 1 mtj mtj 118144 2010-05-16 14:17 ../linux-2.6.34/Documentation/devices.txt
$ ls -la /myzpool/myzdev/
total 5
drwxr-xr-x 2 root root 3 2010-11-20 22:59 .
drwxr-xr-x 3 root root 3 2010-11-20 22:55 ..
-rw-r--r-- 1 root root 118144 2010-11-20 22:59 devices.txt
$ du -ah /myzpool/myzdev/
60K /myzpool/myzdev/devices.txt
62K /myzpool/myzdev/
$ sudo zfs get compressratio myzpool
NAME PROPERTY VALUE SOURCE
myzpool compressratio 1.55x -
$

最后,讓我們看看 ZFS 的自修復功能。請回想在您創建池時,您要求四個設備具有 RAID-Z。通過使用 zpool status 命令您可以檢查池的狀態, 如清單 5 所示。如清單所示,您可以看到池的元素(RAID-Z 1 以及四個設備)。

清單 5. 檢查池狀態

$ sudo zpool status myzpool
pool: myzpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
myzpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
loop3 ONLINE 0 0 0
errors: No known data errors
$

現在,讓我們強制執行一個錯誤到池中。對于此演示來說,轉到后臺并損壞組成設備的磁盤文件(disk4.img,通過 loop3 設備顯示在 ZFS 中)。使用 dd 命令將整個設備清零(參見清單 6)。

清單 6. 損壞 ZFS 池

$ dd if=/dev/zero of=disk4.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 1.84791 s, 36.3 MB/s
$

ZFS 目前未意識到損壞,但是您可以通過請求池的清理,強制池發現問題。如清單 7 所示,ZFS 現在認識到(loop3 設備的)損壞并建議操作以便替換該設備。還請注意在 ZFS 通過 RAID-Z 自我更正時,池仍然在線,您仍然可以訪問您的數據。

清單 7. 清理并檢查池

$ sudo zpool scrub myzpool
$ sudo zpool status myzpool
pool: myzpool
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://www.sun.com/msg/ZFS-8000-4J
scrub: scrub completed after 0h0m with 0 errors on Sat Nov 20 23:15:03 2010
config:
NAME STATE READ WRITE CKSUM
myzpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
loop3 UNAVAIL 0 0 0 corrupted data
errors: No known data errors
$ wc -l /myzpool/myzdev/devices.txt
3340 /myzpool/myzdev/devices.txt
$

根據建議,引入新的設備到您的 RAID-Z 集以便充當新的容器。首先創建新的磁盤映像并通過 losetup 將其表示為設備。請注意此過程類似于將新的物理磁盤添加到集。然后,您使用 zpool replace 用新的設備(loop4)交換已損壞的設備(loop3)。檢查池狀態,您可以看到新設備具有一條消息,指示其上重新構建了數據(稱為 resilvering)以及移到那里的數據量。還請注意池仍保持在線,沒有錯誤(對用戶可見)。最后,再次清理池;在檢查其狀態以后,您將看不到存在問題,如清單 8 所示。

清單 8. 使用 zpool replace 修復池

$ dd if=/dev/zero of=disk5.img bs=64M count=1
1+0 records in
1+0 records out
67108864 bytes (67 MB) copied, 0.925143 s, 72.5 MB/s
$ sudo losetup /dev/loop4 ./disk5.img
$ sudo zpool replace myzpool loop3 loop4
$ sudo zpool status myzpool
pool: myzpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Sat Nov 20 23:23:12 2010
config:
NAME STATE READ WRITE CKSUM
myzpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
loop4 ONLINE 0 0 0 59.5K resilvered
errors: No known data errors
$ sudo zpool scrub myzpool
$ sudo zpool status myzpool
pool: myzpool
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Sat Nov 20 23:23:23 2010
config:
NAME STATE READ WRITE CKSUM
myzpool ONLINE 0 0 0
raidz1 ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
loop4 ONLINE 0 0 0
errors: No known data errors
$

此簡短演示探究了通過文件系統進行的卷管理的整合,并展示了管理 ZFS(即使是故障時)有多簡單。#p#

其他 Linux-ZFS 可能性

FUSE 中 ZFS 的優點是易于開始使用 ZFS,但是它的缺點是效率低。這種效率上的缺點是每個 I/O 都要求多個用戶內核轉換的結果。但是考慮到 ZFS 的流行,有另外一種提供更好性能的選項。

針對 Linux 內核的 ZFS 本地端口正在 Lawrence Livermore 國家實驗室中處于順利開發當中。雖然此端口仍然缺乏一些元素,如 ZFS 便攜式操作系統接口(適用于 UNIX®) 層,但是這正在開發中。其端口提供大量有用的功能,尤其是當您有興趣與 Lustre 一起使用 ZFS 時。(要了解更多細節,參閱 參考資料。)

前景展望

希望本文已經引起您進一步挖掘 ZFS 的欲望。從早前的演示中,您可以容易地設置 ZFS 并在大多數 Linux 發行版中運行 — 甚至是在擁有一些限制的內核中。雖然快照和克隆等主題并未在此處演示,但是 參考資料 部分提供了有關此主題的有趣的文章的鏈接。最后,Linux 和 ZFS 是最先進的技術,很難將它們分開。

原文連接:http://www.ibm.com/developerworks/cn/linux/l-zfs/index.html?ca=drs-

【編輯推薦】

  1. ZFS文件系統團隊領導者宣布離開Oracle
  2. Oracle SPARC、Solaris和ZFS的核心功能分析
  3. ZFS文件系統:Linux,讓我們約會在9月
  4. 輕松玩轉Solaris ZFS文件系統的備份恢復

 

責任編輯:黃丹 來源: IBMDW
相關推薦

2020-10-26 12:30:23

LinuxyumZFS

2019-11-21 09:45:30

UbuntuUbuntu 19.1ZFS文件系統

2019-12-05 10:30:17

LinuxMultitail

2018-02-25 09:48:36

LinuxUbuntu文件系統

2020-04-10 09:56:12

at命令Linux安排任務

2021-08-19 18:28:22

FedoraLinuxOpenCV

2019-12-09 14:50:44

LinuxWindow Make桌面

2019-12-20 08:50:21

LinuxKsnip截圖

2018-02-26 08:14:20

LinuxDocker容器

2020-05-09 12:01:40

Linux開源軟件SDN

2021-07-12 17:45:25

LinuxTealdeer手冊頁

2023-10-15 14:53:22

Arch LinuxYay

2022-07-26 10:13:11

LinuxGNOMERhythmbox

2018-09-13 08:00:00

LinuxNetplan網絡配置

2018-03-19 19:00:54

2022-01-18 17:57:21

PodmanLinux容器

2021-09-17 10:51:01

Linuxlspci命令

2018-11-02 08:10:58

Linuxsystemd定時器

2021-09-10 10:35:25

Linuxstat命令文件系統

2010-07-02 12:58:39

Meego開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区中文字幕 | 日本一区二区高清不卡 | 亚洲国产网站 | 黄色免费在线观看网站 | 在线色 | 国产精品久久二区 | 日韩第一区 | 亚洲伊人a | 国产精品高 | 伊人网在线播放 | 欧美高清视频一区 | 青青久久久| 亚洲一区国产精品 | 国产www成人 | 欧美亚洲另类丝袜综合网动图 | 人人澡视频 | 嫩草最新网址 | 正在播放一区二区 | 国产精品久久久久久久午夜片 | 天天综合国产 | 久久伊人亚洲 | 日韩免费视频一区二区 | av片免费观看 | 在线观看国产视频 | 麻豆成人在线视频 | 美女视频黄的免费 | 国产高清在线观看 | 女女百合av大片一区二区三区九县 | 午夜寂寞影院在线观看 | 日韩电影a | 国产精品视频网 | 伊人天堂网 | 午夜一区 | 日日操操| 欧美一级片在线 | 久久免费小视频 | 国产视频一区二区 | 成在线人视频免费视频 | 精品久久久久久久久久久久久久久久久 | 欧美亚洲另类在线 | www亚洲免费国内精品 |