日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

[转帖]tar高级教程:增量备份、定时备份、网络备份

發(fā)布時(shí)間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转帖]tar高级教程:增量备份、定时备份、网络备份 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

tar高級(jí)教程:增量備份、定時(shí)備份、網(wǎng)絡(luò)備份

作者: lesca?分類:?Tutorials,?Ubuntu?發(fā)布時(shí)間: 2012-03-01 11:42??瀏覽 27,065 次?61條評(píng)論

一、概述

備份與恢復(fù)對(duì)于系統(tǒng)維護(hù)而言是至關(guān)重要的事情。不合理的備份與還原會(huì)讓你的數(shù)據(jù)面臨丟失的風(fēng)險(xiǎn)。許多用戶都在丟失重要數(shù)據(jù)后才意識(shí)到這種風(fēng)險(xiǎn)。而要從這種情況恢復(fù)數(shù)據(jù)將是非常耗時(shí)并且困難的。所以我們應(yīng)該從別人的錯(cuò)誤中吸取教訓(xùn),并確保你的系統(tǒng)處于保護(hù)中。先考慮一些問題:

何時(shí)進(jìn)行備份?

如果你可以接受一個(gè)星期的數(shù)據(jù)丟失,那么每周備份一次就足夠了。但是如果你只能容忍一天的數(shù)據(jù)損失,那么你就必須每天晚上進(jìn)行備份。

備份到哪?

顯然備份到系統(tǒng)所在磁盤不是明智之舉,用戶應(yīng)該備份到外接硬盤或者磁帶上面。
為了讓文章看上去更簡單,本文所做的例子并沒有備份到外接設(shè)備上,而是在/backup目錄下。

要備份什么?

我們要備份整個(gè)系統(tǒng),因此這里需要考慮的是不必備份的目錄:

  • /backup
  • /proc
  • /lost+found
  • /sys
  • /mnt
  • /media
  • /dev
  • /tmp

備份方式

tar支持三種方式進(jìn)行備份:
1.完整備份:備份指定的所有目標(biāo)文件或文件夾
2.增量備份:僅備份atime與上次備份不同的文件或文件夾
3.差異備份:與增量備份差不多,只是增加了對(duì)Windows文件系統(tǒng)的支持

本文主要闡述如何用tar對(duì)系統(tǒng)進(jìn)行增量備份,以及如何利用cron設(shè)置定時(shí)備份。

二、基礎(chǔ)知識(shí)

mtime, atime, ctime

Linux的文件系統(tǒng)會(huì)記錄以下三種時(shí)間
mtime: 文件修改時(shí)間。當(dāng)文件內(nèi)容呢發(fā)生改變時(shí)更新。?ls -l默認(rèn)顯示mtime
atime: 文件訪問時(shí)間。當(dāng)文件被訪問時(shí)自動(dòng)更新。要查看文件的atime,執(zhí)行ls -lu
    /!\注意:atime可能在tar進(jìn)行備份時(shí)可能發(fā)生變化(和文件系統(tǒng)和tar版本有關(guān)),可以用–atime-preserve防止這種更新。
ctime: 文件屬性修改時(shí)間。當(dāng)文件屬性或權(quán)限發(fā)生變化時(shí)更新。要查看文件的atime,執(zhí)行ls -lc

三、開始增量備份

GNU tar使用--listed-incremental選項(xiàng)(縮寫為-g)進(jìn)行增量備份:

tar -czvpf /backup/backup.tar.gz -g /backup/snapshot.snar \
--exclude=/backup --exclude=/proc --exclude=/lost+found \
--exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev \
--exclude=/tmp /

三、需要了解的

1.最后一個(gè)斜杠“/”告訴tar要從根目錄進(jìn)行備份。
2.tar非常依賴atime,以下情況會(huì)導(dǎo)致歸檔數(shù)據(jù)文件不一致:
 (1)備份期間對(duì)文件的任何訪問
 (2)備份期間將系統(tǒng)時(shí)間調(diào)慢
3.tar假設(shè)待備份的文件所在磁盤設(shè)備ID是不變的,但NFS等某些文件系統(tǒng)并不屬于這種情況,可以用--no-check-device阻止tar進(jìn)行檢查
4.除非情況緊急,并且你充分信任tar,否則你最好在備份時(shí)使用--verify選項(xiàng)(縮寫為-W)以確保數(shù)據(jù)正確地進(jìn)行備份。但不幸的是它并不支持所有的存儲(chǔ)介質(zhì)(比如磁帶)。

5.–listed-incremental與–incremental(-g與-G)的區(qū)別

–listed-incremental(縮寫為-G)是該參數(shù)是–listed-incremental(縮寫為-g)的快捷選項(xiàng),不需要指定增量文件。它也是舊版本的tar增量備份遺留下來的。現(xiàn)在常常用于解壓增量備份,或者列出增量備份的文件列表。
-G與-g相比,-g能通過復(fù)制snar文件的方式創(chuàng)建多層次的增量備份文件,而-G卻只能用level0

四、列出備份文件列表

tar -tGvvf backup.tar.gz

-t 等價(jià)于 –list
-Gvv 一種固定用法,列出文件屬性的同時(shí)還顯示備份屬性:
Y – 該文件在歸檔文件中
N – 該文件不在歸檔文件中
D – 文件夾

五、數(shù)據(jù)恢復(fù)還原

數(shù)據(jù)恢復(fù)無需為tar指定增量文件snar,因?yàn)閠ar所需的信息已經(jīng)包含在打包的文件中了。
要恢復(fù)數(shù)據(jù),以下三種方式都是可行的:

方法一:

將增量文件指定為/dev/null

tar -xzvpf /backup/backup.tar.gz -g /dev/null -C /

方法二:

使用--incremental參數(shù)(縮寫為-G)

tar -xzvpGf /backup/backup.tar.gz -C /

方法三:

某些情況下,你還可以省略-G選項(xiàng),但這不是推薦的版本:

tar -xzvpf /backup/backup.tar.gz -C /

六、利用cron定時(shí)備份

新建cron計(jì)劃任務(wù)非常簡單,以下方法都可以完成:

方法一:

$ crontab -e

方法二:

# vi /etc/crontab

在筆者的Linux上,方法一只能以當(dāng)前用戶的權(quán)限運(yùn)行計(jì)劃的任務(wù);方法二可以指定程序以哪個(gè)用戶執(zhí)行,但是必須以root身份編輯該文件。
在此,因?yàn)橐獙?duì)整個(gè)文件系統(tǒng)進(jìn)行備份,因此僅以/etc/crontab為例進(jìn)行介紹:

# m h dom mon dow user  command1 3 *  *  * root /root/scripts/daily_backup

這行配置表明,在每天3:01分執(zhí)行/root/scripts/daily_backup這個(gè)腳本里的文件。

七、討論

tar, cpio, rsync, dump

之前有人使用cpio進(jìn)行備份,但是后來發(fā)現(xiàn)cpio格式無法提取單個(gè)文件。但是tar也有自己的缺點(diǎn):
1.它過度依賴于atime
2.如果將歸檔文件恢復(fù)到一個(gè)新的文件系統(tǒng)中,所有文件的atime和ctime都被刷新。對(duì)于新系統(tǒng),舊的增量備份文件不再適用,得重新做一遍。
相比之下,rsync似乎很好解決這個(gè)問題,而且具有較快的速度。
而dump是所有流行的備份軟件中對(duì)文件完整性表現(xiàn)最好的[3]

八、Script(腳本)

利用tar內(nèi)置的增量備份功能進(jìn)行備份

本代碼完成以下任務(wù):

  • 找到備份數(shù)據(jù)庫bkdb(記錄當(dāng)前備份的level),如果沒有則從level 0開始備份
  • 以當(dāng)前時(shí)間和level為備份文件以及snar文件命名
  • 復(fù)制舊版本的snar,從而提升level
  • 將新的snar指定給tar,進(jìn)行備份

/!\注意:請(qǐng)將本腳本放置在/backup目錄下運(yùn)行
[bash]
#!/bin/bash
# system backup
# Sun Feb 19 00:34:42 CST 2012
# by lesca

# Read db file and config
if [ -f "bkdb" ]; then
eval `grep VER bkdb`
eval `grep NAME bkdb`
OLD=$VER
NEW=$((OLD+1))
else
NEW=0
fi

DATE=`date +%Y%m%d-%H%M%S`
BKFILE=$DATE-$NEW.tar.gz
NEWSNAP=$DATE-$NEW.snar
OLDSNAP=$NAME.snar

# Create new snapshot
if [ -e "$OLDSNAP" ]; then
cp $OLDSNAP $NEWSNAP
fi

tar -czvpf /backup/$BKFILE -g /backup/$NEWSNAP –exclude=/backup –exclude=/proc –exclude=/lost+found –exclude=/sys –exclude=/mnt –exclude=/media –exclude=/dev –exclude=/tmp /

echo VER=$NEW > bkdb
echo NAME=$DATE-$NEW >> bkdb
echo Archived $BKFILE with snapshot $NEWSNAP
[/bash]

恢復(fù)增量備份文件

本代碼完成以下任務(wù):

  • 找到備份數(shù)據(jù)庫bkdb(記錄當(dāng)前備份的level),如果沒有則結(jié)束
  • 根據(jù)bkdb指定的信息,找到備份文件和snar,進(jìn)行還原
  • 檢查排除備份的文件夾是否存在,不存在則創(chuàng)建

/!\注意:還原會(huì)刷新atime和ctime
[bash]
#!/bin/bash

end() {
echo $1
exit
}

nameOf() {
ls -1 | grep $1.tar.gz | cut -c1-15
}

if [ -f "bkdb" ]; then
eval `grep VER bkdb`
if [ $# -eq "1" ] && [ $1 -le $VER ]; then
VER=$1
fi
else
end "Error: No backup archives."
fi

ver=0
while [ $ver -le "$VER" ]; do
ARCHIVE=`nameOf $ver`-$ver.tar.gz
echo $ARCHIVE
tar -xzvpGf $ARCHIVE -C /
ver=$((ver+1))
done
NAME=`nameOf $VER`-$VER
echo VER=$VER > bkdb
echo NAME=$NAME >> bkdb

if [ ! -e /proc ]; then
mkdir /proc
fi

if [ ! -e /lost+found ]; then
mkdir /lost+found
fi

if [ ! -e /sys ]; then
mkdir /sys
fi

if [ ! -e /mnt ]; then
mkdir /mnt
fi

if [ ! -e /media ]; then
mkdir /media
fi

if [ ! -e /dev ]; then
mkdir /dev
fi

if [ ! -e /tmp ]; then
mkdir /tmp
fi
[/bash]

改進(jìn)版本:利用find僅備份mtime更新的文件

本代碼[4]完成以下任務(wù):

  • 載入當(dāng)前日期到環(huán)境變量
  • 每周日進(jìn)行一次完全備份,刪除之前的增量備份
  • 平時(shí)進(jìn)行增量備份

[bash]
#!/bin/bash
#
# creates backups of essential files
#
DATA="/home /root /usr/local/httpd"
LIST="/tmp/backlist_$$.txt"
#
set $(date)
#
if test "$1" = "Sun" ; then
# weekly a full backup of all data and config. settings:
#
tar -czvf "/backup/data/data_full_$6-$2-$3.tgz" $DATA
rm -f /backup/data/data_diff*
else
# incremental backup:
#
find $DATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar -czTvf "backup/data/data_diff_$6-$2-$3.tgz" "$LIST"
rm -f "$LIST"
fi
[/bash]

九、tar高級(jí)技巧

1.檔案分割

創(chuàng)建時(shí)分割:

tar -cvpz <put options here> / | split -d -b 3900m - /name/of/backup.tar.gz

創(chuàng)建后分割:

split -d -b 3900m /path/to/backup.tar.gz /name/of/backup.tar.gz

2.通過netcat進(jìn)行網(wǎng)絡(luò)備份

發(fā)送端

tar -czvp <all other options> / | nc -q 0 <receiving host> 1024

接收端

nc -l 1024 > backup.tar.gz

/!\注意:由于通過網(wǎng)絡(luò)備份tar不再需要參數(shù)-f執(zhí)行備份檔案名稱,該名稱由接收端的nc重定向指定
{i}參數(shù)說明:
-q 0: wait 0 second on QUIT
-l 1024: Listen port 1024

3.通過netcat進(jìn)行網(wǎng)絡(luò)恢復(fù)

發(fā)送端

cat backup.tar.gz | nc -q 0 <receiving host> 1024 

接收端

nc -l 1024 | tar -xzvpf - -C /

4.通過SSH進(jìn)行網(wǎng)絡(luò)備份與恢復(fù)

在安裝了SSH服務(wù)的主機(jī)(SSH Server)上,客戶端只需直接發(fā)起連接并傳送命令到目標(biāo)計(jì)算機(jī)(SSH Server),就能完成操作。所有數(shù)據(jù)通過“管道”傳送,用戶不需要了解通過哪個(gè)端口備份(當(dāng)然您也可以自行指定),而且所有傳輸?shù)臄?shù)據(jù)都是加密的。因此通過SSH備份,更安全、更方便、只需一人就能完成備份工作。請(qǐng)?jiān)跍?zhǔn)備備份的計(jì)算機(jī)上執(zhí)行以下命令:

tar -cvpz <all other options> / | ssh <backuphost> "( cat > ssh_backup.tar.gz )"

要恢復(fù)文件,請(qǐng)執(zhí)行以下命令:

cat ssh_backup.tar.gz | ssh <receivinng host> "( tar -xzvp -C / )"

想了解更多關(guān)于SSH的內(nèi)容,請(qǐng)參看SSH端口轉(zhuǎn)發(fā)(本地端口轉(zhuǎn)發(fā)、遠(yuǎn)程端口轉(zhuǎn)發(fā)、動(dòng)態(tài)端口轉(zhuǎn)發(fā))工作原理、應(yīng)用詳解

References

[1]?Ubuntu – BackupYourSystem
[2]?GNU – Performing Backups and Restoring Files
[3]?FreeBSD – 19.12 Backup Basics
[4]?Backup script for Linux using tar and find

Copyright

本文出自 Lesca 技術(shù)宅,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。

本文永久鏈接:?https://lesca.me/archives/how-to-incrementally-backup-linux-with-gnu-tar.html

轉(zhuǎn)載于:https://www.cnblogs.com/jinanxiaolaohu/p/10442611.html

總結(jié)

以上是生活随笔為你收集整理的[转帖]tar高级教程:增量备份、定时备份、网络备份的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。