您的位置:首页 > 运维架构 > Linux

Linux、UNIX 下磁带机设备(Tape)的管理和使用

2010-05-31 17:01 267 查看
磁带机简介

目前市场上有很多自称是“完美的系统备份选择”的设备,包括磁带机,便携式磁盘驱动器,甚至还有一些神秘的Internet备份系统。对于备份操作来说,
还是磁带机提供了最可信的存储方式。为什么是磁带机呢?当然,Iomega公司的Jaz或Zip驱动器看上去是令人感兴趣的备份工具,但是它们易于在硬盘
驱动器崩溃的情况下因为文件系统的原因而出现问题。对于Internet备份来说,当你因为系统崩溃而不能访问互联网时,就不能恢复系统的数据。同样,你
能真正信任你的数据存放在别人的远程系统中么?因此,我们选择了磁带机,但是如何访问磁带机呢?正如Linux、UNIX系统的设备一样,在Linux、
UNIX系统中,从用户的角度来看,任何设备都可以看做是文件。因此,可以“打开”合适的磁带驱动器文件来进行写入操作,将要备份的数据写入到文件中去。
虽然这听上去过于简单了,但是实际情况就是这样。Linux、UNIX环境下根文件系统的/dev目录包含了所有和物理设备关联的文件。当对这些文件进行
操作时,实际上是在操作下层的物理设备。
磁带机设备的关联

下表举例说明了在Linux环境下设备文件是如何和物理设备关联起来的。

正如表中看到的那样,设备名是基于位于针对这种设备类型的分层结构的设备的逻辑数字,而不是其物理ID(SCSI)或者IDE通道(ATAPI)。因此,
即使某个SCSI磁带机被分配为SCSI设备的ID4,如果它是SCSI链的第一个磁带设备,则它将是 /dev/st0,
而不是/dev/st4,这种命名惯例有利于跟踪系统中的磁带设备时也适用,甚至在拥有多个驱动类型的磁带设备时也适用。同样,在2.0.X内核下,只支
持单个ATAPI设备,2.2版本的内核可以使用多个ATAPI驱动(例如ht0, ht1,...等)。

现在我们来看看这些文件是如何被命名的,回卷和不回卷的区别在哪里呢?简单的说,回卷设备允许在结束操作以后,自动将磁带回卷到开始处,而不回卷设备在操
作结束以后,将磁带机停留在当时的位置而不进行回卷操作。对于大多数简单备份操作,回卷设备更适合一些,因为在备份操作结束以后其自动回卷以准备取出磁
带。而对于那些复杂的备份操作(如附加备份,逻辑搜索及那些高端备份工具的操作),不回卷设备更适合一些。

在UNIX环境下,磁带机设备文件和物理设备关联的情况就比较复杂了,要和磁带机的类型以及UNIX系统的类型而变,下表只举例说明常用的Sun
Solaris操作系统下磁带机设备文件和物理设备关联的情况。
磁带机的命令

下面介绍一下磁带机的读写命令和操作管理命令,最常用的磁带机读写命令是tar,
它可以对磁带进行列目录、读和写目录文件,下面是对磁带机读写命令的介绍:

列磁带目录:tar tvf 磁带机设备文件名

首次写入磁带:tar cvf 磁带机设备文件名 欲记录的文件或目录名

增量写入磁带:tar rvf 磁带机设备文件名 欲记录的文件或目录名

读磁带: tar xvf 磁带机设备文件名 欲读出的文件或目录名

注:上面的磁带机设备文件名即指磁带机设备在Linux、UNIX系统中的关联缩写。磁带机的其他操作命令和更详细的使用说明可参考tar的man
page。

磁带机读写命令举例:

$ tar tvf /dev/rmt/0h/* 列磁带目录*/

$ tar cvf /dev/rmt/0h/usr2/ora_bak/full01.dmp.gz /* 首次写入磁带 */

$ tar rvf /dev/rmt/0h/usr2/ora_bak/full02.dmp.gz /* 增量写入磁带 */

$ tar xvf /dev/rmt/0h /usr2/ora_bak/full02.dmp.gz /* 读磁带 */

最常用的磁带机操作管理命令是mt, mt命令是操作磁带机的一个很常用的命令,
利用它可以十分方便地管理磁带机设备,下面是对磁带机操作管理命令的介绍:

拉紧磁带:mt -f 磁带机设备文件名 retension

倒带: mt -f 磁带机设备文件名 rewind

列出磁带机状态:mt -f 磁带机设备文件名 status

擦掉数据:mt -f 磁带机设备文件名 erase

注:关于mt命令更详细的使用说明可参考mt的man page。

磁带机操作管理命令举例:

$ mt -f /dev/rmt/0h retension /* 拉紧磁带 */

$ mt -f /dev/rmt/0h rewind /* 倒带 */

$ mt –f /dev/rmt/0h status /* 列出磁带机状态 */

$ mt -f /dev/rmt/0h erase /* 擦掉磁带数据 */

这样,在Linux、UNIX系统下对磁带机进行管理和使用的方法就给大家介绍完了,磁带机设备是网络和系统管理员经常使用的设备,关于这方面的资料也比
较少,所以针对这个现象,撰写此搞供大家阅读。

设备(Device) 回卷(Rewinding) 不回卷(No-Rewind)

1st SCSI tape drive /dev/st0 /dev/nst0

2nd SCSI tape drive /dev/st1 /dev/nst1

nth SCSI tape drive /dev/st[n-1] /dev/nst[n-1]

1st ATAPI tape drive /dev/ht0 /dev/nht0

2nd ATAPI tape drive /dev/ht1 /dev/nht1

nth ATAPI tape drive /dev/ht[n-1] /dev/nht[n-1]

另一篇文章
Redhat Enterprise Linux 磁带机简单操作
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: 02blk: 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/st0tar: /dev/st0:
Cannot read: Input/output errortar: At beginning of
tape, quitting nowtar: 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.gztest3.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中,即可
实现自动备份。
=============================================================
/dev/st0 和/dev/nst0 的区别

在sles(SUSE Linux Enterprise
Server)9里,常用磁带机设备有两组/dev/st[0-9]和/dev/nst[0-9],数字表示磁带机的数目,如果只有一个磁带机,那就是
/dev/st0和/dev/nst0。这个是一个非常重要的概念,只有清晰理解了这些不同名字的设备的区别,才能正确使用相关的命令。

假设我们的系统里面只有一个磁带机设备,那么就有两个设备文件:/dev/st0和/dev/nst0。这两个设备都是这台磁带机的设备名,/dev
/st0是回卷设备,每次操作完成之后,磁带机都会自动回卷到磁带的开头。这时候如果进行备份操作则会覆盖磁带中的数据信息,而不是将新数据附在磁带数据
结束处。/dev/nst0是非回卷设备,每次操作完成之后,磁带机的磁头都会停留在当前位置,随后的备份操作将被添加到上次备份结束以后的地方。但是用
非回卷设备是无法自动回卷磁带的,如果要完成备份和恢复的操作还需要使用mt命令来对磁带进行操作。下面分别对两种设备的操作方法做简单的介绍。

一.回卷设备/dev/st0

由于回卷设备会自动回卷磁带,所以使用/dev/st0只能保存一个归档文件,任何新写入的文件都会覆盖原来的文件,但是这种设备的使用方法比较简单。磁
带备份主要使用tar命令

1.备份文件到磁带

#tar cvf /dev/st0 filename1 filename2

例:备份/etc下的文件到磁带机

#tar cvf /dev/st0 /etc/*

2.查看磁带中备份文件

#tar tvf /dev/st0
3.恢复磁带中备份文件

#tar xvf /dev/st0

二.非回卷设备/dev/nst0

非回卷设备不会自动回卷磁带,所以使用/dev/nst0可以在磁带上保存多个归档文件,但是备份必须使用mt命令来控制磁带转动来结合tar命令使用,
操作上相对比较复杂。

mt命令最重要的功能就是定位磁带,在使用非回卷设备的时候需要使用mt命令来定位磁带才能正常的使用tar命令进行备份和恢复。mt详细的用法可以参考
man手册,下面介绍几个最常用的用法。mt的命令格式:

mt -f 设备名 操作

-f 参数后面跟着一个设备名,就是磁带设备的名字,例如/dev/nst0。

除了设备名这个参数外,mt有一个必须有的参数,就是操作,最常用的操作有:

status 检查磁带机状态

fsf n 前进n个文件

bsf n 后退n个文件

======================================

磁带机的简单使用

环境:Ubuntu 7.04 feisty, HP DAT-72
usb外置磁带机。

基本概念

磁带是线性存储设备,没有什么分区表的概念,磁头在哪里,就从哪里开始读。
磁带机好像只能用root用户操作。
磁带上可以划分存储空间,每个存储空间有一个file number,从0开始顺序排列。
磁头在存储空间中的位置用block number来表示,0代表开始,大于0的整数代表块,比如39代表磁头在本file
number的第39块的位置,而-1则代表磁头位于本file number的结尾。
同样一部磁带机,用/dev/st0时是当自动回卷设备使用,每次操作完成之后,磁头都返回file number=0, block
number=0, BOT的位置;而用/dev/nst0调用时,操作完成时磁头就停在那个位置,不会回到开头。
使用nst非回卷方式,用tar tvf列文件,只有当block number=0时才能出内容,并且列完之后block
number为大于0的整数,注意这并不代表本段存储空间的结尾(-1)。

由于磁带机本身具有压缩功能,所以添加文件的时候不建议指定zip或者bz2压缩,因为如果一点点压缩后的数据损坏,会导致全部内容不可识别;如果
的确需要压缩的话,可以压缩成本地文件再存储到磁带上,减少对其他文件的影响。

自动回卷的使用方式

这种方式比较简单,用tar直接操作即可,基本上和tar操作本地文件相同。
往新磁带上存储文件,注意如果磁带上已有文件,会被覆盖掉:
tar cvf /dev/st0 file_to_store

向磁带上添加文件:
tar rvf /dev/st0 file_to_store

更新磁带上的同名文件:
tar uvf /dev/st0 file_to_store

列出磁带上的现有文件:
tar tvf /dev/st0

删除磁带上的文件:
tar vf /dev/st0 --delete file_to_delete

但我使用这个命令的时候总是提示错误,文件倒是删掉了,可查看的时候也总有错误信息,难道是无法删除,或者只能全部xvf出来再存到磁带上?不过我
们也应当养成一个好的习惯,每次向磁带机存储文件的时候一定要在文件名中带上日期标记。

非自动回卷的使用方式

一般这样使用,都是用到多个存储空间file number的时候;如果还是一个存储段,只是手工移动文件指针就没有什么意义了。
在操作上,文件的存储方式和自动回卷是基本相同的,不同之处在于要注意磁头的位置,并且手工进行必要的位移,以一个新磁带的操作为例来说明
(status我只截取有用的部分显示):
# mt -f /dev/nst0 status
file number = 0
block number = 0
General status bits on (41010000):
BOT ONLINE IM_REP_EN

存入一个新的文件A:
# tar cvf /dev/nst0 A
A
# mt -f /dev/nst0 status
file number = 1
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

注意这时磁头已经移动到了第二段存储空间了,现在再存入一个新的文件B,当然B和A是不在一个存储空间中的:
# tar cvf /dev/nst0 B
B
# mt -f /dev/nst0 status
file number = 2
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

磁头又移动到第三段存储空间了,如果要查看刚才存的第二段存储空间中的内容,需要先移动磁头:
# mt -f /dev/nst0 bsf 2
# mt -f /dev/nst0 status
file number = 0
block number = -1
General status bits on (1010000):
ONLINE IM_REP_EN

# mt -f /dev/nst0 fsf 1
# mt -f /dev/nst0 status
file number = 1
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

由于有存储空间结束标记,所以这里采用退2进1的方式,详细的磁头移动方式可以看man mt。然后查看文件列表:
# tar tvf /dev/nst0
-rw-r--r-- root/root  21194792 2007-10-24 11:37 B
# mt -f /dev/nst0 status
file number = 1
block number = 2070
General status bits on (1010000):
ONLINE IM_REP_EN

列出文件列表之后,磁头停在了文件结束的位置,但不是存储空间的结尾。现在移动磁头到本段存储空间的开始,并且添加文件C:
# mt -f /dev/nst0 bsf 1
# mt -f /dev/nst0 status
file number = 0
block number = -1
General status bits on (1010000):
ONLINE IM_REP_EN

# mt -f /dev/nst0 fsf 1
# mt -f /dev/nst0 status
file number = 1
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

# tar rvf /dev/nst0 C
C
# mt -f /dev/nst0 status
file number = 2
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

首先还是要移动磁头,到这里基本上可以发现mt的fsf和bsf的规律了,fsf是磁头向前移动,并且总是停留在block number =
0的位置,而bsf是磁头向后移动,总是停留在 block number =
-1的位置。添加完成文件之后,磁头又定位到了第三个存储空间(下一个)的开始。现在我们依然是移动磁头到第二段存储空间开始,并且用覆盖方式添加文件
D:
# mt -f /dev/nst0 bsf 2
# mt -f /dev/nst0 fsf 1
# mt -f /dev/nst0 status
file number = 1
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

# tar cvf /dev/nst0 D
D
# mt -f /dev/nst0 status
file number = 2
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

文件D是用覆盖方式添加的,所以刚才添加的文件B和C现在应该都消失了:
# mt -f /dev/nst0 bsf 2
# mt -f /dev/nst0 fsf 1
# mt -f /dev/nst0 status
file number = 1
block number = 0
General status bits on (81010000):
EOF ONLINE IM_REP_EN

# tar tvf /dev/nst0
-rw-r--r-- root/root  34201298 2007-10-24 11:57 D
# mt -f /dev/nst0 status
file number = 1
block number = 3341
General status bits on (1010000):
ONLINE IM_REP_EN

完成,回卷磁带,从开始一直tvf:
# mt -f /dev/nst0 rewind
# tar tvf /dev/nst0
-rw-r--r-- root/root    341054 2007-10-24 11:37 A

# tar tvf /dev/nst0
# tar tvf /dev/nst0
-rw-r--r-- root/root  34201298 2007-10-24 11:57 D

# tar tvf /dev/nst0
# tar tvf /dev/nst0

# tar tvf /dev/nst0
tar: /dev/nst0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now

# mt -f /dev/nst0 status
file number = 2
block number = -1
General status bits on (9010000):
EOD ONLINE IM_REP_EN

现在,能看懂这个了么?我用空行隔开的位置正好是block number为0的位置。还有一些其他的操作就比较简单了:
出带,将磁带卷至初始位置然后从磁带机内弹出
# mt –f /dev/nst0 offline

清除磁带中的所有内容,特慢,还伤带,轻易不要用
# mt –f /dev/nst0 erase

我的几个疑问

如何删除file number?
既然磁带是线性存储,如果向前面一个file number中添加中间,存储空间不够怎么办?
如何查看磁带剩余空间?

小结

搞明白磁带机的存储方式和基本操作,用起来就简单了。个人感觉如果要存的文件数量不多,尤其是只需要存几个大文件的情况,直接用自动回卷方式,只使
用一个存储空间就可以了,这样操作比较简单。如果一定要用磁带存储复杂结构的数据,可以考虑手工在各个存储空间之间来回切换的方式,原理都是一样,只是更
高一点点的技巧和小心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 职场 unix