查看完整版本: [轉貼]linux資料備份

chun 2010-8-9 10:02

[轉貼]linux資料備份

http://linux-dindin.blogspot.com/2009/10/linux_27.html<br><h3 class="post-title entry-title">
<a href="http://linux-dindin.blogspot.com/2009/10/linux_27.html">linux資料
備份</a>
</h3>
<div class="post-header">

</div>

<b>備份/home下的所有資料</b><br>
<ul><li>#date +%Y%m%d-%H%M ---&gt;要用日期做檔名</li><li>#tar cvfz `date +%Y%m%d-%H%M`.tar.gz /home</li></ul><b>增量備份-第二天備份只備份增加的部份,免得備份檔太大</b><br>
<ul><li>在備份完成後建立新檔案,做一個時間戳記</li><ul><li>#touch /home/timemark</li></ul><li>找出比timemark更晚建立的檔案</li><ul><li>#find /home -newer timemark </li></ul><li>建立新備份</li><ul><li>#tar cvfz `date +%Y%m%d-%H%M`.tar.gz `find /home -newer
timemark`</li></ul><li>以上寫成.sh檔案,放到crontab就可以每天自動執行了</li></ul><b>linux異地備份</b><br>
<div style="color: blue;"><b>server</b><b>A</b><b>利用
public/privare key來保障傳送備份資料</b><b>到</b><b> serverB</b><b>的安全</b><br>
</div>1.需要什麼服務?可以利用ssh/scp<br>
2.如何全自動?寫成shell script<br>
<br>
<b style="color: rgb(102, 0, 0);">serverA</b><br>
<ul><li>建立key</li><ul><li>#ssh-keygen -t rsa</li><li style="color: blue;">Generating public/private rsa key pair.</li><li style="color: blue;">Enter file in which to save the key
(/root/.ssh/id_rsa): <span style="color: red;">---&gt;把key放這</span></li><li style="color: blue;">Created directory '/root/.ssh'.</li><li style="color: blue;">Enter passphrase (empty for no passphrase):<span style="color: red;">---&gt;輸入key的密碼(空白也可)</span></li><li style="color: blue;">Enter same passphrase again:</li><li style="color: blue;">Your identification has been saved in
/root/.ssh/id_rsa.</li><li style="color: blue;">Your public key has been saved in
/root/.ssh/id_rsa.pub.</li><li style="color: blue;">The key fingerprint is:</li><li style="color: blue;">f6:32:90:e2:e7:03:c8:c1:a4:99:0b:3e:a1:73:3c:48
root@localhost.localdomain</li></ul><li>傳送public key到serverB的家目錄</li><ul><li>#cd /root/.ssh</li><li>#scp id_rsa.pub root@serverBIP:~/</li></ul></ul><b style="color: rgb(102, 0, 0);">serverB</b><br>
<ul><li>#cd~</li><li>#mkdir /root/.ssh</li><li>#cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</li></ul>Note:<br>
如果有問題可檢查log<br>
/var/log/secure
<br>

chun 2010-8-11 13:36

backup script 說明

<P><A href="http://www.techbang.com.tw/posts/306">http://www.techbang.com.tw/posts/306</A></P>
<P>&nbsp;</P>
<H1>電腦王51期「Linux灌後餘生」參考資料</H1>
<DIV class="hd clearfix">
<P class=author><SPAN>作者:<A class=nickname title=pcadv href="http://www.techbang.com.tw/masters/pcadv"><FONT color=#0068b7>pcadv</FONT></A></SPAN> 發表於 2008-10-13 12:30</P>
<P class="social clearfix"><A class=twitter title=Twitter href="http://twitter.com/?status=%E9%9B%BB%E8%85%A6%E7%8E%8B51%E6%9C%9F%E3%80%8CLinux%E7%81%8C%E5%BE%8C%E9%A4%98%E7%94%9F%E3%80%8D%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99%20http%3A%2F%2Fwww.techbang.com.tw%2Fposts%2F306" target=_blank>Twitter</A> <A class=plurk title=Plurk href="http://plurk.com/?status=%E9%9B%BB%E8%85%A6%E7%8E%8B51%E6%9C%9F%E3%80%8CLinux%E7%81%8C%E5%BE%8C%E9%A4%98%E7%94%9F%E3%80%8D%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99%20http%3A%2F%2Fwww.techbang.com.tw%2Fposts%2F306" target=_blank>Plurk</A> <A class=funp title=funP href="http://funp.com/push/submit/add.php?url=http%3A%2F%2Fwww.techbang.com.tw%2Fposts%2F306&amp;via=tools" target=_blank>funP</A> <A style="TEXT-DECORATION: none" class=facebook href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.techbang.com.tw%2Fposts%2F306&amp;t=%E9%9B%BB%E8%85%A6%E7%8E%8B51%E6%9C%9F%E3%80%8CLinux%E7%81%8C%E5%BE%8C%E9%A4%98%E7%94%9F%E3%80%8D%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99%20%7C%20T%E5%AE%A2%E9%82%A6%20-%20%E6%88%91%E5%8F%AA%E6%8E%A8%E8%96%A6%E5%A5%BD%E6%9D%B1%E8%A5%BF&amp;src=sp" type=button_count name=fb_share fb_count="0" fb_rendered="true" share_url="http://www.techbang.com.tw/posts/306"><SPAN class="fb_share_size_Small "><SPAN style="CURSOR: pointer" class="FBConnectButton FBConnectButton_Small"><SPAN class=FBConnectButton_Text>分享</SPAN></SPAN><SPAN class="fb_share_count_nub_right fb_share_no_count"></SPAN><SPAN class="fb_share_count fb_share_no_count fb_share_count_right"><SPAN class=fb_share_count_inner>&nbsp;</SPAN></SPAN></SPAN></A> </P></DIV>
<DIV class=content>
<P>
<SCRIPT type=text/javascript><!--
        google_ad_client = "pub-5055440483337239";
        /* T客邦文章-728x90 */
        google_ad_slot = "7921875415";
        google_ad_width = 728;
        google_ad_height = 90;
        //-->
        </SCRIPT>

<SCRIPT type=text/javascript src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
        </SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></SCRIPT>

<SCRIPT src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></SCRIPT>

<SCRIPT>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</SCRIPT>
<INS style="BORDER-BOTTOM: medium none; POSITION: relative; BORDER-LEFT: medium none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 728px; PADDING-RIGHT: 0px; DISPLAY: inline-table; HEIGHT: 90px; VISIBILITY: visible; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0px"><INS style="BORDER-BOTTOM: medium none; POSITION: relative; BORDER-LEFT: medium none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 728px; PADDING-RIGHT: 0px; DISPLAY: block; HEIGHT: 90px; VISIBILITY: visible; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0px" id=google_ads_frame1_anchor><IFRAME style="POSITION: absolute; TOP: 0px; LEFT: 0px" id=google_ads_frame1 height=90 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5055440483337239&amp;output=html&amp;h=90&amp;slotname=7921875415&amp;w=728&amp;lmt=1281507825&amp;flash=10.1.53.64&amp;url=http%3A%2F%2Fwww.techbang.com.tw%2Fposts%2F306&amp;dt=1281507825218&amp;shv=r20100804&amp;correlator=1281507825218&amp;dblk=1&amp;frm=0&amp;adk=1559376476&amp;ga_vid=2118037913.1281507825&amp;ga_sid=1281507825&amp;ga_hid=1939238736&amp;ga_fc=0&amp;u_tz=480&amp;u_his=0&amp;u_java=1&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_nplug=0&amp;u_nmime=0&amp;biw=1020&amp;bih=611&amp;ref=http%3A%2F%2Fwww.google.com.tw%2Fsearch%3Fq%3Dtar%2Bdate%2B%252B%2525Y-%2525m-%2525d%26hl%3Dzh-TW%26lr%3Dlang_zh-TW%26tbs%3Dlr%3Alang_1zh-TW%26ei%3DUj9iTPnPLIb8vQP8zeSeCg%26start%3D10%26sa%3DN&amp;fu=0&amp;ifi=1&amp;dtd=328&amp;xpc=WyNxnCUcE1&amp;p=http%3A//www.techbang.com.tw" frameBorder=0 width=728 allowTransparency name=google_ads_frame marginWidth=0 scrolling=no></IFRAME></INS></INS></P>
<P>
<P><A title=Script程式範例 onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/backuprestore.tar.gz');" href="http://www.pcadv.com.tw/wp-content/uploads/backuprestore.tar.gz"><FONT color=#0068b7>Script程式範例下載</FONT></A></P>
<P><STRONG>部份程式解說</STRONG></P>
<BLOCKQUOTE>
<P>實作「backup.sh」<BR>#!/bin/bash</P>
<P>#設定備份資料保存天數<BR>reserveday=30</P>
<P>#設定完全備份天數<BR>fullbackupday=7</P>
<P>#避免重複執行備份程式<BR>[ -e "/tmp/backup.lst" -o "`whoami`" != "root" ] &amp;&amp; exit<BR>[ ! -d "/backup" ] &amp;&amp; mkdir “/backup”</P>
<P>ls –full-time “/backup” | tr -s ” ” | sed 1d &gt; “/tmp/backup.lst”</P></BLOCKQUOTE>
<P>利用ls指令將之前的備份檔清單用stdout的方式重新導入/tmp/backup.lst成為一個純文字檔,並且在導入當中利用sed指令配合參數1d刪除掉第一行的「總計 XXXX」敘述,讓backup.lst清單檔內只留下檔案清單</P>
<P></P>
<DIV class=clear></DIV>
<BLOCKQUOTE>
<P>#在此設定要備份的目錄<BR>for backupdir in “/etc” “/home”<BR>do<BR>#找尋備份目錄最下層目錄名稱做為備份檔主檔名<BR>i=2<BR>while [ "`echo $backupdir | cut -d "/" -f "$i"`" ]<BR>do<BR>i=$(($i+1))<BR>done<BR>backupdirtail=”`echo $backupdir | cut -d “/” -f “$(($i-1))”`”</P></BLOCKQUOTE>
<P>這裡我們利用一個迴圈,簡單的從備份路徑抓備份目錄名稱,放進backupdirtail變數做為備份檔的儲存檔案</P>
<BLOCKQUOTE>
<P>#判斷要進行完全備份還是增量備份<BR>i=1<BR>while [ "$i" -le "`cat "/tmp/backup.lst" | wc -l`" ]<BR>do<BR>backupname=”`sed -n “$i”p “/tmp/backup.lst” | cut -d ” ” -f 6`”<BR>if [ "`date -d $backupname +%s`" -ge "`date -d "$fullbackupday days ago" +%s`" ]; then</P></BLOCKQUOTE>
<P>利用wc指令計算截取的backup.lst備份檔案清單行數,再代入while迴圈中。然後用sed指令取出每一行的內容,再利用grep指令判斷該行所指出的檔案是否為一個fullback檔案,並且是否為目前備份的目錄。如果條件符合,則製作增量備份清單後開始進行增量備份</P>
<BLOCKQUOTE>
<P>#有找到完全備份檔,進行增量備份後結束<BR>if [ "`sed -n "$i"p "/tmp/backup.lst" | grep "fullbackup" | grep "$backupdirtail"`" ]; then<BR>#製作增量備份檔清單<BR>find “$backupdir” -newer “last_backup_time” -type f &gt; /tmp/incbackup.lst 2&gt; /dev/null</P></BLOCKQUOTE>
<BLOCKQUOTE>
<P>if [ -s "/tmp/incbackup.lst" ]; then<BR>#製作已移除檔案清單<BR>sed -n “$i”p “/tmp/backup.lst” | cut -d ” ” -f 9 &gt; “/tmp/tmpfile1″<BR>tar tf “/backup/`cat “/tmp/tmpfile1″`” | awk ‘{print “/”$0}’ &gt; “/tmp/tmpfile2″<BR>j=1<BR>while [ "$j" -le "`cat "/tmp/tmpfile2" | wc -l`" ]<BR>do<BR>[ ! -e "`sed -n "$j"p "/tmp/tmpfile2"`" ] &amp;&amp; sed -n “$j”p “/tmp/tmpfile2″ &gt;&gt; “/backup/$backupdirtail`date +%Y-%m-%d`.rm.lst”<BR>j=$(($j+1))<BR>done</P></BLOCKQUOTE>
<P>這裡我們是利用sed指令的格式化功能代入迴圈$i的變數擷取出每行內容,再配合cut指令擷取/tmp/backup.lst純文字檔清單中的檔名欄位,然後利用awk指令將取出的檔案及路徑最前面加上根目錄位置「/」</P>
<P>接著再取出已經備份的檔案清單並且與新增檔案相比較,如果檔案不存在原本的備份清單中,則將檔案記錄起來,以便還原時能根據清單設定值還原原本的檔案狀態</P>
<BLOCKQUOTE>
<P>#根據清單備份並加上日期<BR>tar zcf “/backup/$backupdirtail`date +%Y-%m-%d`.tar.gz” -T “/tmp/incbackup.lst” 2&gt; “/dev/null”<BR>fi<BR>rm “/tmp/incbackup.lst”<BR>break<BR>fi<BR>fi<BR>i=$(($i+1))<BR>done</P></BLOCKQUOTE>
<P>根據上面製作的新進檔案清單incbackup.lst內容將新進檔案備份起來</P>
<BLOCKQUOTE>
<P>#進行完全備份<BR>if [ "$i" -gt "`cat "/tmp/backup.lst" | wc -l`" ]; then<BR>tar zcf “/backup/$backupdirtail”"`date +%Y-%m-%d`.fullbackup.tar.gz” “$backupdir” 2&gt; “/dev/null”</P></BLOCKQUOTE>
<P>如果在上面的迴圈當中都沒有找到之前備份的封裝檔的話,變數i會一直累加直到超過backup.lst備份清單檔總行數才會脫離迴圈,這裡我們只要判斷變數是否i超過了backup.lst備份清單檔總行數,如果是,則表示沒有找到完全備份封裝,所以開始進行完全備份作業</P>
<BLOCKQUOTE>
<P>#移除超過保存天數的備份檔<BR>i=1<BR>while [ "$i" -le "`cat "/tmp/backup.lst" | wc -l`" ]<BR>do<BR>backupname=”`sed -n “$i”p “/tmp/backup.lst” | cut -d ” ” -f 6`”<BR>if [ "`date -d $backupname +%s`" -lt "`date -d "$(($reserveday-$fullbackupday)) days ago" +%s`" ]; then<BR>rm “/backup/`sed -n “$i”p “/tmp/backup.lst” | cut -d ” ” -f 9`” 2&gt; “/dev/null” || break<BR>fi<BR>i=$(($i+1))<BR>done<BR>fi<BR>done</P></BLOCKQUOTE>
<P>在程序運作當中,有時會出現指令是否成功執行或失敗原因等等的訊息,因為我們的程序已經盡可能針對所有情況撰寫了相關判斷,所以考慮美觀因素,我們將這些訊息重新導向到/dev/null這個虛擬裝置檔案<BR>另外,利用date指令取出備份檔案封裝的建立時間,並且與程序一開始所設定的時間作比較,如果資料保存的天數超過了設定的日期,則將該備份封裝檔案移除</P></DIV>
頁: [1]
查看完整版本: [轉貼]linux資料備份