ZFS 檔案系統筆記(1)

#zfs #filesystems #freebsd

ZFS 是一個注重資料完整性(data integrity)的檔案系統,也支援磁碟陣列、檔案系統快照(snapshot)、支援大容量磁碟等特色。ZFS 最早是在昇陽(Sun Inc.) Solaris 作業系統上所開發,但昇陽被甲骨文(Oracle Inc.)併購後,轉成開源的 Open Solaris 作業系統[1]。而眾多 Unix-like 的作業系統也支援 ZFS,例如 Freebsd, Linux, MacOS 等,但社群 在 2013 年 9 月也將 ZFS 移植並創建 OpenZFS 專案繼續維護 ZFS。FreeBSD 在 9.

ZFS 主要的設計目標

  1. 資料完整性,所有的資料都會用雜湊演算法計算出確認索引值(checksum),因此只要檔案有變動或出現錯誤,確認索引值即會不同,這對於裝置上的資料完整性是很好的保障。
  2. 資料儲池(pool),(這就是大水庫理論啦(誤XD)) 傳統檔案系統都是以資料儲存裝置為一個基本單位,啟始資料儲存裝置需要新建立分割區、格式化等工作,在一般的 UNIX 上面需要寫入檔案系統表(fstab),一但需要增加空間或修改則十分麻煩。所以 ZFS 設計上以資料儲池為一個單位,若要增加儲存裝置為鏡映、RAID或是修改都較容易
  3. 效能,支援先進的儲存裝置快取功能,包括 adaptive replacement cache (ARC)、L2ARC、ZIL

我為什麼要使用 ZFS?

  1. 因為宅宅都用跟人家不一樣的檔案系統,既然都用 FreeBSD 了, 內建 ZFS 好物不用嗎(而且現在 10.1-RELEASE 連 root filesystem 都可以直接支援 ZFS 開機了
  2. 和傳統 unix 檔案系統比較,以 UFS (unix file system) 為例,在檔案發生問題(file corruption)時, 使用磁碟掃描(fsck)修復時需要將磁碟卸載為離線狀態,才能修正,而且一般的 fsck 只能針對檔案系統的 metadata 修正,若檔案真的爛掉,是無法救回的。像是我們每年都會停電檢修(忘記關機),要不然偶爾就來個跳電,雖然 FreeBSD 有 background fsck 功能,但就有時還是得進入 single user mode 開個 fsck 修一下
  3. 對於沒錢買許多硬碟的人來說,一但硬碟壞掉很麻煩,即使有 RAID ,rebuild 也很麻煩
  4. 支援檔案系統快照,這個功能非常好用,如果你有用過虛擬機器(virtual machine),這個功能在各大虛擬機器軟體(virtualbox, vmware, etc.)都有類似的功能
  5. 備份很方便啊,建立檔案快照,儲存在另一個裝置或是壓縮丟遠端都可以
  6. 支援 jail!

名詞解釋

dataset(數據集): zfs 檔案系統內元件的通稱,包含複本(clone)、檔案系統、檔案系統快照等
pool(儲池): 資料置放區稱之為資料儲池(zfs storage pool)
mirror(鏡映): 同時儲存資料於兩個及以上之裝置,相當於傳統磁碟陣列中的 RAID1
resilvering(銀鹽複製): 將資料從一個裝置複製到另一個裝置,在 zfs 中稱"resilvering"
scrub(刷洗): 相對於傳統 unix 檔案系統的 fsck,ZFS 稱之為 scrub,若使用 scrub,ZFS 會去檢查儲存資料的確認索引值並修正有誤的

安裝

目前 FreeBSD 10.1-RELEASE 已支援 zfs 於 root filesystem,在預設安裝系統中可選擇 guided zfs,按照指示進行即可

常用指令

1. 建立資料儲存池(zpool create pool)

用法:zpool create poolname DeviceNode

root@m15 ~ # zpool create wd1t da1

在 /dev/da5 上建立名為 jetflash64 的儲存池,並掛載於 /jetflash64 (-m mount)

root@m15 ~ # zpool create -m /jetflash64 jetflash64 da5

顯示現在有的 zpool

root@m15 ~ # zpool list
NAME     SIZE  ALLOC   FREE   FRAG  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
jetflash64  58.5G    79K  58.5G     0%         -     0%  1.00x  ONLINE  -
zroot        928G  4.83G   923G     0%         -     0%  1.00x  ONLINE  -

2. 刪除資料儲存池

zpool destroy _poolname_

3. 檔案系統快照

ZFS 一個特點就是具有檔案系統快照的功能,可以在任意時間點建立檔案系統快照

zfs snapshot zpoolname@snapshot

列出現有的檔案系統快照

zfs list -t snapshot

回溯檔案系統快照至 20141226

zfs rollback -r zpoolname/home@20141226

ZFS 說明非常詳盡,有興趣的人可以讀一下,之後我把 manual 裡頭的一些範例翻譯出來再給各位參考(續)

參考資料
[1] Open Solaris https://solaris.java.net
[2] OpenZFS http://open-zfs.org/
[3] Wikipedia 關於 ZFS 說明 http://en.wikipedia.org/wiki/ZFS
[4] FreeBSD 使用者手冊中的 ZFS 說明 https://www.freebsd.org/doc/handbook/zfs.html
[5] ZFS tutorial http://thegeekdiary.com/zfs-tutorials-creating-zfs-snapshot-and-clones/
[6] http://article.denniswave.com/9218
[7] http://article.denniswave.com/9221

Comments

comments powered by Disqus