Подняли старый архив с целью переписать его на LTO.
Естественно никто не помнит ни кто писал ни как писал эти ленты. А происходит с ними следующее:# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x0)= No Additional Sense residual= 0 retries= 0
file no= 0 block no= 0пытаемся копировать
# tcopy /dev/rmt/9n test1
file 1: record 1: size 2696
file 1: records 2 to 579: size 10056
file 1: eof after 579 records: 5815064 bytes
Write EOF: Inappropriate ioctl for deviceне пойму - лента битая или размер блока не нравится?
но вперёд продвинулись:# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x12)= EOF residual= 0 retries= 0
file no= 1 block no= 0но потом уже ничего скопировать нельзя
# tcopy /dev/rmt/9n test2
file 1: eof after 0 records: 0 bytes
Write EOF: Inappropriate ioctl for deviceи tarом тоже не копируется:
# tar xvf /dev/rmt/9n
tar: tape read error
# tar xvf /dev/rmt/9n test3
tar: tape read error
либо
# tar xvf /dev/rmt/9n
tar: blocksize = 0перемотки работают, но не все:
# mt -f /dev/rmt/9n fsf 2
сработало
# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x0)= No Additional Sense residual= 0 retries= 0
file no= 3 block no= 0
# mt -f /dev/rmt/9n eof
сработало
# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x0)= No Additional Sense residual= 0 retries= 0
file no= 4 block no= 0
но и fsf не всегда срабатывает:
# mt -f /dev/rmt/9n fsf 5
/dev/rmt/9n fsf 5 failed: I/O error
не сработало
# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x8)= Blank Check residual= 0 retries= 0
file no= 4 block no= 0и когда fsf не срабатывает, у него sense key не 0x0, а то 0x8, то 0x13
а bsf вообще всегда скидывает на начало ленты# mt -f /dev/rmt/9n bsf 4
/dev/rmt/9n bsf 4 failed: I/O error
не сработало
# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x15)= BOT residual= 0 retries= 0
file no= 0 block no= 0# dd if=/dev/rmt/9n of=/mnt/test bs=60k count=1
0+0 records in
0+0 records out
# mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x12)= EOF residual= 0 retries= 0
file no= 0 block no= 0и ещё в /usr/local/bin/ нет ioctl
я просто думал, что может он прояснит ситуацию с блоками?
хотя никогда с ним не сталкивался, только сейчас пытаюсь понять что же это такое?если что:
# uname -a
SunOS blade 5.8 Generic_117350-18 sun4u sparc SUNW,Sun-Blade-1000
Ничего не пойму.
Может само устройство нагнулось?
Есть какие-то средства протестировать?# tar tvf /dev/rmt/9n
tar: tape read error# tar xvfb - 512k /dev/rmt/9n test4
зависает при любом размере блока - всякие перепробовал# pax -l -f /dev/rmt/9n
pax: No input# cpio -civt < /dev/rmt/9n
End of medium on "input".
To continue, type device/file name when ready.Уже и не знаю, что ещё попробовать.
В общем устройство рабочее.
Ленточки, на которые что-то писалось tarом - читаются.
А на эти ленты, которые я не могу прочитать, оказывается записаны сейсмические файлы в некоемом формате SEG-D
http://74.125.77.132/search?q=cache:o9V6GANBKcMJ:www.seg.org...
Прочитал несколько статей про этот формат, но не узрел информации, которая могла бы меня спасти.Дело в том, что до этого всегда с этих ленточек загоняли данные сразу в специальную сейсмическую программу ProMAX - она эти ленты читает легко, но она данные сразу при считывании конвертирует в другой сейсмический формат seg-y.
А так как сейчас идёт просто перевод архивов со старых лент на новые, то формат необходимо оставить seg-d.В общем появилось ещё 2 мысли:
1. Слышал, что во времена бобин была какая-то утилита, которая тупо прокручивала всю ленту и выдавала информацию о количестве файлов, размерах блоков, метках, концах и началах файлов.
Есть ли что-то подобное сейчас под Solaris 8?2. Может быть есть какая-то утилита, которая будет тупо считывать всё в один большой файл, не взирая на метки и концы и начала файлов? Всё равно cейсмики потом для работы все эти мелкие файлы сгоняют в один.
В общем нашёл в интернете утилиту segd2diskНо и оно не помогло.
Тут я всё-таки заподозрил ленты в убитости и пришлось перебрать большую кучу лент, чтобы найти таки рабочую, либо всё же записанную как-то по-другому. Хотя и в ней идёт два EOF подряд, а как их обходить я так и не понял. Ну ясно дело, что я написал скрипт, который сам запускает копирование следующего файла, но думаю, что есть стандартные методы.prouser(blade)/bigsan4/A>touch test1
prouser(blade)/bigsan4/A>tcopy /dev/rmt/9n test1
file 1: record 1: size 2656
file 1: records 2 to 515: size 10056
file 1: eof after 515 records: 5171440 bytes
Write EOF: Inappropriate ioctl for deviceprouser(blade)/bigsan4/A>mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x12)= EOF residual= 0 retries= 0
file no= 1 block no= 0prouser(blade)/bigsan4/A>touch test2
prouser(blade)/bigsan4/A>tcopy /dev/rmt/9n test2
file 1: record 1: size 2656
file 1: records 2 to 515: size 10056
file 1: eof after 515 records: 5171440 bytes
Write EOF: Inappropriate ioctl for deviceprouser(blade)/bigsan4/A>mt -f /dev/rmt/9n status
Exabyte EXB-8500 8mm Helical Scan tape drive:
sense key(0x12)= EOF residual= 0 retries= 0
file no= 2 block no= 0prouser(blade)/bigsan4/A>touch test3
prouser(blade)/bigsan4/A>tcopy /dev/rmt/9n test3
file 1: record 1: size 2656
file 1: records 2 to 515: size 10056
file 1: eof after 515 records: 5171440 bytes
Write EOF: Inappropriate ioctl for deviceprouser(blade)/bigsan4/A>ls -al
total 31648
drwxrwxrwx 3 99 99 4096 Sep 30 06:58 .
drwxrwxrwx 153 root root 12288 Sep 29 05:38 ..
-rwxrwxrwx 1 prouser prouser 619624 Sep 30 04:12 segd2disk
-rw-r--r-- 1 prouser prouser 5171440 Sep 30 06:46 test1
-rw-r--r-- 1 prouser prouser 5171440 Sep 30 06:57 test2
-rw-r--r-- 1 prouser prouser 5171440 Sep 30 06:58 test3А утилита segd2disk пишет один файл 1.sgd и останавливается, думая, что лента кончилась и тоже выдаёт какую-то ошибку (об этом я обнаглев написал разработчикам этой утилиты):
prouser(blade)/bigsan4/A>segd2disk /dev/rmt/9n /bigsan4/A
*** ERROR *** Disk file write error on unit 8, status = -1
wrdisc: Invalid argumentЗапуская её второй раз она пишет второй файл, но перезаписывая файл 1.sgd, поэтому приходится его перед этим переименовывать.
В общем проблема оказалась в битости лент. Но данные с них всё равно нужны, так что возращаюсь к ним.
А есть для лент что-то типа scandisk или fsck?
>В общем нашёл в интернете утилиту segd2diskразмер блока
tcopy /dev/rmt0
посмотри потом попробуй с -s maxblk