我刚刚安装了一个 Exabyte 磁带驱动器:
$ lsscsi -g
[11:0:0:0] process Marvell 91xx Config 1.01 - /dev/sg0
[12:0:1:0] cd/dvd TOSHIBA CD-ROM XM-3401TA 0283 /dev/sr0 /dev/sg1
[12:0:5:0] tape EXABYTE EXB-8500-85Qanx0 046G /dev/st0 /dev/sg2
[N:1:4:1] disk Samsung SSD 970 EVO 250GB__1 /dev/nvme1n1
[N:0:4:1] disk Samsung SSD 970 EVO 250GB__1 /dev/nvme0n1
$ /usr/sbin/tapeinfo -f /dev/sg2
Product Type: Tape Drive
Vendor ID: 'EXABYTE '
Product ID: 'EXB-8500-85Qanx0'
Revision: '046G'
Attached Changer API: No
SerialNumber: '02541381 '
MinBlock: 1
MaxBlock: 245760
SCSI ID: 5
SCSI LUN: 0
Ready: yes
WriteProtect: yes
BufferedMode: yes
Medium Type: 0x85
Density Code: 0x0
BlockSize: 1024
DataCompEnabled: no
DataCompCapable: no
DataDeCompEnabled: no
CompType: 0x0
DeCompType: 0x0
Block Position: 15750
ActivePartition: 0
EarlyWarningSize: 0
Run Code Online (Sandbox Code Playgroud)
我可以从这样的磁带中读取:
$ mt -f /dev/nst0 rewind
$ /usr/sbin/scsitape -f /dev/sg2 read 0 > outfile.bin
$ tar tf outfile.bin
[ a list of files in the tar archive ]
Run Code Online (Sandbox Code Playgroud)
但是,我无法以正常方式使用 tar 从磁带中读取:
$ mt -f /dev/nst0 rewind
$ tar tf /dev/nst0
tar: /dev/nst0: Cannot read: Input/output error
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
在/var/log/messages
我们看到:
Jun 29 13:11:00 horizon kernel: [ 9362.244683] Errata on LSI53C1030 occurredsc->req_bufflen=0x2800, xfer_cnt=0x400,difftransfer=0x0a
Jun 29 13:11:00 horizon kernel: [ 9362.244773] st 12:0:5:0: [st0] Sense Key : Medium Error [current]
Jun 29 13:11:00 horizon kernel: [ 9362.244790] st 12:0:5:0: [st0] <<vendor>>ASC=0xff <<vendor>>ASCQ=0xff
Run Code Online (Sandbox Code Playgroud)
减少读取大小(例如使用tar -f /dev/nst0 -b 1 --record-size=512 -t
)似乎没有什么区别。
机制完全不同。scsitape read
使用ioctl
反对/dev/sg2
从磁带设备读取,而tar
使用read
系统调用反对/dev/nst0
或/dev/st0
读取。
但我不知道为什么通过访问/dev/sg2
有效而通过访问/dev/nst0
无效。有人可以解释一下吗?
万一重要,mt-st
包没有安装,所以没有/etc/stinit.def
文件。我正在使用软件包mt
附带的二进制文件cpio
。
Jam*_*man 13
事实证明,磁带是用固定的块大小写入的,使用包中的mt
命令mt-st
允许我们适应这一点:
$ mt -f /dev/nst0 rewind
$ mt -f /dev/nst0 setblk 10240
$ tar -f /dev/nst0 -t
[ files list normally ]
Run Code Online (Sandbox Code Playgroud)
这里的 10240 对应于 20 个 512 字节的块(20 是 的传统和默认块因子tar
)。
这mt
对于cpio
包中的二进制文件是不可能的,因为它缺少setblk
命令。
归档时间: |
|
查看次数: |
480 次 |
最近记录: |