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 |
Стирание содержимого ленты |
:: назад