главная / полезное... / Записки про Linux / streamer

streamer

 

12:13 am - Ленточный червь (осваиваем стриммер)

https://vlamios.livejournal.com/851.html

Давеча практиковал архивирование на ленту. В конторе стоит бэкап-сервер со стримером Ultrium 2-SCSI. В ходе практики выяснил, - в каталоге /dev стример обозначен дважды:
/dev/st0 
/dev/nst0
НО, есть разница. Устройство st0 автоматически перематывает ленту после записи файла (или данных) независимо от его размера, и таким образом на кассету можно поместить только один файл. Следующий файл перезапишет имеющийся. Следовательно, такие ключи команды mt как fsf, bsf (т.е. поиск определенного фрагмента пленки) и т.п. - не доступны.
А устройство nst0 пленку не авто перематывает, т.е. если последовательно писать файлы, то они так и будут располагаться. НО, например, мы запишем три файла на кассету размером по 10 MB. Дальше дадим команду mt -f /dev/nst0 rewind (отмотать пленку на начало) и запишем один файл 5 MB, то несмотря на то, что он физически затрёт только первый файл, и то не полностью, последующие файлы тоже будут считаться удаленными.

О команде mt. Сия команда позволяет работать только с кассетой (т.е. не с данными). Она позволяет отмотать кассету, стереть её всю, отмотать пленку до определенного файла, поставить метку и потом найти её. Даже позволяет снять статический заряд с пленки, хотя не уверен, что это необходимо для современных устройств. Писать и считывать данные она не умеет.


Коротко о главном:

# mt -f /dev/nst0 status          статус стримера
# mt -f /dev/nst0 rewind         перемотать ленту на начало
# mt -f /dev/nst0 erase           стереть всю ленту
# mt -f /dev/nst0 fsf 1             промотать вперёд один файл
# mt -f /dev/nst0 bsf 1            промотать назад один файл
# tar -cvzf /dev/nst0 /etc/      сжать gzip'ом каталог на ленту
# tar -tzf /dev/nst0                  пролистать зажатый gzip'ом архив


Ну а теперь, немного примеров:
(все команды я делал под root'ом, команды начинаются с #)
отмотаем пленку на начало
# mt -f /dev/nst0 rewind

посмотрим информацию об устройстве

# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN

заархивируем tar'ом без сжатия каталог /etc

# tar -cf /dev/nst0 /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets

снова посмотрим информацию

# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

обратите внимание на то, что пленка отмотана на 1 файл вперед (File number=1). Если б мы работали с устройством /dev/st0, то второй результат команды mt -f /dev/nst0 status не отличался бы от первого.

заархивируем tar'ом со сжатием bzip каталог /root

# tar -cjf /dev/nst0 /root/
tar: Removing leading `/' from member names

снова информация 

mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

теперь перемотаем на один файл назад и глянем информацию

# mt -f /dev/nst0 bsf 1
# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN

вроде все ОК, за исключением block number=-1
попробуем пролистать второй архив

# tar -tjf /dev/nst0

bzip2: Compressed file ends unexpectedly;
        perhaps it is corrupted?  *Possible* reason follows.
bzip2: Invalid argument
        Input file = (stdin), output file = (stdout)

It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.

You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.

tar: Child returned status 2
tar: Error exit delayed from previous errors

oops...   т.к. стример неточно отмотал пленку, мы находимся не в начале второго файла, а судя по block number=-1 - в конце первого.
пойдем другим путем, - отмотаем на начало, промотаем первый файл и убедимся что мы в нужном месте

# mt -f /dev/nst0 rewind
# mt -f /dev/nst0 fsf 1
# mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

пробуем пролистать архив

# tar -tjf /dev/nst0

# tar -tjf /dev/nst0
root/.bashrc
root/dist
root/.profile
root/.ssh
root/.bash_history
root/.w3m

вуаля. 

глянем-ка статус ещё раз

mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=825, partition=0.
Tape block size 0 bytes. Density code 0x42 (no translation).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN

т.к. при листании архива мы опять перемотали пленку (block number=825), то для разархивирования второго архива в каталог /tmp поступим вот так

# mt -f /dev/nst0 rewind
# mt -f /dev/nst0 fsf 1
# cd /tmp/
# tar -xjf /dev/nst0
bzip2: (stdin): trailing garbage after EOF ignored
tar: Child died with signal 13
tar: Error exit delayed from previous errors

ошибка говорит о том, что после окончания файла (EOF) был "мусор", который был проигнорирован распаковщиком, что в свою очередь говорит, о том, что на кассете до этого была информация (по крайней мере у меня). Но на целостность распакованной информации это не повлияло.

Наверное стоит после этого перемотать кассету

# mt -f /dev/nst0 rewind

и стереть её

# mt -f /dev/nst0 erase    <---  а вот этого я бы вам делать не советовал.
На стримере Ultrium 2-SCSI кассета имеет ёмкость 200GB. Когда я дал такую команду, мне пришлость пить чай почти 3 часа. Столько же займет наполнение информацией такой кассеты. Хотя решайте сами, если храните черную бухгалтерию на кассетах, то наверное другого выхода нет   =).


Теперь выводы из моей практики:

Подписывайте кассеты, если у вас их больше трёх.

Архивирование tar'ом может быть без сжатия и с оным (методы - gzip, bzip и т.д.). Если пишете много файлов на ленту (несколько десятков, к примеру), то выберите метод, напишите карандашиком на кассету (с сжатием, с каким или без) и только таким способом все записывайте. К чему это всё - имен файлов на кассете нет, листая архивы на кассете возрастом от полугода вам не придется играть ключами tar'а.
Мне-то проще, у меня все файлы несжимаемые...     =)


P.S. Возможно кому-то интересно, для чего сделано 2 файла (/dev/st0 и /dev/nst0) для одного и то-же устройства. Первый для бэкапа типа full, второй для бэкапов типа differential и incremental.
P.P.S. А вот почему он промахивается мимо файлов при перемотке, я пока не понял.

 

 

ОперацияОписание
eof Поместить маркер конца файла в текущую позицию ленты
asf n Перейти к файлу с номером n
fsf n Перемотка ленты вперед на n файлов
bsf n Перемотка ленты назад на n файлов
fsr n Перейти на n записей вперед
bsr Перейти на n записей назад
seek n Поиск блока с заданным номером n
eom Переход к концу записей на ленте. Используется для дописывания файлов на ленту
rewind Перемотка ленты в начало
offline Перемотка пленки в начало и извлечение ленты из накопителя
retension Перетяжка ленты для снятия статических зарядов с поверхности пленки
erase Стирание содержимого ленты

:: назад