Skip to content
Advertisement

Write magnetic tape end of record linux

Task is create two record with different sizes within one file entry. I’m using python 3.4.5 for testing:

import fcntl
import os
import struct

MTIOCTOP = 0x40086d01  # refer to mtio.h
MTSETBLK = 20

fh = os.open('/dev/st2', os.O_WRONLY )
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 1024))
os.write(fh, b'a'*1024)
fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 2048))
os.write(fh, b'b'*2048)
os.close(fh)


[root@dev2 mhvtl]# tcopy /dev/st2
file 0: block size 4096: 1 records
file 0: eof after 1 records: 4096 bytes <<< should be 2 records
eot
total length: 4096 bytes
[root@dev2 mhvtl]# ^C

Is there an ioctl opt code that will initiate a new record on the tape with variable record length. Or any other way to work around this bug?

Advertisement

Answer

Issue was with tcopy, it uses block size on device instead of detecting it.

fcntl.ioctl(fh, MTIOCTOP, struct.pack('hi', MTSETBLK, 0))

after last write allowed tcopy to display data as intended.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement