这是资料整理帖,所有内容来自互联网不同站点的没良心转载(出处无法确定…),对原作者表示感谢。
我现在可以玩弄一款 IBM 8767-HNX的外置磁带机,在RHEL 4中被认成/dev/st0 (还有一个/dev/nst0),来看一下dmesg输出
# dmesg
…………
Attached scsi tape st0 at scsi1, channel 0, id 0, lun 0
st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 4503599627370495
Attached scsi generic sg0 at scsi0, channel 0, id 1, lun 0, type 0
Attached scsi generic sg1 at scsi0, channel 0, id 4, lun 0, type 13
Attached scsi generic sg2 at scsi1, channel 0, id 0, lun 0, type 1
Attached scsi generic sg3 at scsi4, channel 0, id 0, lun 0, type 0
Attached scsi generic sg4 at scsi4, channel 0, id 0, lun 1, type 0
Attached scsi generic sg5 at scsi4, channel 0, id 0, lun 31, type 0
st0: Block limits 1 – 16777215 bytes.
…………
在Linux和UNIX下最常用的磁带机操作命令便是tar,它可以对磁带进行读写、列目录、倒带、擦除等操作,接下来一一介绍。
列出目录:tar cvf /dev/st0
如若磁带上还没有任何文件,运行上面的命令会出错,不过这个错误可以忽略,并不影响使用。
错误信息如下:
英文版:
#tar cvf /dev/st0
tar: /dev/st0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
中文版:
#tar tvf /dev/st0
tar: /dev/st0:无法 read: 输入/输出错误
tar: 处于磁带的起点,现在退出
tar: 错误是不可恢复的:现在退出
—————————————–分割线——————————————–
写入数据:tar cvf /dev/st0 <要写入的文件名>
注:以下文字原封不动copy from internet
写入数据的方法有两种:
不打包直接写入文件和打包压缩后写入文件。
二者各有优缺点。不打包直接写入文件的方法,看起来效率低,操作复杂,但是可以提高数据的生存率。磁带是一种线性存储的设备,所有数据紧挨着顺序写入。当磁带的某一点损坏的时候,其余位置的磁带还可以继续读取,其中的文件也都能读出。如果采用了打包压缩后写入的方法,则磁带上存储的只有一个文件。当磁带有任何一个地方发生了故障无法读取,则这个压缩文件将缺少一些细节,即使是一个bit的错误,也将导致压缩文件报告CRC错误无法解压。所以,如果是存储大量的数据,建议直接写入。如果是存取小文件,则最好打包并给文件名加时间标记写入。
示例:
# ls -lh tape_test.tar
-rw-r–r– 1 root root 50K 8月 6 15:02 tape_test.tar
# time tar cvf /dev/st0 tape_test.tar
tape_test.tar
real 0m3.936s
user 0m0.000s
sys 0m0.002s
# tar tvf /dev/st0
-rw-r–r– root/root 51200 2010-08-06 15:02:21 tape_test.tar
现在,通过 tar tvf /dev/st0 列目录时不再报错,并看到了刚才写入的tape_test.tar文件。
还可以注意到,写入一个50k大小的文件居然要3.9秒,可见磁带机的写入速度是比较慢的,这也意味着一般的数据备份工作放在后半夜比较合适。
续写数据:tar rvf /dev/st0 <要写入的文件名>
磁带存储是线性存储的,所有数据依次写入。为了不覆盖前边的内容,在写入时要使用rvf参数。
如果你仍旧使用cvf参数来写入数据,那么之前的数据将会被覆盖:
# time tar cvf /dev/st0 tape_test2.tar
tape_test2.tar
real 0m3.945s
user 0m0.000s
sys 0m0.002s
# tar tvf /dev/st0
-rw-r–r– root/root 51200 2010-08-06 15:09:50 tape_test2.tar
可以看到,tape_test.tar已经被tape_test2.tar文件所覆盖了。
使用rvf参数的示例:
# time tar rvf /dev/st0 tape_test3.tar
tape_test3.tar
real 0m3.979s
user 0m0.000s
sys 0m0.002s
# tar tvf /dev/st0
-rw-r–r– root/root 51200 2010-08-06 15:09:50 tape_test2.tar
-rw-r–r– root/root 51200 2010-08-06 15:10:49 tape_test3.tar
新增加的tape_test3.tar和之前写入的tape_test2.tar都存在了。
# tar tvf /dev/st0
-rw-r–r– root/root 51200 2010-08-06 15:09:50 tape_test2.tar
-rw-r–r– root/root 51200 2010-08-06 15:10:49 tape_test3.tar
# time tar xvf /dev/st0 tape_test2.tar
tape_test2.tar
real 0m0.024s
user 0m0.001s
sys 0m0.001s
# ls -lh tape_test2.tar
-rw-r–r– 1 root root 50K 8月 6 15:09 tape_test2.tar
使用tar命令的tvf/cvf/rvf/xvf参数,分别可以实现对磁带机的各种不同操作。
接下来,就可以自己写shell脚本,然后扔到crontab里,开始做自动备份吧。