Raspberry Pi: 該備份了。


這次要聊聊備份。

在我的使用經驗中,Unix-like作業系統是非常脆弱的,而且一旦出錯了很不容易修復,因為需要相對比較深的作業系統底層相關知識。所以備份是很重要的!想當初我換了Macbook Pro來玩,不到一個星期就搞爛過兩次,都是從Time Machine直接還原,當作什麼是都沒發生嘿嘿

雖然我在Pi裡面並沒有什麼重要的資料,但是因為裝好之後做了許多設定,這些設定如果到時候都不見了我可不想再重來一次。舉個例子好了。我第一次在terminal使用transmission的時候,transmission-remote指令會失敗,會得到401: Unauthorized的錯誤。這邊的解法是去/etc/transmission-daemon/settings.json裡面修改設定:

"rpc-authentication-required": true,

改成false就可以了。記得在修改前先停止transmission(sudo service transmission-daemon stop),否則有很大的機會修改完的檔案會被原本的檔案覆寫回來。類似這種小小地去修改各種設定檔的動作雖然不難,但很雜,長久下來這些一點一點的變動會很難追蹤,所以我需要備份。

在網路上搜尋了一些相關討論,看起來PI的備份主要有兩條路徑,第一是把整張SD卡的IMAGE複製一份,第二則是使用rsync這個工具。前者比較簡單明瞭,但缺點是你需要先把SD卡拔下來插到其他主機上來進行操作,換言之,你的PI就會有Downtime;相對地,使用rsync會是一個Zero-Dwontime的備份解決方案。我決定採用後者,因為這麼做還有一個優點就是每次更新備份只需要處理diff的部分即可,不必整張SD卡的映象重新再拷貝一次。

StackExchange上有一篇很好的串,討論使用複製整張SD卡image的方式來備份Pi,包含了WIN, Mac, Linux平台的解決方案。

至於使用rsync解決方案,同樣有一個非常棒的串,我直接採用了裡面的步驟。

但事情通常不是那麼單純。最初我希望存放備份的位置當然是我的APPLE時光膠囊,畢竟他同時也是我的PI開機預設掛載的網路硬碟。但是!由於當初我買來時光膠囊之後沒有特別在去對裡面的硬碟做切割,時光膠囊的硬碟本身檔案格式採用的是HFS+,我發現這個格式在處理Linux的Symbolic Link時會出問題。簡單地說,當我rsync的時候我發現所有的symlink都會複製失敗,這問題就大了。

最一開始,我決定加入-L選項,讓rsync直接把symlink的部分做實體檔案複製,雖然這樣會讓備份變得肥大,但反正我硬碟也很大。但是這麼做也失敗了。因為我發現像是/usr/bin/X11 -> .這種玩意兒,當你去把連結都實體複製時,就會發生/usr/bin/X11/X11/X11/...的無窮回圈悲劇。

好吧,因為不想對時光膠囊重新格式化和分割(我也不知道能不能很順利地把其中的分割格式化成ext類型),所以我決定改把PI備份到一個廉價的8GiB USB隨身碟上。首先用我虛擬Ubuntu把他格式化成ext4之後,插進時光膠囊,然後又失敗惹。

時光膠囊貌似不認得ext檔案系統,所以完全無視了我的USB隨身碟。這件事情不管是你從MAC去存取膠囊還是從PI去存取,好像都是一樣的。或許有些Hack可以搞定這件事情,但是山不轉路轉,那我就把USB隨身碟直接插到PI上面不就好了咩。

所以步驟一樣很簡單,首先針對rsync建立一個例外清單,我把他存在/home/pi/rsync-exclude.txt這個檔案裡,內容就是

/proc/*
/sys/*
/dev/*
/boot/*
/tmp/*
/run/*
/mnt/*

至於為什麼這些路徑要設成例外(也就是不做備份),在上面那個討論串裡面有很詳盡的解釋。完成這個例外清單之外,就只需要一行指令就能在不停機狀態下搞定備份:

sudo rsync -aEv --delete-during --exclude-from=/home/pi/rsync-exclude.txt / /mnt/usbdrive/pi_rsync_backup/

這邊我是把隨身碟掛載在/mnt下面。在這邊順便記錄一下在Linux底下掛載隨身碟的基本手
段。在插入裝置後先去看系統紀錄來確定裝置在/dev下被配與的名稱:

tail -f /var/log/messages

接著創建準備要掛載裝置的位置目錄:

sudo mkdir /mnt/usbdrive

然後就可以進行掛載了:

sudo mount -t ext4 /dev/sda1 /mnt/usbdrive/


(這邊我的裝置名稱為sda1,用-t指定檔案系統。)


0 comment(s):

Post a Comment

回應文章前請注意下列三勿原則:

1)勿拍照;(→會有靈異的照片從你的相機裡跑出來...
2)勿餵食;(→會有飢渴的猛獸從我的網誌裡跑出來...
3)勿告白。(→會有奇怪的東西從站長體內裡跑出來...

謝謝大家的配合。
( > ー <)b