Назад | Перейти на главную страницу

Команда tar версия Solaris для файлов размером более 2 ГБ

У нас есть несколько файлов размером более 2 ГБ, тарированных с использованием команды tar в версии UNIX (SunOS 5.5 с последним изменением: 1995!). Для файлов tar размером более 2 ГБ установлен флаг "E". Вот как это было сделано:

rsh sun_server tar cvEf - abc/file1 abc/file2 | rsh archive_server archive_cmd

Обратите внимание, что archive_server также является сервером UNIX и использует ту же версию команды tar.

При извлечении мы делаем так:

cd /destination_path/
rsh archive_server retrieve_cmd | tar xvf - 

Произошло то, что файлы были извлечены в / abc / (в родительский каталог); не в / destination_path / abc /

Странно то, что мы изменили метод получения на gtar:

cd /destination_path/
rsh archive_server retrieve_cmd | gtar xvf - 

Для файлов> 2 ГБ в конце выдает много ошибок типа «плохой заголовок» и «память исчерпана». Однако файлы размером менее 2 ГБ обычно извлекаются в / путь_назначения / abc / !

Нам нужно извлечь файлы размером> 2 ГБ в / destination_path / abc /, потому что в / abc / много файлов с одинаковыми именами, и мы опасаемся, что извлеченные файлы перезапишут их.

Я тоже пробовал

rsh archive_server retrieve_cmd | tar xvf - /destination_path/

и

cd /destination_path/
rsh archive_server retrieve_cmd | tar xvf - .

Но результат: никакого результата! Он показывает, что извлечение завершено успешно, но файлы не извлечены ни в / abc /, ни в / destination_path /!

Есть ли способ извлечь эти файлы по желаемому пути назначения ..?

rsh быстрее, чем ssh, но я предпочитаю ssh. это должно сработать, заменив ssh на rsh.

gtar -cf - файлы | ssh user @ host "(cd / destPath; gtar -xf -)"

Ключ здесь заключен в круглые скобки.

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

cptfrl

Вам нужно использовать tar (gtar) GNU с обеих сторон. Tar Solaris незаметно испортит файлы размером> 2 ГБ. Кроме того, он незаметно испортит файлы с длинными именами.

Мысль, вы могли бы использовать команду split, чтобы разбить tar-архив на несколько частей .... Например, рассмотрим что-то вроде:

tar cf - <dirspec> | split --bytes=1GB  <destdir>/archive.

Местом назначения может быть смонтированная файловая система NFS. Или вы могли бы затем отправить их из локального источника с множеством команд удаленного копирования, выполняемых одновременно, если хотите, впоследствии.

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

cd <destdir>
cat archive.* | tar xf -

В сети я бы немного обеспокоился передачей непрерывного потока байтов такой длины в зависимости от расстояния. В любом случае, передача меньшего сегмента, вероятно, предпочтительнее для более легкого восстановления после сбоев сети.

Чтобы уменьшить размер, вы можете добавить в смесь gzip / gunzip, в зависимости от того, сколько процессорного времени вы можете себе позволить.