1. 程式人生 > >Linux檔案系統快照

Linux檔案系統快照

Linux檔案系統快照

來自:http://www.mike.org.cn/blog/index.php?load=read&id=619

檔案系統快照 (File System Snapshots) 顧名思義就是在檔案系統上照張相片,也就是將檔案系統當時的情形記錄下來,就好像照相一樣。日後您可以一張一張照片翻出來看。例如,您目前檔案系統中有十個檔案,我們先使用檔案系統快照拍一張照片。之後我們可以刪除檔案,在目前檔案系統中已經沒有東西了。但如果您將照片掛入,您還是可以看到這些檔案。簡單的來說,檔案系統快照的功能就是記錄當時檔案系統的狀態。

  檔案系統快照只能用在獨立的「檔案系統」。例如我們的 /home、/var 分別是獨立的分割區 /dev/ad0s1d 及 /dev/ad0s1e,則我們可以對 /home 及 /var 做檔案系統快照。

  讓我們實際操作一次如何進行快照。建立檔案系統快照的方法有二個,一是使用 mount 指令,另一個是使用 mksnap_ffs。例如我們在將 /home 這一個分割區做一個檔案系統快照,並將快照存成 /home/snapshot20050730,可以使用下列指令:

  # mount -u -o snapshot /home/snapshot20050730 /home



  或是

  # mksnap_ffs /home /home/snapshot20050730

  您會發現在 /home 中多了一個檔名為 snapshot20050730。這個檔案就是現在這個時間點的檔案系統狀態。必須要注意的是,如果您要對 /home 做快照,在快照時只能將結果放在 /home 目錄下。例如,你可以放在 /home/snapshot/20050730,或是 /home/alex/backup/0730。但是不能放在 /var/snap.0730。也就是對某一個檔案系統進行快照的結果只能放在該檔案系統中。但是快照完成後,您就可以將它複製到其它地方。

  現在,您可以在 /home 中先建一些檔案,等一下我們再將剛才的 snapshot 翻開來看,您會發現這些新建的檔案都不會出現在「照片」中。

  我們現在來看看要怎麼把「照片」翻開來看。要看快照的內容可以使用下列指令:

 
 # mdconfig -a -t vnode -f /home/snapshot20050730 -u 3
  # mount -r /dev/md3 /mnt


  上面的指令是將快照檔案掛入第 3 個 md 裝置,再使用 mount 指令將它像檔案系統一樣掛入。因為這是快照,照片是不能修改的,所以我們只能以只讀格式掛入。您現在可以看一下 /mnt 中的檔案,是不是和您 /home 中的檔案一樣,但卻沒有新建的檔案存在。而且您可以試著開啟檔案,連檔案內容都一樣。很神奇吧,傑克!

  md是FreeBSD 中一種特別的裝置,它可以讓我們將檔案模擬成檔案系統,您可以隨意指定沒有在使用中的 md 裝置,如 md1、md2、md3 等。我們使用 mdconfig 這個指令將設定檔案使用某一個編號的裝置,在掛入時必須也使用相對的編號 (例如上面的 md3)。而在使用完快照後,我們必須將它解除安裝,並釋放md裝置:

 
 # umount /mnt
  # mdconfig -d -u 3

  以上就是檔案系統快照,是不是很好用。

  同一個檔案系統中最多可以有 20 個檔案統快照,如果您有舊的快照不用了,可以直接使用 rm 指令刪除它。如果您要查詢某一目錄下所有的快照,可以使用下列指令:

  # find /home -flags snapshot

  如果您檢視一下我們做出來的快照,您會發現它的檔案大小和檔案系統大小一模一樣。但是如果您將它放在原本的檔案系統中,它是不佔空間的。如果您將 /home 的快照複製到其它的分割區中,它才會真正的佔空間。

  這麼神奇的檔案系統快照有什麼功用呢?實際上的應用可多了。您有沒有發現檔案系統快照的速度非常快,這一點可以讓我們在備份時更快。傳統上,如果您要備份系統,您必須先停止網路服務,以免使用者資料備份到一半卻有人修改而造成錯誤,接著您才可以備份資料。而這樣一來,服務中斷的時間會非常長,直到整個檔案備份完為止。

  而利用檔案系統快照,您先停止網路服務,將檔案系統進行快照,快照完後立即啟用網路服務。接下來,再將快照掛入後依正常程式備份即可。或者,您也可以直接備份快照的檔案即可。如此一來,服務中斷的時間就可以大幅減少了,是不是很贊!