zfs鏡像功能測試

4 月底新的 ubuntu22.04 系統發佈的時候,好奇心讓我選擇了 zfs 文件系統,早有耳聞 zfs,後來自己安裝更新 linux 內核 deb 包的時候,發現無法引導系統,彼時有點慌,因爲 zfs 文件系統無法識別,沒辦法只能上網查詢資料,原來因爲開源協議的問題,內核並沒有像 ext4 那樣包含 zfs 的相應處理模塊,有糾紛的話,Oracle 的律師會發律師函。

題外話不多說,既然 ubuntu 官方提供了對應的文件系統選項,加上 bsd 等也選用 zfs 文件系統,肯定有其獨到之處,對於窮苦大衆來說,zfs 的 snapshot 即快照功能絕對夠實用,測試過程如下

1. 先看看基本狀況

 1    ➜  mephisto.cc git:(main) zpool list
 2    NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
 3    bpool  1.88G   244M  1.64G        -         -     1%    12%  1.00x    ONLINE  -
 4    rpool   472G  23.1G   449G        -         -     3%     4%  1.00x    ONLINE  -
 5    ➜  mephisto.cc git:(main) zpool status
 6    pool: bpool
 7    state: ONLINE
 8    config:
 9
10        NAME                                    STATE     READ WRITE CKSUM
11        bpool                                   ONLINE       0     0     0
12        5caca429-191c-f046-b1dc-3167ba2d43fa  ONLINE       0     0     0
13
14    errors: No known data errors
15
16    pool: rpool
17    state: ONLINE
18    config:
19
20        NAME                                    STATE     READ WRITE CKSUM
21        rpool                                   ONLINE       0     0     0
22        1c85b674-1367-5d40-8553-2ba3439be776  ONLINE       0     0     0
23
24    errors: No known data errors
25    ➜  mephisto.cc git:(main) zfs --version
26    zfs-2.1.2-1ubuntu3
27    zfs-kmod-2.1.2-1ubuntu3
28    ➜  mephisto.cc git:(main) zfs list
29    NAME                                               USED  AVAIL     REFER  MOUNTPOINT
30    bpool                                              244M  1.51G       96K  /boot
31    bpool/BOOT                                         243M  1.51G       96K  none
32    bpool/BOOT/ubuntu_o54gp2                           243M  1.51G      243M  /boot
33    rpool                                             23.1G   434G       96K  /
34    rpool/ROOT                                        7.42G   434G       96K  none
35    rpool/ROOT/ubuntu_o54gp2                          7.42G   434G     5.74G  /
36    rpool/ROOT/ubuntu_o54gp2/srv                        96K   434G       96K  /srv
37    rpool/ROOT/ubuntu_o54gp2/usr                       140M   434G       96K  /usr
38    rpool/ROOT/ubuntu_o54gp2/usr/local                 139M   434G      139M  /usr/local
39    rpool/ROOT/ubuntu_o54gp2/var                      1.55G   434G       96K  /var
40    rpool/ROOT/ubuntu_o54gp2/var/games                  96K   434G       96K  /var/games
41    rpool/ROOT/ubuntu_o54gp2/var/lib                  1.51G   434G     1.38G  /var/lib
42    rpool/ROOT/ubuntu_o54gp2/var/lib/AccountsService   112K   434G      112K  /var/lib/AccountsService
43    rpool/ROOT/ubuntu_o54gp2/var/lib/NetworkManager    144K   434G      144K  /var/lib/NetworkManager
44    rpool/ROOT/ubuntu_o54gp2/var/lib/apt              84.4M   434G     84.4M  /var/lib/apt
45    rpool/ROOT/ubuntu_o54gp2/var/lib/dpkg             46.3M   434G     46.3M  /var/lib/dpkg
46    rpool/ROOT/ubuntu_o54gp2/var/log                  41.3M   434G     41.3M  /var/log
47    rpool/ROOT/ubuntu_o54gp2/var/mail                   96K   434G       96K  /var/mail
48    rpool/ROOT/ubuntu_o54gp2/var/snap                    1M   434G        1M  /var/snap
49    rpool/ROOT/ubuntu_o54gp2/var/spool                 116K   434G      116K  /var/spool
50    rpool/ROOT/ubuntu_o54gp2/var/www                    96K   434G       96K  /var/www
51    rpool/USERDATA                                    15.7G   434G       96K  /
52    rpool/USERDATA/mephisto_fmrvh5                    15.7G   434G     15.7G  /home/mephisto
53    rpool/USERDATA/root_fmrvh5                        1.03M   434G     1.03M  /root

2. 確認測試文件 404.jpg 存在

1    ➜  mephisto.cc git:(main) ls -al ~/Pictures/iPhone
2    total 47
3    drwxrwxrwx 2 mephisto mephisto     3 May 29 12:53 .
4    drwxrwxrwx 4 mephisto mephisto     7 May 26 14:49 ..
5    -rw-rw-r-- 1 mephisto mephisto 43408 May 29 12:53 404.jpg

3. 創建鏡像,然後刪除文件, 創建鏡像非常快,秒級

1    ➜  mephisto.cc git:(main) sudo zfs snapshot rpool/USERDATA/mephisto_fmrvh5@9527
2    [sudo] password for mephisto:
3    ➜  mephisto.cc git:(main) rm ~/Pictures/iPhone/404.jpg
4    ➜  mephisto.cc git:(main) ls  ~/Pictures/iPhone/404.jpg
5    ls: cannot access '/home/mephisto/Pictures/iPhone/404.jpg': No such file or directory

4. 再回滾鏡像,搶救被刪除的 404.jpg,實測回滾也非常快,畢竟改動少

1    ➜  mephisto.cc git:(main) sudo zfs rollback rpool/USERDATA/mephisto_fmrvh5@9527
2    ➜  mephisto.cc git:(main) ls ~/Pictures/iPhone/404.jpg
3    /home/mephisto/Pictures/iPhone/404.jpg
4    ➜  mephisto.cc git:(main) echo "nubility"
5    nubility

5. 查看當前有哪些快照,9527 就是剛剛創建的

1    ➜  mephisto.cc git:(main) zfs list -t snapshot
2    NAME                                  USED  AVAIL     REFER  MOUNTPOINT
3    rpool/USERDATA/mephisto_fmrvh5@9527  3.17M      -     15.7G  -

6. 再創建個 9528 的快照, 不重複測試了,文件系統還是很靠譜的

1    ➜  mephisto.cc git:(main) sudo zfs snapshot rpool/USERDATA/mephisto_fmrvh5@9528
2    [sudo] password for mephisto:
3    ➜  mephisto.cc git:(main) ✗ zfs list -t snapshot
4    NAME                                  USED  AVAIL     REFER  MOUNTPOINT
5    rpool/USERDATA/mephisto_fmrvh5@9527  3.98M      -     15.7G  -
6    rpool/USERDATA/mephisto_fmrvh5@9528     0B      -     15.7G  -

另外,zfs 的存儲池 zpools 也很好使用,不需要額外的卷管理系統去使用一個以上的設備,個人創建 NAS 的時可用上,因爲沒有額外的磁盤進行測試,有條件的用戶可以查閱 OpenZFS 或者 Oracle 的相關文檔進行操作

最後修改於: Thursday, October 26, 2023

相關文章:

翻譯: