Linux下使用磁帶機的方式有多種,主要有通過Amanda、Tar等軟件進行操作。
Amanda是提供了遠程集中備份的功能,通過分別設置客戶端、服務器端,實現遠程集中存儲備份。而Tar主要用於單機環境下,將數據直接寫入磁帶的備份。針對單一節點的備份,只要簡單的使用Tar命令進行備份、恢復即可。
安裝
對於目前廠家的HP DAT24/40系列外置SCSI磁帶機,都帶有自動回卷功能。將其接在外置SCSI的總線上,並重新啟動服務器。重新引導後,執行dmesg將可以看到新的磁帶機設備叫/dev/st0.
blk: queue ef0d7a14, I/O limit 4095Mb (mask 0xffffffff)
audit subsystem ver 0.1 initialized
(scsi0:A:3): 10.000MB/s transfers (10.000MHz, offset 15)
Vendor: HP Model: C1537A Rev: L805
Type: Sequential-Access ANSI SCSI revision: 02
blk: queue ef0e4614, I/O limit 4095Mb (mask 0xffffffff)
Attached scsi tape st0 at scsi0, channel 0, id 3, lun 0
磁帶操作
裝入磁帶後,可執行如下操作:
倒帶,將磁帶卷至起始位置
mt -f /dev/st0 rewind
擦除,擦掉磁帶上的內容
mt -f /dev/st0 erase
注意:擦除工作非常慢,並且對磁帶有損傷,最好不要執行,當數據寫滿後,可以繼續寫入數據並覆蓋原有數據,無須執行擦除動作。新磁帶打開封裝後立刻可以使用,不需要執行擦除。
出帶,將磁帶卷至初始位置然後從磁帶機內彈出
mt –f /dev/st0 offline
數據操作
基本操作如下:
1. 列目錄操作tar tvf /dev/st0
假如磁帶上沒有任何文件,則列目錄會報錯,這個錯誤沒有關系,不影響磁帶的使用。
[root@dev131 /root]# tar tvf /dev/st0
tar: /dev/st0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
[root@dev131 /root]#
2. 寫入數據操作tar cvf /dev/st0 <要寫入的文件名>
寫入數據的方法有兩種:不打包直接寫入文件和打包壓縮後寫入文件。二者各有優缺點。不打包直接寫入文件的方法,看起來效率低,操作復雜,但是可以提高數據的生存率。磁帶是一種線性存儲的設備,所有數據緊挨著順序寫入。當磁帶的某一點損壞的時候,其余位置的磁帶還可以繼續讀取,其中的文件也都能讀出。如果采用了打包壓縮後寫入的方法,則磁帶上存儲的只有一個文件。當磁帶有任何一個地方發生了故障無法讀取,則這個壓縮文件將缺少一些細節,即使是一個bit的錯誤,也將導致壓縮文件報告CRC錯誤無法解壓。所以,如果是存儲大量的數據,建議直接寫入。如果是存取小文件,則最好打包並給文件名加時間標記寫入。
例如要將/root/test1.tar.gz寫入到磁帶並覆蓋磁帶的內容:
tar cvf /dev/st0 test1.tar.gz
磁帶機的傳輸速度比較慢,對於不是很大的文件備份,稍等幾秒,寫入即可完成。使用參數cvf將覆蓋此帶上的已有文件。
隨後列出磁帶上的文件:
[root@dev131 /root]# tar tvf /dev/st0
-rw-r——r—— root/root 320 2006-12-01 09:29:02
test1.tar.gz
[root@dev131 /root]#
可看到數據寫入成功。
注意:這個命令只能在磁帶是全新的時候寫入,在第二次執行的時候,就會覆蓋掉磁帶上原來的數據。另外,使用tar命令備份,要求備份文件體積必須小於單盤磁帶的容量,即一個文件不能跨越兩盤磁帶。如果遇到這種情況,則不能使用tar命令備份,需要換其他備份程序進行操作。
3. 繼續寫入數據tar rvf /dev/st0 <要寫入的文件名>
磁帶存儲是線性存儲,所有數據是依次寫入的。為了不覆蓋前邊的內容,在寫入時候,要使用rvf參數寫入內容。
tar rvf /dev/st0 test2.tar.gz
再執行一次rvf繼續寫入其他的文件:
tar rvf /dev/st0 test3.tar.gz
寫入完成後,查看磁帶上有哪些文件:
[root@dev131 /root]# tar tvf /dev/st0
-rw-r——r—— root/root 320 2006-12-01 09:29:02
test1.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:44:19
test2.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:30:14
test3.tar.gz
[root@dev131 /root]#
可以看到,新寫入的文件和原文件都存儲在了磁帶上。
磁帶的線性存儲特性,使得磁帶上可以寫入兩次相同的文件。例如現在test3文件發生了文件大小的變化,再次寫入到磁帶:
tar rvf /dev/st0 test3.tar.gz
查看文件列表,可以看到磁帶上有如下文件:
[root@dev131 /root]# tar tvf /dev/st0
-rw-r——r—— root/root 320 2006-12-01 09:29:02
test1.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:30:14
test2.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:44:19
test3.tar.gz
-rw-r——r—— root/root 67085 2006-12-01 09:44:19
test3.tar.gz
[root@dev131 /root]#
這裡可看到,磁帶上有兩個文件同名的文件寫入。這個文件的兩次備份大小和時間可以相同,也可以不相同。
注意:在磁帶上如果相同文件寫入了多次,在恢復時候會比較麻煩,需要先將磁帶卷至文件所存儲的地方,而後讀取磁帶當前位置所存儲的文件,操作較為復雜,速度也比較慢。所以不建議在一盤磁帶上寫入相同文件名的文件。備份前,最好將備份文件的文件名上加上時間標記,便於查找備份。例如要備份的文件名是test- 20061201-0930.tar.gz和test-20061201-0945.tar.gz,則寫入到一盤磁帶上。如此在執行備份和恢復操作時候,能夠更加便利快捷的進行存取操作。
4. 讀取數據tar xvf /dev/st0 <要讀取的文件名>
讀取數據前,首先查看磁帶上的內容,獲取要恢復的文件名。例如查看後得到如下結果:
[root@dev131 /root]# tar tvf /dev/st0
-rw-r——r—— root/root 320 2006-12-01 09:29:02
test1.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:30:14
test2.tar.gz
-rw-r——r—— root/root 320 2006-12-01 09:44:19
test3.tar.gz
[root@dev131 /root]#
現在恢復其中的test3.tar.gz文件,執行如下命令:
tar xvf /dev/st0 test3.tar.gz
讀取數據後。
[root@dev131 ~]# tar xvf /dev/st0 test3.tar.gz
test3.tar.gz
[root@dev131 ~]#
隨後可以在當前的路徑下找到從磁帶中讀取出來的文件:
[root@dev131 ~]# ls -l test3.tar.gz
-rw-r——r—— 1 root root 320 Dec 1 11:12
test3.tar.gz
[root@dev131 ~]#
至此恢復操作完成。
通過上文所介紹的tar命令,使用tvf/cvf/rvf/xvf參數,即可實現對磁帶的讀取、寫入操作。使用預先寫好的復制數據腳本,配合上磁帶機操作命令,並且放置到/etc/crontab中,即可實現自動備份