scsitape로는 테이프를 읽을 수 있지만 dd나 tar로는 읽을 수 없습니다. 이유는 무엇입니까?

scsitape로는 테이프를 읽을 수 있지만 dd나 tar로는 읽을 수 없습니다. 이유는 무엇입니까?

방금 EB 테이프 드라이브를 설치했습니다.

$ 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

다음과 같은 테이프에서 읽을 수 있습니다.

$ 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 ]

그러나 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

우리가 본 후에 /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 

읽기 크기를 줄이는 것(예: 사용 tar -f /dev/nst0 -b 1 --record-size=512 -t)은 별 차이가 없는 것 같습니다.

메커니즘은 완전히 다릅니다. 테이프 장치에서 읽기에는 반대를 scsitape read사용 하고 반대 또는 읽기 시스템 호출을 사용합니다 .ioctl/dev/sg2tarread/dev/nst0/dev/st0

/dev/sg2하지만 왜 작동을 통한 액세스가 작동하지 않는지 모르겠습니다 /dev/nst0. 누구든지 이것을 설명할 수 있나요?

중요한 경우 mt-st패키지가 아직 설치되지 않았으므로 파일이 없습니다 /etc/stinit.def. 패키지 mt와 함께 제공되는 바이너리를 사용하고 있습니다 cpio.

답변1

테이프는 고정된 블록 크기로 기록되며 패키지 mt의 명령을 사용하면 mt-st이에 적응할 수 있습니다.

$ mt -f /dev/nst0 rewind
$ mt -f /dev/nst0 setblk 10240
$ tar  -f /dev/nst0  -t
[ files list normally ]

여기서 10240은 20개의 512바이트 블록에 해당합니다(20은 기존 및 기본 블록 요소임 tar).

mt패키지의 바이너리에는 명령이 cpio없기 때문에 이 작업이 불가능합니다.setblk

관련 정보