閱讀目錄
在前面的一些文章中,我反復提到經(jīng)常會把系統(tǒng)搞崩潰,所以備份系統(tǒng)就是一件不容忽視的事情。由于 Linux 系統(tǒng)本身的優(yōu)越性,系統(tǒng)的備份和還原還是比較容易的。主要表現(xiàn)在以下方面:
備份 Linux 系統(tǒng)的策略有很多,比如使用 dd 命令直接克隆硬盤分區(qū):
sudo dd if=/dev/sda1 of=/dev/sdb1
或者,使用 tar 將硬盤上的文件打包:
cd /sudo tar cvpzf backup.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/backup.tgz /
還原系統(tǒng)的命令是:
sudo dd if=/dev/sdb1 of=/dev/sda1
或
tar xvpfz backup.tgz -C /
但是我最終選擇的是 rsync 命令。rsync 是一個非常優(yōu)秀的文件同步工具,從它的名字可以看出,它支持遠程同步。當然,在備份我的桌面系統(tǒng)時,只需要用到它的本地同步功能就行了。之所以選擇 rsync,是因為它具有如下優(yōu)點:
關(guān)于 rsync 的使用方法,其主要參考文檔是man rsync
,另外,rsync 也可以作為守護進程運行用來建立文件備份服務器,可以參考文檔man rsyncd.conf
。
對于我的桌面系統(tǒng),我選擇的備份策略是使用 rsync 命令將硬盤上的所有文件(當然要排除 /proc 和 /sys 目錄下的內(nèi)容)復制到 U 盤上。首先使用df -lh
命令查看一下我電腦的系統(tǒng)占多大空間,如下圖:
從上圖可以看出,根目錄所在的分區(qū)占用了 14G,而 /boot 目錄所在的分區(qū)才占用 100 多 M。其實 Linux 系統(tǒng)本來不用這么臃腫,只是因為我安裝了太多的軟件包,比如一整套的 texlive 啊什么的,才占用了這么多的空間。不過這都不是事兒,反正現(xiàn)在 U 盤也便宜,所以找個 32G 的 USB 3.0 的 U 盤來備份我這個系統(tǒng),肯定是很輕松愉快的。
新 U 盤插到電腦上會被自動識別,使用不帶參數(shù)的mount
命令可以查看 U 盤的設備文件和掛載路徑,使用fdisk
命令了解 U 盤的大小和分區(qū)情況。如下圖:
整個 U 盤分成一個區(qū)我沒什么意見,不過我不喜歡它的 vfat 文件系統(tǒng),萬一碰到超過 4G 的巨型文件怎么辦?so,先umount
它,然后使用mkfs.ext3
為它重新建立一個文件系統(tǒng),如下圖:
再把 U 盤mount
起來,掛載的路徑為/media/youxia/usb
。如下圖:
然后,可以開始備份了,我備份的命令是:
sudo rsync -Pa / /media/youxia/usb/backup_20141216 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/mnt/* --exclude=/tmp/*
如下圖:
下圖是備份完成后的效果,可以看到整個備份過程花了 59 分多鐘,U 盤被占用 15G,如下圖:
如果哪天系統(tǒng)再崩潰了的話,只需要使用sudo rsync -Pa /media/youxia/usb/backup_20141216/ /
即可恢復系統(tǒng)。
(京山游俠于2014-12-18發(fā)布于博客園,轉(zhuǎn)載請注明出處。)
另:該文章使用 Markdown 寫作,寫起來挺舒服的。而且我的博客開啟了數(shù)學公式支持,所以各位評論的朋友們注意了,如果評論中用到$
字符,請使用\$
這種形式。
從 Ubuntu 15.04 開始,init 系統(tǒng)使用了和 Fedora 一樣的 systemd,于是備份命令變得和前面寫的不一樣了,主要是--exclude=?
的區(qū)別。先看圖:
在上圖中,我使用不帶參數(shù)的mount
命令查看文件系統(tǒng),發(fā)現(xiàn)有四大虛擬的掛載點,它們分別是/sys
、/proc
、/dev
、/run
。這四個虛擬的掛載點是和硬盤沒有關(guān)聯(lián)的,所以在備份的時候需要排除掉,再加上我們掛載 U 盤的/media
,所以備份命令應該這樣寫:
sudo time rsync -Pa / /media/youxia/usb/backup_20160816 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/dev/* --exclude=/run/*
命令中加入time
是為了統(tǒng)計備份一次系統(tǒng)花費多少時間,如下圖:
從下圖可以看出,我的 Dell XPS 15 上的 Ubuntu 系統(tǒng)備份一次花費大約 37 分鐘,占用了 U 盤的 8G 空間。如下圖:
上圖大家需要仔細看看,從圖中可以看出,硬盤的設備名不再是 /dev/sda
,而是 /dev/nvme0n1p
,反倒是 U 盤的設備名是 /dev/sda1
。原因應該有兩點,一是我的 Dell XPS 15 使用的是 M.2 接口的固態(tài)硬盤,不同于 SATA 接口的硬盤,另外一個原因恐怕就是 systemd 的功勞了,使用 systemd 后系統(tǒng)初始化時能夠非常準確地識別硬件的型號,所以它就給我的硬盤起了一個非常詳細的設備名。從上圖還可以看出,我的硬盤被分成了兩個區(qū)/dev/nvme0n1p1
和/dev/nvme0n1p2
,而其中的第一個分區(qū)是 EFI 專用的分區(qū)。了解上面的細節(jié)對后面系統(tǒng)的恢復很重要。
恢復系統(tǒng),可不僅僅是運行 sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /
這么簡單,還是有一些注意事項的。
1.要記得恢復 Grub 的啟動菜單。Ubuntu 系統(tǒng)在安裝玩后,Grub 的啟動菜單會自動隱藏,這給需要選擇多系統(tǒng)的用戶帶來了困難,對于需要啟動進入 rescue 模式的朋友來說就更加是一個障礙了。所以我們要恢復 Grub 的啟動菜單。刪除 /etc/default/grub
文件中的如下兩行:
然后調(diào)用 sudo update-grub
命令更新 Grub 的配置,如下圖:
如果沒有辦法進入 rescue 模式,那就只有從 Ubuntu 的安裝盤啟動了。
2.盡量不要在不同質(zhì)的電腦之間備份和恢復系統(tǒng)。什么意思呢?比如說,我曾經(jīng)把這臺 Dell XPS 15 上的系統(tǒng)搞崩潰了,然后我拿另一臺 Acer 的備份文件來恢復系統(tǒng),本以為可以像 Ghost 安裝 WinXP 一樣方便,哪知恢復完成后連 Grub 都進不去,更別提啟動系統(tǒng)了。后來仔細想想,這就是在不同質(zhì)的電腦之間備份和恢復系統(tǒng)惹的禍。前面提過,我的 Dell XPS 15 的硬盤設備名是 /dev/nvme0n1p
,而 Acer 的 SATA 硬盤的設備名是 /dev/sda
,而且我的 Dell XPS 15 使用的是 EFI 方式安裝的 Ubuntu,而 Acer 是用 Legacy BIOS 方式安裝的 Ubuntu。這就是兩臺電腦不同質(zhì)。后來想了一下,即使是同質(zhì)的電腦,直接使用 sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /
命令進行恢復,應該也是進不了系統(tǒng),原因有二:
/etc/fstab
文件。所以兩臺電腦的硬盤分區(qū)的 UUID 不同,自然系統(tǒng)不能順利運行。所以我們在恢復系統(tǒng)的時候,不能簡單的使用sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /
命令就完了,而是應該具體問題具體分析。如果能夠定位到具體的目錄,只恢復相應的目錄應該是最好的,精準恢復,既節(jié)約時間,又避免副作用。如果真的想全盤恢復的話,先想想 /boot
分區(qū)有無破壞,或 /boot/grub2/grub.cfg
這個配置文件有無受損,以及/etc/fstab
文件是否有變動,如果沒有的話,可以使用 --exclude=/boot/*
和 --exclude=/etc/fstab
選項來避免覆蓋這些內(nèi)容,應該是可以做到在不同的電腦之間互相備份和恢復。
但是最佳的做法,應該還是針對每一臺電腦做一個單獨的備份,而且是定期備份。有備無患。
(京山游俠于2016-08-30更新于博客園,轉(zhuǎn)載請注明出處。)
聯(lián)系客服