Backup your Linux System | 備份你的 Linux 系統(tǒng)
Author | 作者 : Kreny
Abstract: Backup your data in Linux system by using shell commands, OpenSSH, etc.
摘要: 本文結(jié)合個(gè)人粗淺的 Linux 經(jīng)驗(yàn), 闡述如何使用 shell 命令以及 OpenSSH 等工具備份 Linux 系統(tǒng)和數(shù)據(jù)。
一、我們需要備份什么?
我的 Linux 系統(tǒng)是基于 Redhat 的Redhat Linux 9.0,同時(shí)配置了諸如 MySQL、PHP、Apache 等基礎(chǔ)服務(wù),同時(shí)又配有 Awstats、MRTG、MT 等應(yīng)用服務(wù)程序,因此,我們需要備份的除了系統(tǒng)本身的重要文件以外,還需要備份數(shù)據(jù)庫(kù)、log文件和統(tǒng)計(jì)數(shù)據(jù)文件等。當(dāng)然另外一項(xiàng)必不可少的就是編譯各項(xiàng)服務(wù)時(shí)的 ./configure 參數(shù),這里就不贅述了。
二、制定備份文件列表。
這個(gè)步驟就是歸納一下需要備份的目錄列表。以下我就依照我所安裝的各項(xiàng)服務(wù)作了一個(gè)簡(jiǎn)單的list。 一些文件的地址是以我的服務(wù)器為標(biāo)準(zhǔn)(以"/"開(kāi)頭),一些則以相對(duì)目錄來(lái)描述(以"./"開(kāi)頭)。
系統(tǒng):
包含所有核心配置文件。這其中包括網(wǎng)絡(luò)配置、系統(tǒng)名稱(chēng)、防火墻規(guī)則、用戶、組,以及其他全局系統(tǒng)項(xiàng)。
包含系統(tǒng)守護(hù)進(jìn)程(服務(wù))所使用的信息,包括 DNS 配置、DHCP 租期、郵件緩沖文件、HTTP 服務(wù)器文件、db2 實(shí)例配置,等等。
包含所有用戶的默認(rèn)用戶主目錄。這包括他們的個(gè)人設(shè)置、已下載的文件和用戶不希望失去的其他信息。
是根(root)用戶的主目錄。
是安裝許多非系統(tǒng)文件的地方。IBM 軟件就安裝在這里。OpenOffice、JDK 和其他軟件在默認(rèn)情況下也安裝在這里。
系統(tǒng)中不需要備份的目錄:
應(yīng)該永遠(yuǎn)不要備份這個(gè)目錄。它不是一個(gè)真實(shí)的文件系統(tǒng),而是運(yùn)行內(nèi)核和環(huán)境的虛擬化視圖。它包括諸如 /proc/kcore 這樣的文件,這個(gè)文件是整個(gè)運(yùn)行內(nèi)存的虛擬視圖。備份這些文件只是在浪費(fèi)資源。
包含硬件設(shè)備的文件表示。如果計(jì)劃還原到一個(gè)空白的系統(tǒng),那就可以備份 /dev。然而,如果計(jì)劃還原到一個(gè)已安裝的 Linux 系統(tǒng),那么備份 /dev 是沒(méi)有必要的。
更多關(guān)于目錄的解釋?zhuān)?qǐng)查看 Filesystem Hierarchy Standard 和 Red Hat Linux Overview of File System Hierarchy Standard (FHS)
MySQL:
同時(shí)要注意版本的保留,在恢復(fù)的時(shí)候使用相同的版本(或者相同系列的版本)會(huì)減少更多不必要的麻煩,例如 “/usr
/local/mysql-standard-4.1.7-pc-linux-i686”。
MySQL 的配置文件。
Apache:
Apache 的 log 文件。這里建議使用 cronolog 來(lái) rotate Apache 的巨大 log。可以參考我的 cronolog 雜記
Apache 的配置文件,例如: httpd.conf。還是建議在修改此文本的時(shí)候使用“#”號(hào) comment 修改的內(nèi)容,然后添加需要修改的內(nèi)容。
PHP:
個(gè)人覺(jué)得這個(gè)就夠了。如果你設(shè)定了 php 的 error log 文件,當(dāng)然那個(gè)也是需要的。
Movable Type:
一般來(lái)說(shuō) blog 不會(huì)太大,不介意的話就整個(gè)備份一下。當(dāng)然最重要的是 ./MT-3.0D-full-en_ususr/db/ 文件夾,里面有所有的數(shù)據(jù)(如果你沒(méi)有用 MySQL 作為 MT 的數(shù)據(jù)存儲(chǔ)格式的話)。
Awstats:
Awstats 的配置文件。諸如:awstats.blog.conf
Awstats 的分析留檔文件。 諸如:awstats082004.blog.txt
MRTG:
三、使用 tar 和 crontab 等簡(jiǎn)單工具備份。
以下是使用 tar 的腳本,去掉了多余的說(shuō)明部分。 您也可以點(diǎn)擊這里下載并修改以適合自己的系統(tǒng)。在腳本中我盡量用更多的方法來(lái)進(jìn)行備份。在實(shí)際應(yīng)用中可以將步驟更加簡(jiǎn)化。更多關(guān)于 tar 的參數(shù)請(qǐng)看 man tar
#!/bin/sh這里引用了『Linux 備份與恢復(fù)速成指南』中的一個(gè)小技巧,將文件列表寫(xiě)入一個(gè)文件進(jìn)行操作。查看我的Filelist。# Date format: 20040626
DATE=`date -d yesterday +%Y%m%d`# MySQL version & directory
MYSQL_VERSION="4.x.x"
MYSQL_DIR="/usr/local/mysql/data"# MT Blog directory
MTBLOG_DIR="/path-to-mt/db/"# Backup directory & Backup Filelist
BACKUP_DIR="/path-to-backup/backupfile"
BACKUP_FILELIST="/path-to-backup/filelist"# Backup MySQL
printf "Backup MySQL data directory, please wait...\n"
tar -zpcvPf $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz $MYSQL_DIR | grep "tar:"
printf "Done! The new backup file is: $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz\n\n"# Backup MT Blog
printf "Backuping the MT3.0 Weblog data directory, please wait...\n"
tar -zpcvPf $BACKUP_DIR/MT-db-$DATE.tgz $MTBLOG_DIR | grep "tar:"
printf "Done! The new backup file is: $BACKUP_DIR/MT-db-$DATE.tgz\n"
以下是一個(gè)文件列表的例子:
/etc以下解釋引自『Linux 備份與恢復(fù)速成指南』:
/var
/home
/usr/local
/opt (有時(shí)會(huì)是空目錄)
請(qǐng)注意 tar -T(或 files-from)命令不能接受通配符。文件必須明確地列出。上面的例子展示了一種單獨(dú)地引用文件的方法。您還可以執(zhí)行腳本來(lái)搜索系統(tǒng),然后建立一個(gè)列表。下面就是這樣一個(gè)腳本的例子:
#!/bin/sh上面的腳本首先將 MyFiles 中的所有現(xiàn)有文件列表復(fù)制到 TempList。然后它執(zhí)行兩個(gè) find 命令來(lái)搜索文件系統(tǒng)中匹配某個(gè)模式的文件,并將它們附加到 TempList。第一次是搜索 /usr/share 目錄樹(shù)中以 .png 結(jié)尾的所有文件。第二次是搜索 /tmp 目錄樹(shù)中以 .iso 結(jié)尾的所有文件。在建立好列表之后,tar 然后在文件設(shè)備 /dev/st0 (第一個(gè) SCSI 磁帶設(shè)備)上創(chuàng)建 一個(gè)新的歸檔文件,該文件使用 gzip 格式來(lái)壓縮,并保留所有文件權(quán)限。該歸檔文件將跨越多個(gè)卷。要?dú)w檔的文件的名稱(chēng)將從 TempList 文件中提取。
cat MyFiles > TempList
find /usr/share -iname *.png >> TempList
find /tmp -iname *.iso >> TempList
tar -cpzMf /path-to-backup/backupfile -T TempList
四、適用于 log 和數(shù)據(jù)庫(kù)的增量備份(incremental backup)。
對(duì)于龐大的 log 或者 數(shù)據(jù)庫(kù)文件,每天進(jìn)行完全備份似乎不是很能合理高效地實(shí)現(xiàn)備份工作。所以在較短的時(shí)間周期內(nèi),適用增量備份(incremental backup)會(huì)是一個(gè)不錯(cuò)的選擇。
tar 并不是最好的增量備份工具
tar 并不是最好的增量備份的工具,但是它也可以實(shí)現(xiàn)增量備份。參照 『The tar backup program』中的腳本可以實(shí)現(xiàn)這個(gè)操作。
簡(jiǎn)單地介紹一下其原理:
首先,制作一個(gè)完全備份的時(shí)間點(diǎn)文件,例如 "full-date"。其中寫(xiě)入某次完全備份的時(shí)間點(diǎn),例如 echo $NOW > full-date。
然后在自定的時(shí)間循環(huán)期內(nèi)(例如一周),每次和完全備份時(shí)間點(diǎn)(full-date)對(duì)比后進(jìn)行增量備份。
其中最關(guān)鍵的一個(gè)語(yǔ)句就是:
tar --newer $full-date -zcpf $BACKUPDIR/$BACKUPFILE-$NOW.tgz $DIRECTOIES其結(jié)果就是,在一周中會(huì)產(chǎn)生 6 個(gè)獨(dú)立文件,其內(nèi)容是前一天內(nèi)新增的內(nèi)容。以下是一個(gè)例子:
[root@deep] /# ls -l /backups/total 22217
-rw-r--r-- 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar << 每月月初一次完全備份
-rw-r--r-- 1 root root 6879 Feb 7 11:24 deep-Fri.tar << 每天的增量備份
-rw-r--r-- 1 root root 2831 Feb 7 11:24 deep-Mon.tar
-rw-r--r-- 1 root root 7924 Feb 7 11:25 deep-Sat.tar
-rw-r--r-- 1 root root 11923013 Feb 7 11:24 deep-Sun.tar << 每周一次完全備份
-rw-r--r-- 1 root root 5643 Feb 7 11:25 deep-Thu.tar
-rw-r--r-- 1 root root 3152 Feb 7 11:25 deep-Tue.tar
-rw-r--r-- 1 root root 4567 Feb 7 11:25 deep-Wed.tar
drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full
tar 中幾個(gè)開(kāi)關(guān)的簡(jiǎn)介:
注意:-u 開(kāi)關(guān)并不是增量備份,而是往原有的 tar 包里面添加新的文件。
fbackup is a better choice
在 HP 的論壇上,有關(guān)于增量備份的討論--。但是因?yàn)槲也皇?HP 的系統(tǒng),tar 已經(jīng)可以滿足現(xiàn)有的備份需求。
五、使用 ssh 實(shí)現(xiàn)安全網(wǎng)絡(luò)遠(yuǎn)程備份。
[很抱歉,此段筆者沒(méi)有試驗(yàn)環(huán)境,現(xiàn)在之能添加幾篇關(guān)于 ssh 遠(yuǎn)程傳送的文章。等到經(jīng)過(guò)試驗(yàn)后,我會(huì)添加具體內(nèi)容。]
六、個(gè)人使用的 e-mail 簡(jiǎn)單備份。
由于 Yahoo!、Google、Hotmail 相繼推出了 1-2G 的郵箱,因此可是試著使用帶有文件附件的 E-mail 來(lái)傳輸小于各個(gè)郵箱的單封信件上限大小的文件。 具體需要用到一些諸如 uudecode 的命令,所以需要先安裝一個(gè) Sharutils 。 我在編譯中遇到一些簡(jiǎn)單的錯(cuò)誤,這里是我修改過(guò)的 Sharutils。
在命令行下發(fā)送帶附件的郵件時(shí),還是建議使用諸如 MUTT 的 MUA,請(qǐng)查看我的 MUTT 的安裝失敗經(jīng)歷,也許對(duì)新裝的用戶有所幫助。
安裝完畢后,可以使用 Mutt 的命令行一行解決問(wèn)題。首先先寫(xiě)一個(gè)郵件文本 mailcontent.txt。
# cat mailcontent.txt | mutt -s "mailtitle" -a attachfile1 mail@address
結(jié)合上面的 shell 腳本,如果你有企業(yè)級(jí)郵箱的話,不妨也試試這種方法。僅供參考。
參考文檔:
Useful Links: