• slider image 168
:::
條列式新聞
新聞載入中,請稍後...

9-3-5 Snapshot 備份/使用 replication

這個方式很簡單也很實用
https://www.howtoforge.com/tutorial/how-to-use-snapshots-clones-and-replication-in-zfs-on-linux/

http://blog.hychen.org/archives/2013/08/09/87/zfs-%E7%9A%84-snapshot-%E5%82%99%E4%BB%BD/

 

在Linux 下如何使用 ZFS 快照(snapshots), clones 和 replication

ZFS Snapshots - 概述

快照是ZFS最強大的功能之一,快照提供了唯讀, 檔案系統的時間點副本,而且在 zfs pool 裡不佔用額外的空間. The snapshot uses only space when the block references are changed. 快照通過僅記錄當前數據集與先前版本之間的差異來保留磁盤空間。

用於快照的典型範例是當執行類似軟體安裝或系統升級等危險動作時具有快速備份檔案系統當前狀態的方式。

建立/刪除 ZFS Snapshot

無法直接查看快照,但可以 cloned, backed和 rolled back 快照。 創建和銷毀ZFS快照非常容易,我們可以使用zfs snapshot和zfs destroy命令。

Create a pool called pool2T1.
建立一個名為 datapool 的 pool2T1

# zpool create pool2T1 mirror /dev/sdb /dev/sdc
# zpool list
NAME       SIZE     ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool2T1    1.98G    65K        1.98G         -                 0%        0%    1.00x    ONLINE      -

 

現在有一個叫做 pool2T1的 pool, 接下來我們要建立一個 ZFS 檔案系統來模擬快照功能.

# zfs create pool2T1/docs -o mountpoint=/docs
# zfs list -r pool2T1
N
AME            USED  AVAIL  REFER  MOUNTPOINT
datapool       93.5K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs

要建立這個檔案系統的快照, 我們可以透過指定池和快照名稱來使用zfs snapshot命令我們可以使用 -r 選項讓這個pool底下所有的分割區同時都建立快照. 快照名稱必須滿足以下命名要求:

filesystem@snapname
volume@snapname

# zfs snapshot pool2T1/docs@version1
# zfs list -t snapshot
NAME                                  USED  AVAIL  REFER  MOUNTPOINT
pool2T1/docs@version1      0          -           19.5K     -

pool2T1/docs 的快照已經建立完成.

刪除快照,我們可以手動使用 zfs destroy 指令來完成.

# zfs destroy datapool/docs@version1
# zfs list -t snapshot
no datasets available

快照的滾回(Rolling back)

在這個模擬中, 我們需要在 /docs 目錄裡建立測試檔案.

# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1

建立快照

# zfs snapshot pool2T1/docs@version1
# zfs list -t snapshot
NAME                                 USED  AVAIL  REFER  MOUNTPOINT
pool2T1/docs@version1     9K        -          19.5K      -

現在我們變更 /docs/data.txt 這個檔案的內容

# echo "version 2" > /docs/data.txt
# cat /docs/data.txt
version 2

我們可以完全回覆到某一個時間點所做的快照副本(就像大雄的時光機一樣).

# zfs list -t snapshot
NAME                              USED  AVAIL  REFER  MOUNTPOINT
pool2T1/docs@version1  9.50K      -        19.5K     -
# zfs rollback pool2T1/docs@version1
# cat /docs/data.txt
version 1

正如我們所看到的,data.txt的內容回到以前的內容。

如果我們要重新命名快照,我們可以使用zfs rename命令。

# zfs rename pool2T1/docs@version1 pool2T1/docs@version2
# zfs list -t snapshot
NAME                              USED  AVAIL  REFER  MOUNTPOINT
pool2T1/docs@version2  9.50K    -          19.5K     -

注意:如果存在此數據集的快照,則無法銷毀數據集,但我們可以使用-r選項覆蓋該數據集。

# zfs destroy pool2T1/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
pool2T1/docs@version2

# zfs destroy -r pool2T1/docs
# zfs list -t snapshot
no datasets available

 

ZFS Clones 概述

克隆是可寫卷或檔案系統,其初始內容與創建它的數據集相同。

 

建立及刪除 ZFS Clone

只能從快照創建 Clone,
當一個快照被建立 Clone 後,這個快照只能在這個 Clone 被刪除後,才刪除原來的快照.
要創建快照,請使用 zfs clone 指令.

# zfs create pool2T1/docs -o mountpoint=/docs
# zfs list -r pool2T1
NAME              USED  AVAIL  REFER  MOUNTPOINT
pool2T1            93.5K  1.92G    19K         /datapool
pool2T1/docs    19K     1.92G    19K         /docs

# mkdir /docs/folder{1..5}
# ls /docs/
folder1  folder2  folder3  folder4  folder5

# zfs snapshot pool2T1/docs@today
# zfs list -t snapshot
NAME                        USED  AVAIL  REFER  MOUNTPOINT
pool2T1/docs@today      0        -          19K        -

現在可以使用這個快照 pool2T1/docs@today 來建立 clone.

# zfs clone pool2T1/docs@today pool2T1/pict
# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
pool2T1            166K    1.92G    19K     /pool2T1
poo2T1l/docs    19K     1.92G    19K     /docs
pool2T1/pict      1K       1.92G    19K     /pool2T1/pict

這個 cloning 程序已經完成, 快照 pool2T1/docs@today 已經 cloned 到 /pool2T1/pict. 
當我們檢查 /pool2T1/pict 的內容時,內容應該與 /pool2T1/docs 目錄相同.

# ls /datapool/pict
folder1  folder2  folder3  folder4  folder5

在刪除  pool2T1/pict 前, pool2T1/docs 無法被刪除.

# zfs destroy datapool/docs@today
cannot destroy 'pool2T1/docs@today': snapshot has dependent clones
use '-R' to des
troy the following datasets:
datapool/pict
無法刪除 'pool2T1/docs@today': 快照已經被 Clone
使用 '-R' 選項以強制刪除下列面的 datasets:
datapool/pict


 

# zfs destroy datapool/pict

最後我們可以銷毀快照。

# zfs destroy pool2T1/docs@today
# zfs list -t snapshot
no datasets available

 

ZFS Replication概述

ZFS replication 的基礎是快照(snapshot), 我們隨時可以建立快照,並且可以建立儘可能多的快照. 通過不斷創造,轉移恢復快照,可以在不同的主機間同步.
ZFS提供了一個內置的序列化功能 ---它可以將數據的流表示發送到標準輸出(that can send a stream representation of the data to standard output).

ZFS Replication 設定

在這一節中, 我將向您展示如何將數據集(data set)從數據池複製(replicate)到backuppool,但是不僅可以將數據存儲在連接到本地系統的另一個池上,而且可以通過網絡將其發送到另一個系統。
用於複製數據的命令是zfs send和zfs receive。


另外建立一個名為 backuppool 的pool

# zpool create backuppool mirror sde sdf

# zpool list
NAME         SIZE     ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
backuppool  1.98G     50K      1.98G         -              0%       0%     1.00x   ONLINE     -
datapool      1.98G     568K     1.98G         -              0%       0%     1.00x   ONLINE     -

檢查 pool 狀態:

# zpool status
  pool: datapool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0       0          0
        mirror-0     ONLINE       0       0          0
        sdb            ONLINE       0       0          0
        sdc            ONLINE       0       0          0

errors: No known data errors

  pool: backuppool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        backuppool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0

errors: No known data errors


 

建立一個我們要複製(replicate)的 dataset.

# zfs snapshot datapool/docs@today
# zfs list -t snapshot
NAME                  USED  AVAIL  REFER  MOUNTPOINT
datapool/docs@today      0      -    19K  -
# ls /docs/
folder1  folder2  folder3  folder4  folder5

It's time to do the replication.

# zfs send datapool/docs@today | zfs receive backuppool/backup
(跨主機則使用
zfs send datapool/docs@today |  ssh host  zfs receive backuppool/backup
)
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
backuppool           83K  1.92G    19K  /backuppool
backuppool/backup    19K  1.92G    19K  /backuppool/backup
datapool            527K  1.92G    19K  /datapool
datapool/docs        19K  1.92G    19K  /docs

# ls /backuppool/backup
folder1  folder2  folder3  folder4  folder5

The dataset datapool/docs@today has been successfully replicated to backuppool/backup.

To replicate a dataset to another machine, we can use the command below:

# zfs send datapool/docs@today | ssh otherserver zfs recv backuppool/backup

Done.

 

結論

快照,克隆和復制是ZFS最強大的功能。
快照用於創建文件系統或卷的時間點副本,
克隆用於創建重複數據集,
複製用於將數據集從一個數據池複製到同一計算機上的另一個數據池,或者將數據池複製到不同的 機器。

 


:::
展開 | 闔起

文章類別

書籍目錄

展開 | 闔起

線上使用者

8人線上 (8人在瀏覽線上書籍)

會員: 0

訪客: 8

更多…