Программа обработки архивов tar

       

Ленты и другие носители архивов

Несколько специальных моментов работы с лентами требуют более
подробного рассмотрения. Они обсуждаются ниже.
Использование tar на ленточных устройствах сопряжено с большим
количеством трудностей. Т.к. создание и манипулирование архивами,
расположенными на магнитной ленте, было первоначальным предназначением
tar, он имеет много возможностей, облегчающих это манипулирование.
Архивы обычно записываются на неперематывающие устройства -
картриджи, магнитные ленты или гибкие диски.
Количество данных на ленте или диске зависит не только от их разме-
ра, но также и от того, как они отформатированы. Катушка длиной 2400
футов магнитной ленты содержит 40 мегабайт данных при форматировании
1600 бит на дюйм. Картридж ленты EXABYTE содержит 2,3 гигабайт.
Магнитные носители можно использовать несколько раз: если архив на


ленте больше не нужен, его можно удалить, а ленту или диск
использовать опять. Однако качество носителя со временем снижается, и
ленты и диски начинают производить ошибки данных. Катриджи EXABYTE
нужно выбросить, когда появляется error count (какое-то количество
бит, которые нельзя использовать) больше 10 кб.
Запись на магнитные носители и удаление с них производится с помощью
магнитных полей и должна быть защищена от таких полей во избежание
повреждения данных.


Засовывать гибкий диск в железный футляр - не
очень хорошая идея.
8.1 Выбор и переключение устройств *
-f [hostname]:файл
--file=[hostname]файл
Использует архивный файл или файл устройства на машине
- 129 -
hostname. Эта опция используется для задания имени файла
архива, с которым работает tar. Если имя файла - '-', tar
читает архив со стандартного ввода (при составлении списка или
извлечении) или записывает его на стандартный вывод (при
создании). Если имя файла '-' дано при модификации архива, tar
читает изначальный архив со стандартного ввода и записывает
новый архив на стандартный вывод.
Если имя файла содержит ':', это интерпретируется как
'hostname:filename'. Если hostname содержит символ '@', это
рассматривается как 'uaer@hostname:filename'. В обоих случаях
tar вызывает команду rsh (или remsh) для того, чтобы начать
'/etc/rmt' на удаленной машине. Если вы даете альтернативное
login name, оно пойдет в rsh. Естественно, удаленная машина
должна иметь выполнимый '/etc/rmt'. Эта программа - из
калифорнийского университета, и копию кода источника можно
найти с помощью источника для tar; она компилируется и
устанавливается по умолчанию.
Если эта опция не дана, но задана переменная среды TAPE,
используется ее значение, в противном случае старые версии tar
используют специальное архивное имя (оно выбирается, когда tar
откомпилирован). Обычно оно устанавливается на первое
ленточное устройство или другой транспортабельный носитель I/O.
Начиная с версии 1.11.5 GNU tar использует в качестве
устройства по умолчанию стандартный ввод и стандартный вывод,
и я больше не стану предлагать автосатическую проверку
устройства во время установления. Это не работает в очень
многих случаях, это безнадежно. Сейчас инсталлятор может
отменить стандартный ввод и стандартный вывод для устройства
умолчания, если это для него/нее более предпочтительно. В
дальнейшем, я думаю, использование tar будет осуществляться на
каналах и дисках, а не на лентах, картриджах и дискетах.


Некоторые пользователи думают, что использование стандартного
ввода и вывода протекает без проблем. Это приводит к злобным
сюрпризам на вашем экране, если вы забыли задать имя файла
вывода - особенно если вы собираетесь через сеть или
- 130 -
терминальный сервер, способный переносить большое количество
информации. Появляется так много сообщений об ошибках и так
много противоречивых требований, что в конечном итоге мы
считаем положение совершенно безвыходным. Можно, конечно,
использовать что-нибудь вроде '/dev/tape', но это также
сопряжено со многими трудностями, от зависания процессов до
случайного разрушения лент. После всего этого вы по-другому
станете относиться к стандартному вводу и выводу.
GNU tar читает и записывает архивы в блоках, я подозреваю, что
это единственная причина того, что блочные устройства
преобладают над символьными. Более вероятно, что блочные
устройства просто более эффективны. Инсталлятор можно
проверить с помощью 'DEFTAPE' в '.
--force-local
Архивный файл локален, даже если он содержит двоеточие.
--rsh-command=команда
Использует отдаленную команду вместо rsh. Эта опция работает
так, что люди, использующие что-нибудь другое, чем стандарт
rsh (т.е. керберизованный rsh), имеют доступ к отдаленным
устройствам. Когда эта команда не используется, вместо нее
используется команда оболочки, найденная после установления
программы tar, например '/usr/ucb/rsh', /usr/bin/remsh',
/usr/bin/rsh', /usr/bsd/nsh'. Инсталлятор может это отменить с
помощью определения переменной RSH среды во время установления.
-[0-7][lmh]
Задает устройство и плотность.
'-M
--multi-volume
Создает список (извлекает) многотомный архив.
- 131 -
Эта опция заставляет tar записывать многотомный архив - он
может быть больше, чем соответствующий сердечнику, который
его хранит.
FIXME: xref Multi
-L число
--tape-length=число
Меняет ленту после записи число*1024 байта.
Эту опцию можно использовать, когда ваши ленточные устройства
не могут точно определять конец лент.


Установив максимальную
длины ленты, вы можете полностью избежать проблем.
-F файл
--info-script=файл
--new-volume-script=файл
Выполняет файл в конце каждой ленты. Это обеспечивает
'--multi-volume'.
Отдаленный сервер
Чтобы получить доступ к ленточному устройству на отдаленной машине,
tar использует отдаленный сервер, написанный в университете Беркли.
Отдаленный ленточный сервер можно установить с помощью '/etc/rmt' на
любой машине, чье ленточное устройство вы хотите использовать. tar
вызывает '/etc/rmt' выполнением rsh или remsh на отдаленной машине,
обычно использующей другое login name, если оно требуется.
Обеспечивается копия источника для отдаленного ленточного сервера.
Это Copуright @ 1983 by the Regents of the University of California,
но может распространяться свободно. Инструкции по компилированию и
установлению включены в 'Makefile'.
Если вы не используете опцию '--absolute-names', GNU tar не позволит
вам создать архив, содержащий абсолютные имена файлов (имена,
начинающиеся с '/'). Если вы попытаетесь, tar автоматически удалит
- 132 -
начальные '/' из имен, которые он хранит в архиве. Он также выведет
предупредительное сообщение, рассказывающее, что он делает.
При чтении архива, который был создан другой программой tar, GNU tar
автоматически извлекает элементы архива, имеющие абсолютные имена, как
если бы они не были абсолютными. Это важная особенность. Посетитель
однажды дал tar ленту для пересохранения; оператор использовал Sun tar
вместо GNU tar, и в результате многие участки нашего '/bin' заменились
на версии с ленты - стоит ли говорить, что мы не очень обрадовались
перспективе восстанавливать систему файлов по резервным копиям.
Например, если архив содержит файл '/usr/bil/computoy', GNU tar
извлечет его в текущий каталог. Если вы хотите извлечь файлы архива
под теми же абсолютными именами, которые они имели при создании
архива, вы должны сделать 'cd /' перед извлечением файлов из архива
или использовать опцицию '--absolute-names' или команду 'tar -C /...'.


Некоторые версии Unix (например Ultrix 3.1) требуют, чтобы при
неправильности архива следовала короткая запись в конце ленты. В
результате опция -M не будет правильно работать. Лучшее решение
проблемы - использовать размер архива гораздо больше, чем значение по
умолчанию 20.
Чтобы модифицировать архив, tar должен быть способным вернуться по
архиву для того, чтобы перечитать или перезаписать блок, который был
только что прочтен (или записан). Это возможно на двух типах файлов:
нормальные файлы диска (или любые другие файлы, по которым можно
вернуться с помощью 'lseek') и стандартные 9-дорожечные магнитные
ленты (или другие типы лент, по которым можно вернуться с помощью
MTIOCYOP ioctl.
Это значит, что команды '--append', '--update', '--concatenate' и
'--delete' не работают на других типах файлов. По некоторым носителям
просто нельзя вернуться, это значит, что эти команды и опции никогда
не смогут с ними работать. К таким носителям относятся каналы и
картриджные ленточные устройства.
По некоторым другим носителям можно возвращаться, и tar будет
- 133 -
работать с ними, как только его модифицируют для этого.
Архивы, созданные с помощью опций '--multi-volume',
'--label=архивная_метка' и '--incremental', могут не читаться другими
версиями tar. В частности, обновление файла, который был разделен
границей тома, требует очень осторожной работы с dd, если его вообще
можно осуществить. Другие версии tar могут также создавать пустой
файл, чье имя - то же, что в заголовке тома. Некоторые версии tar
могут создавать нормальные файлы вместо заархивированных каталогов с
помощью опции '--incremental'.
Некоторые общие проблемы и их решения:
ошибки системы:
отрицается разрешение
нет такого файла в каталоге
не хозяин
ошибки tar:
ошибка контрольной суммы каталога
ошибка формата заглавия
ошибки носителя/системы:
ошибка i/o
устройство занято
8.2 Разбивка на блоки *
При записи на ленту tar записывает содержимое архива в так
называемые блоки. Чтобы изменить размер блока, принимаемый по


умолчанию, используйте опцию '--block-=size=512-размер'. Каждый
блок будет выражен в записях размера (одна запись tar - 512 байт).
FIXME: xref Archive Format
Каждый файл, записанный в архив, использует по меньшей мере один
целый блок. Поэтому использование больших блоков может привести к
- 134 -
обилию пустых мест при небольшом количестве файлов. С другой стороны,
больший блок может чаще читаться и более эффективно записываться.
Дальнейшее усложнение проблемы в том, что ленточные устройства
полностью игнорируют разбивку на блоки. В данном случае тоже
предпочтительнее большой размер блока (потому что уровни программного
обеспечения ленточного устройства все еще уважают разбивку на блоки),
но это не так важно, как на ленточных устройствах, уважающих разбивку
на блоки.
При чтении архива tar обычно сам вычисляет размер архива. Если при
этом был использован нестандартный размер блока во время создания
архива, tar выдает сообщение о нестандартном блочном факторе, а затем
нормально работает. На некоторых ленточных устройствах, однако, tar не
может сам вычислить размер блока. На большинстве из них вы должны
задавать блочный фактор (с помощью '--block-size=512-размер', больший,
чем точный блочный фактор, а затем использовать опцию
'--read-full-blocks' ('-B'). (Если вы задаете блочный фактор с помощью
'--block-size=512-размер' и не используете опцию '--read-full-blocks',
tar не пытается вычислять размер блока.) На некоторых устройствах вы
можете всегда точно задать размер блока с помощью
'--block-size=512-размер' при чтении, т.к. tar не вычисляет его. В
любом случае используйте '--list' перед любым извлечением, чтобы
посмотреть, правильно ли tar прочитал архив.
Если вы испрльзуете блочный фактор больше 20, более старые программы
tar могут не быть способными читать архив, т.ч. мы рекомендуем для
использования на практике ограничиться этим значением. Однако GNU tar
предполагает как угодно большие размеры блоков, ограниченные только
количеством виртуальной памяти или физическими характеристиками


ленточного устройства.
Если вы записываете уплотненный архив на ленту с помощью
'--compress' или '--gzip',
FIXME: pxref Input and Output
tar не сможет правильно разбить архив на блоки . Этого не случится,
- 135 -
если вы записываете архив в нормальный файл через канал, или
записываете его на ленточное устройство. Используйте
'--compress-blocks' или '--gzip-block', чтобы заставить tar правильно
выполнить разбивку на блоки.
8.2.1 Вариации формата *
Параметры формата задаются, когда архив записан на носитель.
Оптимальный выбор параметров формата варьирует в зависимости от типа и
числа архивируемых файлов и от носителя, используемого для хранения
архива.
Чтобы задать параметры формата при создании архива, вы можете
использовать опции, описанные в следующих разделах. По умолчанию, если
вы не задаете параметров формата, tar использует специальные
параметры. Вы не можете модифицировать уплотненный архив. Если вы
создаете архив с помощью '--block-size=512-размер',
FIXME: pxref Blocking
Factor
вы должны задать размер блока для оперировании архивом.
FIXME: xref Matching Format Parameters
Там приведены примеры параметров формата.
8.2.2 Блочный фактор архива *
Данные в архиве группируются в записи, каждая по 512 байт. Записи
записываются и читаются в так называемых блоках. Число записей в блоке
(т.е. размер блока в 512-байтных единицах) называется блочным
фактором. Опция '--block-size=512-размер' задает блочный фактор
архива. По умолчанию блочный фактор обычно бывает 20 (т.е. 10240
байта), но его можно и устанавливать. Чтобы вычислить блочный фактор
существуюшего архива, используйте 'tar --list --file=имя_архива'. На
- 136 -
некоторых устройствах это может не работать.
Блоки разделены промежутками, которые занимают место на носителе
архива. Если вы архивируете на магнитной ленте, использование большего
блочного фактора (и, стало быть, больших блоков) обеспечивает более
быстрое проникновении и позволяет вам поместить на ленту большее
количество данных.


Если вы архивируете на картридж, очень большой
блочный фактор (скажем, 126 или больше) сильно повышает эффективность.
С другой стороны, маленький блочный фактор может использоваться при
архивировании маленьких файлов, чтобы избежать большого количества
нулей. Вообщем, идеальный размер блока зависит от размера межблочных
промежутков на ленте, которую вы используете, и среднего размера
файлов, которые вы архивируете.
FIXME: xref Creating
Archives
для получения информации о записи архивов.
FIXME: нужен пример на использование картриджа с размером блока=126 или
больше.
Архивы с блочным фактором больше 20 не могут читаться очень старыми
версиями tar или некоторыми новыми версиями tar, выполняемыми на
старых машинах с маленьким адресным пространством. С помощью GNU tar
блочный фактор архива ограничивается только максимальным размером
блока устройства, содержащего архив, или количеством доступной
виртуальной памяти.
Если вы используете свой блочный фактор при создании архива, вы
должны задать этот же блочный фактор при его модификации. Некоторые
архивные устройства требуют от вас также задания блочного фактора при
чтении архива, однако обычно это не нужно. Обычно вы можете
использовать '--list' без задания блочного фактора - tar сообщает ваш
размер блока и затем, как обычно, выдает список членов архива. Чтобы
извлечь файлы из архива про нестандартном блочном факторе (в
частности, если вы сомневаетесь в его значении), вы обычно должны
использовать опцию '--read-full-blocks' ('-B') при задании блочного
- 137 -
фактора больше, чем блочный фактор архива (т.е. tar --extract
--read-full-blocks-block-size=300'.)
FIXME: xref Listing Contents
для получения информации об операции '--list',
FIXME: xref read-full-blocks
для получении более подробного объяснения работы этой опции.
'--block-size=число'
'-b число'
Задает блочный фактор архива. Может использоваться с любой
операцией, но обычно не является необходимой с '--list'.
разбивка на блоки устройства


-b блоки
--block-size= блоки Устанавливает размер блока равным блоки*512 байт.
Эта опция используется для задания блочного фактора архива.
При чтении или записывании архива tar будет читать и
записывать архив в блоках вышеуказанного размера. По
умолчанию блочный фактор устанавливается после компиляции
tar и обычно равен 20.
Блочный фактор больше 20 не может ситаться очень старыми
версиями tar или или некоторыми новыми версиями tar,
выполняемыми на старых машинах с маленькой памятью.
На магнитную ленту большие блоки позволяют записывать больше
данных. Если архив в файле диска или канале, вы, может быть,
захотите использовать меньший блочный фактор, потому что
большой вызвал бы большое количество нулевых байт в конце
архива.
При записи на картриджи и другие поточные ленты, очень
большой блочный фактор (скажем, 126 или больше) сильно
- 138 -
повышает эффективность. Однако вы можете задать тот же
блочный фактор при чтении или модификации архива.
В GNU tar блочный фактор архива ограничивается только
максимальным размером блока устройства, содержащего архив,
или количеством доступной виртуальной памяти.
--block-compress
Разбивает на блоки вывод уплотнения лент.
-i
--ignore-zeros
Игнорирует блоки нулей в архиве (имеется в виду EOF). Опция
'--ignore-zeros' заставляет tar игнорировать блоки нулей в
архиве. Обычно блок нулей указывает на конец архива, но при
чтении поврежденного архива или архива, который был создан
из нескольких архивов с помощью cat, эта опция позволяет tar
читать весь архив. По умолчанию эта опция не работает,
поскольку многие версии tar после нулевых блоков записывают
всякую ненужную информацию.
Заметьте, что эта опция заставляет tar читать конец
архивного файла, что иногда позволяет избежать проблем,
когда на одной ленте хранится много файлов.
-B
--read-full-blocks
Производит переразбивку на блоки (для чтения каналов
4.2BSD). Если используется эта опция, tar не паникует, когда
при попытке прочитать блок из архива возвращается неполный


блок. Вместо этого tar продолжает читать, пока не получит
полный блок.
Эта опция включается по умолчанию, когда tar читает архив со
стандартного ввода или с отдаленной машины. Это из-за
системы BSD Unix. Если эта опция не используется, tar
сталкивается с ошибкой, как только он считывает неполный
- 139 -
блок с канала.
Эта опция также используется с командами для модификации
архива.
Разбивка ленты на блоки
FIXME: Cоответствующие опции нужно отовсюду переместить сюда.
При работе с различными лентами или картриджами вы должны заботиться
о выборе блокирования, которое является количеством блоков диска,
которые вы записываете вместе как единый ленточный блок на ленту без
ленточных промежутков. Ленточный промежуток - небольшой участок ленты,
не содержащий информации, который используется для замедления
остановки ленты и позднейшего восстановления скорости записи или
чтения. Когда устройство начинает читать ленточный блок, он должен
быть прочтен весь без остановок, а ленточный промежуток может
остановить движение ленты без потери информации.
Высокая разбивка на блоки (при которой на ленточный блок кладется
больше дисковых блоков) использует ленту более эффективно, потому что
при ней меньше ленточных промежутков. Но чтение таких лент может быть
более трудным для системы, т.к. потребуется больше памяти, чтобы
получить наконец полный блок. В дальнейшем, если есть ошибка чтения на
огромном ленточном блоке, не очень приятно будет восстанавливать
информацию. Таким образом, разбивка на блоки не должна быть ни очень
низкой, ни очень высокой. По умолчанию tar использует разбивку на
блоки 20 по историческим причинам, и при чтении или записи диска
ничего особенного не случается. При современной ленточной технологии
более предпочтительна высокая разбивка на блоки. Sun рекомендует
разбивку на блоки 126 для Exabyte и 96 для DAT. Другие производители
могут давать для тех же лент другие рекомендации. Это может также
зависеть от буферной техники, используемой в современном контроле


лент. Некоторые предпочитают минимальную или наоборот максимальную
разбивку на блоки, а некоторые используют для этой цели только степени
двойки.
- 140 -
Итак, для разбивки на блоки нет строгих правил. Но разбивка на блоки
времени чтения может идеально использоваться как разбивка на блоки
времени записи. В одном моем знакомом месте сочли за лучшее
использовать разбивку на блоки 32, чтобы гарантировать единообразие
своих лент.
77
8.3 Много архивов на одной ленте
FIXME: Cоответствующие опции нужно отовсюду переместить сюда.
Большая часть ленточных устройств имеет два элемента в каталоге
'/dev', или пару элементов, которые отличаются только меньшим числом
для таких устройств. Давайте возьмем '/dev/tape', которое часто
указывает на обычное ленточное устройство данной системы. Это можно
записать в двух видах: '/dev/nrtape/' или '/dev/ntape'. Простейшее имя
- перематывающая версия устройства, тогда как имя, содержащее 'nr'
- неперематывающая версия того же устройства.
Перематывающее устройство автоматически перематывает ленту на
начало, когда оно открыто или закрыто. Т.к. tar открывает архивный
файл перед использованием и закрывает после него, это значит, что
просто команда
tar cf /dev/tape каталог
будет перематывать ленту на начало и вначале, и после сохранения
содержимого каталога, таким образом предыдущее содержимое ленты
удаляется, и любая следующая записанная операция уничтожит то, что
только что было записано.
Итак, устройстрво перемотки предназначено для хранения одного, и
только одного, файла. Если вы хотите положить более одного архива на
одну ленту, вы должны избегать перематывающей версии ленточного
устройства. Вы также должны уделять особое внимание положению ленты.
Ошибки в положении могут привести к удалению с ленты ценных данных.
- 141 -
Многие, наученные горьким опытом, будут использовать впредь только
перематывающие устройства и ограничиваться одним файлом на ленте,
чтобы избежать такого риска. Будьте полностью уверены, что запись не


на то место ленты приведет к уничтожению всей информации, которая
раньше на этом месте находилась, и скорее всего до конца ленты, и,
главное, эту информацию не восстановить.
Чтобы сохранить каталог-1 как первый архив в начале ленты и
убедиться, что лента готова для второго архива, вы должны набрать:
mt -f /dev/nrtape rewind
tar cf /dev/nrtape каталог-1
Ленточные метки - специальные магнитные шаблоны, записанные на
носителе, которые позже распознаются читающими средствами. Эти метки
используются после каждого файла, когда их много на одной ленте.
Пустой файл (т.е. две метки подряд) обозначает логический конец ленты,
после которого нет файлов. Обычно драйверы неперематывающих
устройств будут реагировать на требование закрытия, выданное tar,
прежде всего помещением двух меток в конец вашего архива и
возвращением одного из них назад. Итак, если вы извлекли ленту из
ленточного устройства, она кончилась. Но если вы на текущую позицию
записали другой файл, то вторая ленточная метка удалится и между
файлами останется только одна.
Теперь вы можете сохранить каталог каталог-2 как второй архив после
первого на той же ленте с помощью:
tar cf /dev/nrtape каталог-2
И т.д. для всех архивов, которые вы хотите записать на ту же ленту.
Другой распространенный случай - когда вы не все архивы записываете
в один и тот же день, и между ними вам нужно вынимать и хранить ленту.
Главное - вы должны запомнить, сколько файлов уже хранится на вашей
ленте. Предположим, у вас уже 16 файлов и вы готовы записать 17-й. Вы
должны позаботиться о том, чтобы пройти первые 16 меток перед
записыванием каталога-17 с помощью команд:
- 142 -
mt -f /dev/nrtape rewind
mt -f /dev/nrtape fsf 16
tar cf /dev/nrtape каталог-17
Во всех предыдущих примерах мы рассматривали разбивку на блоки
отдельно, но вы должны хорошо уметь делать такие вещи.
FIXME: xref Blocking
8.3.1 Положение ленты и ленточные метки *
Так же, как архивы могут хранить более одного файла системы файлов,
ленты могут хранить более одного архивного файла.


Чтобы отметить, где
архивные файлы ( или другие типы файлов, хранящиеся на ленте)
начинаются и кончаются, ленточные архивные устройства ставят ленточные
метки на носителе архива: по одной между файлами и две после всех
файлов.
Если обозначить данные нулями, а метки - крестами, то лента может
выглядеть следующим образом:
0000x000000x00000x00x00000xx--------------------------
Ленточные устройства читают и записывают на них при помощи
читающей/пишущей головки - физической части устройства, которая может
воспринимать только одну точку на ленте в определенную единицу
времени. Когда вы используете tar для чтения или записи архивных
данных, устройство начинает чтение или запись с того места, где в
данный момент находится головка, независимо от того, какой это архив
или какая часть архива. Перед записыванием архива вы должны убедиться,
что никакие нужные данные не уничтожатся. Перед чтением архива нужно
удостовериться, что головка находится на начале архива, который вы
хотите прочитать. (restore находит архивы автоматически.)
FIXME: xref Scripted
Restoration
- 143 -
FIXME: xref mt
для получения объяснения пользования утилитой движения ленты.
Если вы хотите добавить новые архивные элементы файлов на ленту, вы
должны перемотать ленту на клнец существующих файлов, встать на
последнюю метку и записать новый архивный файл. Если вы запишете два
архива, лента будет выглядеть следуюшим образом:
0000x000000x00000x00x00000xx000x0000xx----------------
8.3.2 Утилита mt *
FIXME: Правда ли, что она работает только на неблочных устройствах?
Нужно объяснить различие при помощи размера блока
(фиксированного или переменного).
Вы можете использовать утилиту mt для передвижения или перемотки
ленты на место после заданного числа архивных файлов на ленте. Это
позволяет перейти на начало архива перед его извлечением или чтением
или на конец архивов перед записыванием нового.
FIXME: Почему не сказать "передвигаться до тех пор, пока не будут
найдены две метки подряд"?


Синтаксис команды mt:
mt [-f имя_ленты] операция [номер]
где имя_ленты - имя ленточного устройства, номер - число раз, сколько
нужно выполнить эту операцию (по умолчанию - один), операция - одна из
нижеприведенных:
FIXME: Не используется ли это для операций записи?
sof
- 144 -
weof
Выдает номер ленточной метки на текущей позиции ленты.
fsf
Передвигает ленту на "номер" файлов вперед.
bsf
Передвигает ленту на "номер" файлов назад.
rewind
Перематывает ленту (не зависит от "номера").
offline
rewoff1
Перематывает ленту и выключает ленточное устройство (не
зависит от "номера").
status
Выдает информацию о состоянии ленты.
Если вы не задали имя_ленты, mt использует переменную TAPE среды;
если TAPE не существует, mt использует устройство '/dev/rmt12'.
При успешном завершении операции mt возвращает 0, если команда не
распознана - 1, если она ошибочна - 2.
FIXME: Нужно добавить сюда информацию о том, как найти архив.
Если вы используете опцию '--extract' c '--label=архивная_метка',
tar читает архивную метку (на нее должна быть установлена головка) и
печатает ошибку, если архивная метка не соответствует заданной. Если
метки совпали, tar извлекает архив.
- 145 -
FIXME: xref Archive Label
FIXME: xref Matching Format Parameters
'tar --list --label' заставляет tar выводить метку.
FIXME: программа должна вывести все метки на ленте?
8.4 Использование множественных лент *
Часто вам может понадобиться записать большой архив, больше, чем
может поместиться на ленте, которую вы используете. В таком случае вы
можете использовать много команд tar, но это неудобно, в частности
если вы используете опции, такие как '--exclude=шаблон' или дампируете
всю систему файлов. Таким образом, tar автоматически предполагает
множественные ленты.
Наберите '--multi-volume' на командной строке, и tar будет,
достигнув конца ленты, выдавать приглашение для следующей ленты и
продолжать работу. Каждая лента будет иметь независимый архив, его


можно прочесть отдельно. ( за исключением случая, когда файл не весь
помещается на ленту, и какая-то его часть находится на другой ленте. В
этом случае вы должны извлечь его из первого архива, используя
'--multi-volume', а затем при появлении приглашения поместить его во
второй архив, т.ч. tar может обновить обе половинки файла).
При запросе новой ленты tar принимает любой из следующих ответов:
'?'
требование объяснить возможные ответы
'q'
требование немедленного выхода
- 146 -
'n имя_файла'
требование записать следующий том на файл имя_файла
'!'
требование выхода в подоболочку
'y'
требование начать запись следующего тома.
(Вы должны просто нажать 'у' после того, как вы сменили ленту: в
противном случае tar будет записывать на том, который только что
записан).
Если вы хотите, чтобы все было более разработано, задайте опцию
'--info-script=имя_сценария'. Файл имя_сценария должен быть программой
(или сценарием оболочки), которая должна выполняться вместо обычной
процедуры приглашения. Когда программа заканчивается, tar сразу же
начинает запись следующего тома. Работа 'n' невозможна, если вы
используете '--info-script=имя_сценария'.
Метод, который tar использует для определения конца ленты,
несовершенен и не работает в некоторых операционных системах и на
некоторых устройствах. Вы можете использовать
'--tape-length=1024-размер', если tar сам не может определить конец
ленты. Аргумент размера должен быть равен размеру ленты.
Имя тома, используемое tar в приглашении сменить ленту, можно
изменить; если вы задаете опцию '--volno-file=файл_под_номером',
файл_под_номером - десятичное число. Оно будет использоваться в
качестве номера тома первого записанного тома. Когда tar закончит, он
перепишет файл с текущим номером тома. (Это не изменяет номера тома,
записанного на ленточной метке -
FIXME: pxref Special Options for Archiving
это влияет только на номер, используемый в приглашении).
- 147 -
Если вы хотите поместить tar в цикл через серию ленточных устройств,


вы можете использовать ответ 'n' на приглашение сменить ленту. Однако
это совсем не работает с '--info-script=имя_сценария'. Таким образом,
если вы задаете множественные опции tar '--foile=имя_архива', то
используются заданные файлы в той же последовательности, что и тома в
архиве. Только когда первый файл последовательности нужно использовать
опять, tar выдает приглашение сменить ленту (или выполнить сценарий).
Многотомные архивы
При использовании опции '--multi-volume' tar не прекращает работу,
если он больше не может читать или записывать данные. Вместо этого он
просит вас приготовить другой том. Если архив находится на магнитной
ленте, вы должны сменить ленту, если на гибком диске - сменить диск, и
т.д.
Каждый том многотомного архива - независимый архив tar. Например, вы
можете отдельно составить список архива или извлечь его, только не
нужно задавать опцию '--multi-vilume'. Однако, если один файл
архива разделен томами, единственный способ успешно его извлечь -
используя команду '--extract --multi-volume'.
8.4.1 Архивы, которые длиннее одной ленты или диска *
Чтобы создать архив, который больше, чем может поместиться на одной
единице носителя, используйте опцию '--multi-volume' в сочетании с
'--create'.
FIXME: pxref Creating Archives
Многотомным архивом можно манипулировать как всеми остальными
архивами (с помощью задания опции '--multi-volume'), но он занимает
более одной ленты или одного диска.
Когда вы задаете '--multi-volume', tar не сообщает об ошибке, когда
доходит до конца тома архива (при чтении) или до конца носителя (при
- 148 -
записи). Вместо этого он предлагает вам загрузить новый том. Если
архив находится на магнитной ленте, вы должны сменить ленту, когда
увидите приглашение, если на гибком диске - сменить диск, и т.д.
Вы можете читать каждый отдельный том многотомного архива, как если
бы он сам был архивом. Например, чтобы составить список содержимого
тома, используйте опцию '--list' без '--multi-volume'. Чтобы извлечь


член архива из тома, используйте '--extract' без '--multi-volume'.
Если член архива расположен между томами (т.е. его элемент
начинается на одном томе носителя и заканчивается на другом), вы
должны задать '--multi-volume' для того, чтобы успешно его извлечь. В
этом случае вы должны загрузить том, когда начинается член архива, и
использовать 'tar --extract --multi-volume' - tar выдаст приглашение
следующим томам, если они нужны.
FIXME: xref Extracting From Archives
для получения более подробной информации о извлечении архивов.
'--info-script=имя_сценария' - то же, что и '--multi-volume', за
исключением того, что tar не приглашает вас прямо сменить том
носителя, когда предыдущий уже полон - вместо этого tar выполняет
команды, которые вы храните в имя_сценария. Эта опция может
использоваться для передачи сообщений типа 'Someone please come change
my tape' при выполнении резервного копирования без оператора. Когда
сделан имя_сценария, tar принимает, что носитель был изменен.
FIXME: Здесь должна быть программа-образец, включающая выход перед
окончанием.
'--multi-volume'
'-M'
Создает многотомный архив при использовании в сочетании с
'--create'. Для выполнения любой другой операции с
многотомными архивами задайте '--multi-volume' в сочетании с
этой операцией.
- 149 -
'--info-script-программный_файл'
'-F программный_файл'
Создает многотомный архив по сценарию. Используется в
сочетании с '--create'.
8.4.2 Ленточные файлы *
Когда tar записывает архив на ленту, он создает один ленточный файл.
Если много архивов записано на одну ленту один за другим, каждый из
них записывается как отдельный ленточный файл. Необходимо установить
ленту перед выполнением извлечения. Чтобы это сделать, используйте
команду mt. Для получения информации о команде mt и организации лент в
последовательность ленточных файлов
FIXME: см. ***
8.5 Включение метки в архив *
FIXME: Должен ли аргумент к -label быть строкой, заключенной в кавычки?
Чтобы избежать проблем, вызванных тем, что бумажные метки не

Содержание раздела