Как последовательно записать несколько tar на ленту?

В зависимости от make-файла вам, вероятно, понадобится что-то вроде:

make CFLAGS="-Wno-error=format-truncation"

Правила Makefile по умолчанию и наиболее хорошо -написанные Makefile должны быть указаны в CFLAGSдля аргументов опций используемого компилятора C. Точно так же вы можете использовать CXXFLAGSдля предоставления опций компилятору C++ и LDFLAGSдля компоновщика.

4
20.08.2020, 16:27
2 ответа

Это поведение связано с обработкой EOF драйвера магнитной ленты.

Эта обработка различается в разных операционных системах, и может быть полезно прочитать соответствующую справочную страницу Solaris:

http://schillix.sourceforge.net/man/man7i/mtio.7i.html

, что объясняет разницу между управлением Solaris и старым поведением BSD.

Исходя из этого объяснения, я ожидаю, что старое поведение BSD заставит чтение после ситуации EOF пропустить метку файла и вернуть первую запись из следующего файла на ленте. Кажется, это то, что вы ожидаете.

Кажется, что наблюдаемое поведение в BSD находится между задокументированным поведением SVr4 и старым поведением BSD, но я предполагаю, что есть способ заставить все работать как в Solaris, так и в текущей BSD:

  • вызвать tar для чтения первого файла ленты

  • после этого лента помещается в конец первого файла ленты, непосредственно перед меткой файла...

  • вызовите mt fsf, чтобы пропустить метку файла

  • вызвать tar для чтения следующего файла на ленте.

Из остального обсуждения кажется, что FreeBSD записывает дополнительную метку файла, когда mt rewindвызывается после применения операции записи.

Команда mt eomпозиционирует ленту после последней двойной метки файла, и когда выполняется другая операция записи, это происходит после двойной метки файла, что приводит к созданию пустого файла ленты перед последней записью.

Так выглядит лента с тремя файлами:

data1 FILEMARK data2 FILEMARK data3 FILEMARK FILEMARK

Если вы хотите добавить четвертый ленточный файл, вам нужно позвонить:

mt fsf 3

для размещения ленты после третьей метки файла. Если вы затем начнете писать, это перезапишет четвертую файловую метку, и если вы затем снова перемотаете, у вас будет такая схема ленты:

data1 FILEMARK data2 FILEMARK data3 FILEMARK data4 FILEMARK FILEMARK
5
18.03.2021, 23:32

Я никогда не играл с магнитными лентами и tar, но для добавления в tar-архив tar должен перезаписать последнюю запись, содержащую нулевые байты, что указывает на конец архива, на следующий заголовок архива. Таким образом, если ваша лента недоступна для поиска, вам, возможно, придется каждый раз перематывать ее назад, чтобы позволить tar прочитать эту запись, а затем перезаписать ее.

Также в GNU tar для добавления используется переключатель -rвместо -c.

Если вы только объединяете tar-файлы один за другим, GNU tar также имеет переключатель -i(для извлечения )для чтения после конца архива, до EOF (в случае лентопротяжного устройства это может быть или не быть мудрой идеей -если tar обнаружит старые данные в конце вашего последнего архива, он может попытаться извлечь их, или, что еще хуже, ему повезет, и он найдет старый архив идеально выровнены...)

Я использовал переключатель -iдля передачи нескольких tar-архивов по каналу, поэтому для меня это не было проблемой. То же самое относится к обычному файлу, который выдает EOF в конце.

-1
18.03.2021, 23:32

Теги

Похожие вопросы