Tar Solaris, как использовать опцию -k?

Вопрос или проблема

Я хочу создать архив, разделенный на 300k архивов,
но выдает ошибку

    tar -cf file.tar -k300 vi*       
tar: -k300: Нет такого файла или каталога

Я пробую поставить -k перед -c

tar -k 300 -cf file.tar vi* 
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...

tar -f file.tar -c -k 300  vi*            
Usage: tar {c|r|t|u|x}[BDeEFhilmnopPqTvw@[0-7]][bfk][X...] [blocksize] [tarfile] [size] [exclude-file...] {file | -I include-file | -C directory file}...

Обходной путь – использовать gnu tar

gtar -cv --tape-length=300k --file=file-{0..10}.tar vi*       

Но я хочу знать, как это сделать с Sun Tar

Решение найдено. Насколько я понимаю, опция -k не может работать с обычными файлами (работает плохо), нужен ленточный или дисковод

В этом примере работает для ленты, и 13000 – это 13000k архива

tar -cvfk /dev/rmt/0 13000 bigfile

Спросят

tar: пожалуйста, вставьте новый том, затем нажмите ENTER.

Также можно использовать его на обычном файле на диске, но он создаст странный «мультиархивный файл», который будет содержать только последний том (каждый раз, когда вы вставляете строку нового тома, он будет перезаписывать файл «file.tar») вместо корректных отдельных архивных файлов

#ОШИБКА
tar -cvfk file.tar 13000 bigfile

Ответ или решение

Вопрос, касающийся использования параметра -k в утилите tar Solaris, требует детального объяснения, учитывая, что данный параметр часто вызывает путаницу у пользователей. Основное недопонимание связано с разницей в реализации и функциональностью tar в различных версиях Unix-подобных систем, таких как Solaris и GNU/Linux.

Теория (T – Theory)

Утилита tar, сокращение от "tape archive" (архиватор на ленты), изначально разрабатывалась для архивирования файлов на магнитные ленты. В Solaris tar появляется историческая связка с устройствами, на которые обычно записываются данные большими блоками, такими как ленты или дискеты. Параметр -k в контексте Solaris tar используется для указания того, что архив должен быть разделен на несколько томов. Однако важно понимать, что по умолчанию Solaris tar ожидает взаимодействия с ленточными устройствами, а не с обычными файлами на диске.

Пример (E – Example)

В вашем вопросе вы пытались использовать команду:

tar -cf file.tar -k300 vi*

где ожидалось, что архив будет автоматически разделен на части объемом 300 килобайт. Однако, как видно из сообщения об ошибке "tar: -k300: No such file or directory", утилита интерпретирует -k300 как необрабатываемую опцию или файл. Дело в том, что Solaris tar не поддерживает прямое указание размера частей через командную строку в таком формате.

При попытке перемещения -k перед -c, ваш вызов все так же приводит к ошибке, так как формат был ошибочен:

tar -k 300 -cf file.tar vi* 

В Solaris tar параметр -k требует соединения с ленточным устройством:

tar -cvfk /dev/rmt/0 13000 bigfile

Здесь указывается, что архив должен быть записан на устройство /dev/rmt/0, и при достижении 13000 килобайт архив будет предложено сменить том.

Применение (A – Application)

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

  1. Использование GNU tar: GNU tar предлагает более продвинутые возможности для работы с архивами на диске, включая указание размера частей архивов с помощью параметра --tape-length. Это предложение вы уже рассмотрели:

    gtar -cv --tape-length=300k --file=file-{0..10}.tar vi*

    GNU tar способен корректно обрабатывать такие запросы и создавать последовательные архивные файлы, соответствующие необходимым требованиям по объему.

  2. Автоматизация через скрипты: Если вам принципиально использовать SunOS tar, можно создавать архивы по частям через сценарии на языках, таких как Shell или Python, которые будут поэтапно архивировать исходные файлы, следя за размером каждого создаваемого архива.

  3. Альтернативные утилиты архивации: В случае отсутствия GNU tar, доступными альтернативами могут стать такие утилиты, как zip или pax, которые могут предлагать разбиение архива на части.

Важным моментом является понимание того, что утилиты могут различаться по своим возможностям и ограничениям в зависимости от операционной системы. В случае Solaris, исторические причины играют значительную роль в ограничении использования функционала с жесткими дисками, что требует других подходов для достижения требуемых результатов по сравнению с GNU/Linux системами.

Оцените материал
Добавить комментарий

Капча загружается...