星期四, 10月 14, 2004

[os] linux 資料備份 工具大全

分片

(用法一):

  1. 先用 tar/gzip 將您的檔案壓起來。
  2. 如果您要將檔案 infile 分成數個 400k 為單位的小檔案的話,用這個指令:
    split -b 400k infile out-
    則就會產生 out-aa, out-ab, out-ac .... 等檔案,每個大小都是 400k。
  3. 如果要將這些檔案合併還原,則:
    cat out-* > infile
    即可。
(用法二)
tar 指令

Device selection and switching:
-M, --multi-volume create/list/extract multi-volume archive
-F, --info-script=FILE run script at end of each tape (implies -M)
--new-volume-script=FILE same as -F FILE
--volno-file=FILE use/update the volume number in FILE

建立一個多volume的作法
如果你的備份是一個磁片不能容納,你需要使用-multi-volume (-M)選項﹕

# tar -cMf /dev/fd0H1440 /usr/src
tar: Removing leading / from absolute path names in the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:

不加入子目錄的作法
tar -czvf gzfilename /home/marx --no-recursion(扣除現行目錄的子目錄) --totals(顯示容量等訊息)

增量備份?
(方法三) 利用rsh 來指定輸出到某一臺server上

對于本地機,我們可以使用tar命令,將要備份的內容(在此為/home目錄)寫到標準輸出,然后通過管道傳遞到小型機server,利用dd命令將要備 份的內容寫到磁帶上,/dev/rmt/0m為磁帶機設備名,bs指定了塊的尺寸為102400字節,其大小會直接影響到備份的速度。另外,建議以超級用 戶root進行備份和恢復工作。
1. 對于AT&T UNIX的client01:
#tar cvf - ./home | rsh server dd of=/dev/rmt/0m bs=102400
2. 對于SCO UNIX的client02:
#tar cvf - ./home | rcmd server dd of=/dev/rmt/0m bs=102400
恢復方法
我們可以將備份數據恢復在任意指定的地方,在此,我們將home恢復在當前目錄“."。
1. client01 #rsh server dd if=/dev/rmt/ 0m bs=102400 | tar xvf - .
2. client02 #rcmd server dd if=/dev/ rmt/0m bs=102400 | tar xvf - .
使用上述方法進行備份和恢復,會自動備份和恢復文件的用戶、組和讀寫權限等屬性。另外,如果需對整個硬盤進行備份與恢復,建議用戶在熟悉UNIX文件系統 細節的基礎上進行,特別是對于AT&T UNIX,啟動是用stand文件系統,而不象SCO UNIX是用/文件系統,有興趣的讀者可以一試。

(方法四) 鳥歌的私房菜

備份工具 ,有他寫好的每日 與 每週的資料備份 script ,可供參考

(方法五) 完整的五個資料備份工具,來自 網頁

與磁帶的讀寫數據有關的命令

主要包括5個命令:
cpio, dd, ufsdump, ufsrestore, tar

命令:cpio
cpio其實就是:copy in/out,從標準輸入中讀取要拷貝的文件,并將其寫入到標準輸出。這個命令是很常用的,但是要重定義標準輸入和輸出。當需要使用多于一個磁帶時,可以使用這個命令。
1. 拷貝目錄 /work及所有子目錄到磁帶 /dev/rmt/0
# cd /work
# ls –R | cpio –ocB > /dev/rmt/0

2. 將磁帶中的文件拷貝回/work目錄
# cd /work
# cpio –icBd < /dev/rmt/0

o ---- copy out,讀取標準輸入,獲得文件列表,拷貝這些文件到標準輸出
i ---- copy in,從標準輸入擴展文件
c ----標識了頭信息已經以ASCII方式被寫入
d ----創建所需的目錄
B ----這是必須使用的,標識著輸入是以塊的方式被記錄

命令:dd
這個命令可以對不同數據格式的文件進行轉換并拷貝。當從你的硬盤遷移一個文件系統或分區時可以使用這個命令。你也可以使用它來進行從一個硬盤到另一個硬盤的數據拷貝。如果拷貝時,你指定了變量塊的大小,那么,你在恢復時,也要指定相同的變量塊。
1. 拷貝文件系統:/user/sunsystem到一個磁盤設備:/dev/rmt/0
# dd if=/dev/dsk/c0t0d0s7 of=/dev/rmt/0 bs=63k

命令:ufsdump
這個命令可以從一個硬盤拷貝一個文件系統或目錄到磁帶。它被設定為備份命令,支持多個卷及增量備份。注意一下,這里,所有的文件必須是同一個文件系統的一部分或在一個分區,而且你必須是superuser
1. 將所有位于:/dev/rdsk/c0t3d0s0下的文件拷貝到一個稱為:/dev/rmt/0的dump文件
# ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0
0 ----表示dump的級別。級別0拷貝全部的文件系統到磁帶中,有效的級別為0---9, 1---9執行的是增量備份,只會拷貝在當前時間后改變的文件。
u ----表示如果成功的話,則對文件:/etc/dumpdates中的dump記錄使用時間戳做一次更新
f ----指定dump文件(邏輯設備名或磁帶設備)。f參數后,必須要跟隨一個文件名,在本例中是:/dev/rmt/0
/dev/rdsk/c0t3d0s0包含你想要將文件寫入磁帶的源名字。

命令:ufsrestore
這個命令從一個磁帶拷貝文件系統到一個硬盤。它只能拷貝由ufsdump創建的文件。
它必須使用以下的三個參數中的一個:
i ----(交互)從介質中讀取目錄信息后,ufsrestore調用一個交互式接口允許你瀏覽dump文件的層次結構,并選擇文件進行擴展
r ----(遞歸)將介質中的全部內容恢復到當前目錄(它將是文件系統中的頂級),為了完整的恢復一個文件系統,要使用這個參數來恢復級別為0的dump,并再次恢復每個增量dump。
t ----(內容列表)提供磁帶中的所有文件列表

以下的參數為不是必須的:
f ----(dump文件)指定從哪里恢復dump文件。如果dump文件沒有被指定,那么,ufsrestore將使用 /dev/rmt/0
v ----(詳細模式)顯示從磁帶中讀取的路徑名

1. 舉個例子,如下:
# cd /work
# ufsrestore if /dev/rmt/0
ufsrestore> ?
Available commands are:
ls [arg] - list directory
cd arg - change directory
pwd - print current directory
add [arg] - add ‘arg' to list of files to be extracted
delete [arg] - delete ‘arg' from list of files to be extracted
extract - extract requested files
setmodes - set modes of requested directories
quit - immediately exit program
what - list dump header information
verbose - toggle verbose flag (useful with ‘‘ls'')
help or ‘?' - print this list
IF no ‘arg' is supplied, the current directory is used

ufsrestore> ls
4lib/ dict mail openwin spool
5bin games man/ preserve src
adm include/ net pub tmp

使用命令:add來增加要擴展的文件和目錄到文件列表
ufsrestore> add mail man

現在,從磁帶中擴展這些文件,它們將被釋放到你當前的工作目錄:
ufsrestore> extract

當你所需要的文件被擴展后,就可以退出ufsrestore了
ufsrestore> q

命令:tar
一個tarfile通常是一個磁帶,但它可能是任何文件。如果數據總量超過了一個磁帶,你就需要使用一個不同的磁帶命令,因為tar命令不可以跨多個卷。
1. 下例顯示如果從硬盤拷貝數據到磁帶
# tar cvf /dev/rmt/0 /work

參數:
c ----創建tar文件(在本例中寫入到磁帶)
v ----顯示它所拷貝的每個文件的信息(詳細模式)
f ----指定源設備名,本例中為/dev/rmt/0

2. 下例顯示如何從磁帶中拷貝文件到硬盤
# cd /tmp
# tar xvf /dev/rmt/0

x ----表示從tar文件中擴展文件
-------------------------------------------------------------------------
補充tar
b 指定在每一次讀取和寫入操作中使用的磁帶塊的號碼
h 歸檔通過符號鏈接訪問的文件
i 在檔案的創建過程中忽略校驗和錯誤
k 指定擋案大小(千字節),如果檔案大于這個大小就分拆
o 將所有檔案文件的用戶和組所有關系修改為當前所有者