︿
Top

1、前言

File System Snapshots-檔案系統快照,顧名思義就是將當時的檔案系統照一張像,當我們想要用的時候可以隨時拿出來用,拿來備份也不失為一個好的方法,整個過程大概就是利用指令將指定的分割區 (Mount Point) 快照起來,之後利用 MD (Memory Disk) 裝置把快照檔案模擬成檔案系統讓我們查看當時快照下來的檔案系統。


下列,為執行 File System Snapshots 之前所要注意事項如下:

  • 一個檔案系統中最多只能擁有 20 個檔案系統快照。
  • 快照只能針對獨立的分割區作用 (ex. /dev/ad0s1g /home)。
  • 在執行檔案系統快照時檔案只能存放於該檔案系統 (ex. /var/snapshot /var),當快照 (Snapshots) 完畢後才可進行搬移。
  • 快照出來的檔案你會發現跟分割區大小一樣 (若在原分割區並不會佔用到什麼空間的)。
  • 若將快照檔案複製到其它分割區就會佔用跟該分割區一樣的實際空間了。
  • 若是快照根目錄 (/),則當 mount 來用時會發現其它分割區內是空的 (ex./var、/usr)。
  • 可以使用 rm 來刪除快照檔案。



文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.使用 mount 或 mksnap_ffs 建立 Snapshot
          步驟2.掛載快照檔案
          步驟3.卸載快照檔案
          步驟4.尋找分割區內所有的 snapshot
4、參考



2、實作環境

  • FreeBSD 6.2-STABLE

實作的檔案系統其 mount point 如下:

Filesystem     Size   Used   Avail   Capacity   Mounted on
/dev/ad0s1a    496M    79M    377M        17%   /
devfs          1.0K   1.0K      0B       100%   /dev
/dev/ad0s1g     63G    43M     58G         0%   /home
/dev/ad0s1e    496M    18K    456M         0%   /tmp
/dev/ad0s1f    7.7G   1.5G    5.6G        21%   /usr
/dev/ad0s1d    1.4G    32M    1.3G         2%   /var




3、安裝及設定

步驟1.使用 mount 或 mksnap_ffs 建立 Snapshot

我們可以使用 mount 或 mksnap_ffs 建立 File System Snapshots,下例為對 /dev/ad0s1g / 進行快照 (/,根目錄),而快照的檔案名稱為 snapshot20070515。
使用 mount 指令
mount -u -o snapshot /snapshot20070515 /
使用 mksnap_ffs 指令
mksnap_ffs / /snapshot20070515
執行快照後可以發現快照檔案大小跟分割區大小竟然一樣?但實際是不佔什麼空間的,但若是將快照檔案搬離其建立的分割區就會佔實際的大小了。
cd / ; ll -h snapshot20070515
 -r--r-----  1 root  operator   512M  5 15 10:48 snapshot20070515

但實際上我的根目錄依然只有使用 79 MB。
Filesystem     Size   Used   Avail   Capacity  Mounted on
/dev/ad0s1a    496M    79M    377M   17%       /
devfs          1.0K   1.0K      0B   100%      /dev
/dev/ad0s1g    63G    4.7M     58G   0%        /home
/dev/ad0s1e    496M    18K    456M   0%        /tmp
/dev/ad0s1f    7.7G   1.5G    5.6G   21%       /usr
/dev/ad0s1d    1.4G    32M    1.3G   2%        /var

查看快照檔案實際佔用空間 (前提是放在該分割區)。
du -sh /snapshot20070515    //可以看到快照檔案實際才佔 480 KB 而以
  480K    /snapshot20070515

把 snapshot20070515 快照檔案複製到 /home 下 (目前 /home 才使用 4.7 MB) 可以發現快照檔案佔用實際分割區大小一樣的空間 (/home 成長到 517 MB)。
Filesystem     Size    Used    Avail   Capacity  Mounted on
/dev/ad0s1a    496M     79M     377M   17%       /
devfs          1.0K    1.0K       0B   100%      /dev
/dev/ad0s1g     63G    517M      58G   1%        /home
/dev/ad0s1e    496M     18K     456M   0%        /tmp
/dev/ad0s1f    7.7G    1.5G     5.6G   21%       /usr
/dev/ad0s1d    1.4G     32M     1.3G   2%        /var




步驟2.掛載快照檔案

利用 mdconfig 指令將快照檔案 (snapshot20070515) 模擬成 MD (Memory Disk) 檔案系統到 /dev/md2 裝置下,之後將 /dev/md2 檔案系統掛載到 /mnt 下。
mdconfig -a -t vnode -f /snapshot20070515 -u 2  //2,就是指定 /dev/md2
mount -r /dev/md2 /mnt                             //將 /dev/md2 掛載到 /mnt 下
df -h
  Filesystem    Size    Used   Avail    Capacity  Mounted on
 /dev/ad0s1a    496M     79M    377M    17%       /
 devfs          1.0K    1.0K      0B    100%      /dev
 /dev/ad0s1g     63G    517M     58G    1%        /home
 /dev/ad0s1e    496M     18K    456M    0%        /tmp
 /dev/ad0s1f    7.7G    1.5G    5.6G    21%       /usr
 /dev/ad0s1d    1.4G     32M    1.3G    2%        /var
 /dev/md2       496M     78M    378M    17%       /mnt   //將快照檔案 mount 來使用

此時進入 /mnt/etc 可以發現裡面檔案跟你在快照根目錄時是一模一樣的,以後要拿來備份 /etc 下的檔案很方便。不過要注意的是前面有提到只能針對獨立的分割區,所以你進入 /mnt/home、/mnt/tmp、/mnt/usr、/mnt/var 會發現都是空的。



步驟3.卸載快照檔案

若不想使用快照檔案時我們也可利用下列步驟來卸載快照檔案。
umount /mnt           //卸載 (記得先離開 /mnt 哦)
mdconfig -d -u 2     //卸載 md2


步驟4.尋找分割區內所有的 snapshot

若您要尋找該分割區內所有的快照檔案 (snapshot files),可以利用 find 指令配合 -flags 參數來尋找即可。
find /var -flags snapshot    //尋找 /var 分割區內所有的 snapshot



4、參考

文章標籤: