Full system backup with rsync (正體中文)
Related articles
這篇文章是教你使用 rsync 來備份你的 "/" , 並且排除部份目錄。 這個方法比使用 dd
備份磁碟 (disk cloning) 更好。我們可以使用這個方法備份不同的磁區大小以及不同的檔案系統,而且這個方法也比使用 cp -a
來得更好,因為有更好的的檔案權限控管,以及保留檔案屬性還有 Access Control Lists (ACLs). [1]
只要執行一行指令
使用 root 權限, 執行:
# rsync -aAXv /* /path/to/backup/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}
如果你想要知道為什麼這些目錄被排除在外,你可以閱讀下一段的資訊。
使用 script
底下的 script 也是提供一樣的備份方法,在備份的同時仍舊會保留 symbolic links, devices, permissions and ownerships, 以及其他的檔案屬性。你可以將你想要除外的部份放在 --exclude
的字串裏面。如果你想要瞭解更多,你可以參考 man rsync
和 man date
。
$ cd ~/Scripts $ nano backup.sh
#!/bin/sh if [ $# -lt 1 ]; then echo "No destination defined. Usage: $0 destination" >&2 exit 1 elif [ $# -gt 1 ]; then echo "Too many arguments. Usage: $0 destination" >&2 exit 1 elif [ ! -d "$1" ]; then echo "Invalid path: $1" >&2 exit 1 elif [ ! -w "$1" ]; then echo "Directory not writable: $1" >&2 exit 1 fi case "$1" in "/mnt") ;; "/mnt/"*) ;; "/media") ;; "/media/"*) ;; *) echo "Destination not allowed." >&2 exit 1 ;; esac START=$(date +%s) rsync -aAXv /* $1 --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/var/lib/pacman/sync/*} FINISH=$(date +%s) echo "total time: $(( ($FINISH-$START) / 60 )) minutes, $(( ($FINISH-$START) % 60 )) seconds" | tee $1/"Backup from $(date '+%A, %d %B %Y, %T')"
$ chmod +x backup.sh
備份是很容易的事。
只要你的系統可以正常運作,打開 terminal 並且使用 root 身份執行這個 script 即可:
# /home/user/Scripts/backup.sh /some/destination
(將 user 置換成你自己的 username )
你也可以置換 $1
成你想要的目的地位址,並使用 root 的身份來執行它:
# backup.sh
修改開機需要的相關檔案
在備份有開機磁區的的檔案系統時,常常會因為設定錯誤而導致系統無法正常開機,如果你因為要將系統備份到另外一個磁區或者磁碟,而且你也需要讓它能夠開機,你可以透過修改 /etc/fstab
以及更新你的 bootloader 的設定檔,來解決這個問題。
更新 fstab
在重開機之前你必須先修改備份後的系統的 fstab 來讓它能夠讀取到變更後的磁區:
# nano /path/to/backup/etc/fstab
tmpfs /tmp tmpfs nodev,nosuid 0 0 /dev/sda1 /boot ext2 defaults 0 2 /dev/sda5 none swap defaults 0 0 /dev/sda6 / ext4 defaults 0 1 /dev/sda7 /home ext4 defaults 0 2
因為 rsync 將整個磁碟都備份過來,所以所有原本的 sda
掛載點,在重開機後會因為找不到開機檔而出錯,所以我們必須將掛載點更改成新的裝置,像是把 /boot 掛載點的 sda 更改成 sdb:
# nano /path/to/backup/etc/fstab
tmpfs /tmp tmpfs nodev,nosuid 0 0 /dev/sdb1 / ext4 defaults 0 1
注意裝置名稱與檔案系統的類別,不要設錯了。
更新 bootloader 的設定檔
這一段主要是告訴你如何從你備份的磁區、磁碟開機。
如果你使用的是 Syslinux,你只需要將原本的開機磁區指定到新的磁區上即可:
# nano /boot/syslinux/syslinux.cfg
如果你連開機磁區都想換到新的磁區上,你可以下這個指令:
# syslinux-install_update -i -a -m -c /mnt/backup
如果你使用的是 GRUB,建議你使用指令自動產生 grub.cfg
設定檔:
# pacman -S os-prober # grub-mkconfig -o /boot/grub/grub.cfg
當然你也可以檢查設定檔是否正確,檔案在 /boot/grub/grub.cfg
。確認 UUID 是否是新的磁區,不然他仍舊會使用舊的磁區來開機。
第一次開機
重開你的電腦,並且在 bootloader 選單中選擇正確的項目,於是將會第一次載入你的系統。系統將會重新檢查你的你的 /
並且產出其他相對應的檔案。
現在你可以重新編輯 /etc/fstab
來去增加之前被你移除掉的磁區和掛載點。
如果你將資料從 HDD 轉換到 SSD (固態硬碟),別忘了啟動 TRIM。也別忘了使用 HDD 和 tmpfs 掛載點來降低 SSD 損害。- 可參考 Relocate files to tmpfs 與 Tips for Minimizing SSD Read & Writes[broken link: invalid section].
延伸閱讀
- Howto – local and remote snapshot backup using rsync with hard links Includes file deduplication with hard-links, MD5 integrity signature, 'chattr' protection, filter rules, disk quota, retention policy with exponential distribution (backups rotation while saving more recent backups than older)