У меня есть 5 миллионов файлов, которые занимают около 1 ТБ дискового пространства. Мне нужно передать эти файлы третьей стороне.
Какой лучший способ сделать это? Я попытался уменьшить размер, используя .tar.gz, но, несмотря на то, что мой компьютер имеет 8 ГБ ОЗУ, я получаю сообщение об ошибке «Недостаточно системной памяти».
Это лучшее решение для пересылки файлов по почте?
memory
tar
compression
out-of-memory
oshirowanen
источник
источник
.tar.gz
или КОПИРОВАНИЕ полученного сжатого файла? В любом случае, что-то странное, потому что ни одна операция не должна занимать больше памяти только потому, что файлы большие. То есть обе операции должны быть потоковыми. Пожалуйста, включите больше информации о том, какие именно команды не выполняются.tar
следует просто архивировать файлы постепенно, так как он перечисляет их, а не создавать список в памяти. Но, пожалуйста, покажите точную команду, которую вы используете. Кроме того, все ли файлы находятся в одном каталоге или структура каталога очень глубокая?Ответы:
Дополнительная информация, предоставленная в комментариях, показывает, что OP использует метод GUI для создания
.tar.gz
файла.Программное обеспечение с графическим интерфейсом часто включает в себя гораздо больше, чем эквивалентное программное обеспечение, аналогичное командной строке, или выполняет дополнительные ненужные задачи ради некоторой «дополнительной» функции, такой как индикатор выполнения. Меня не удивит, если программное обеспечение с графическим интерфейсом пытается собрать список всех имен файлов в памяти. Это не нужно делать, чтобы создать архив. Выделенные инструменты
tar
иgzip
предназначены для работы с потоковым вводом и выводом, что означает, что они могут работать с вводом и выводом намного больше, чем память.Если вы избегаете программы с графическим интерфейсом, вы, скорее всего, сможете сгенерировать этот архив, используя совершенно обычный ежедневный
tar
вызов, подобный следующему:где
foo
каталог, который содержит все ваши 5 миллионов файлов.Другие ответы на этот вопрос дают вам пару дополнительных альтернативных
tar
команд на случай, если вы захотите разделить результат на несколько частей и т. Д.источник
"пять миллионов" файлов и 1 ТБ в общей сложности? Ваши файлы должны быть очень маленькими. Я бы просто попробовал
rsync
:Если у вас этого нет - или ваш вариант использования не позволяет использовать
rsync
, я бы хотя бы проверил,7z
работает ли с вашими данными. Возможно, нет, но я думаю, что все же стоит попробовать:Или, если вам неудобно
7z
хотя бы попытаться сделать.tar.xz
архив:(Следует отметить, что более старые версии
tar
не создают.tar.xz
архивы, а.tar.lzma
архивы при использованииJ
коммутатора. Даже в более старых версиях флагtar
не поддерживаетсяJ
вообще.)Так как вы используете программу GUI для создания этих файлов, я предполагаю, что вы чувствуете себя немного неловко, используя интерфейс командной строки.
Для облегчения создания, управления и извлечения архивов из интерфейса командной строки есть небольшая утилита под названием
atool
. Он доступен практически для всех распространенных дистрибутивов, которые я видел, и работает практически со всеми архивами, на которые я наткнулся, за исключением безнадежно неясных.Проверьте, есть ли в вашем
atool
репозитории дистрибутив , или попросите администратора установить его, когда он находится в рабочей среде.atool
устанавливает несколько символических ссылок на себя, поэтому упаковка и распаковка становится проще:Создает архив.
Расширяет архив.
Перечисляет содержимое файла.
Какой тип архива создается,
atool
различается по расширению имени вашего архива в командной строке.источник
rsync
заключается в том, что, если (когда) соединение разрывается, оноrsync
может начать с того места, где оно было прервано.Если вы не можете сделать сжатие лучше, чем 25: 1, вы вряд ли что-то выиграете от сжатия этого перед обычной рассылкой, если у вас нет аппаратного формата ленты, который вы можете обменять с третьей стороной.
Самое большое общее хранилище - это синий луч, и это примерно 40 Гб. Вам понадобится сжатие 25: 1 для ваших данных, чтобы они соответствовали этому. Если у вашей третьей стороны есть только DVD, вам нужно 125: 1 (примерно).
Если вы не можете сопоставить эти сжатые числа, просто используйте обычный диск, скопируйте и отправьте его третьему лицу. В этом случае доставка чего-то меньшего, чем диск объемом 1 ТБ, который потребует сжатия, - это безумие.
Вы просто должны сравнить это с использованием
ssh -C
(стандартное сжатие) или, предпочтительно,rsync
со сжатием для копирования файлов по сети, не нужно сжимать и архивировать заранее. 1Tb не является невозможным для перемещения по сети, но это займет некоторое время.источник
Вы рассматривали торрент? Peer-to-Peer может быть вашим лучшим вариантом для передачи через Интернет:
Вы не сказали, какую ОС вы используете, но поскольку вы говорите о сжатии tar.gz, я предполагаю, что вы используете какую-то GNU / Linux-подобную ОС. Для этого я предлагаю передачу . Это торрент-программа с открытым исходным кодом, работающая на Mac и Linux. Мне это нравится, потому что разработчики прилагают усилия к тому, чтобы сделать его родным для всех клиентов графического интерфейса, которые они поддерживают: нет кроссплатформенного языка.
Вы можете комбинировать этот метод со сжатием, однако вы потеряете способность расставлять приоритеты для частей передачи.
источник
7z будет моим выбором. Это позволяет автоматически разделять архивы и поддерживает многопоточное сжатие. Нет,
xz
не смотря на то, что написано в справке. Попробуйте с:Выход разделен на блоки по 100 МБ (измените его с помощью
-v
переключателя).Единственным недостатком является то, что 7z не сохраняет метаданные Unix (например, права доступа и владельца). Если вам нужно , что трубы
tar
выход в7za
вместо (смman 7za
для некоторых примеров).источник
The only real downside
но какой недостаток!split
файл .tar.gz и сохранить метаданные.tar
подходу должен быть доступен только определенный файл .Да, удачи вам в этом. И инструмент с графическим интерфейсом попытается сделать это на том же томе, а это означает, что а) вам потребуется еще 1 ТБ свободного места и б) головная боль при чтении одного файла и добавлении его в архив не будет слишком здоровой для накопителя.
Я вижу две возможности:
1) rsync от вашего компьютера к третьему лицу. Один или другой будет нуждаться в глобальном IP-адресе, который меняется не часто. Огромное преимущество Rsync, если вы получаете прерван по какой - либо причине, он может забрать , где она была прервана. Копирование 1 ТБ тарбола будет либо успешным, либо неудачным
2) Приобретите внешний накопитель емкостью 1 ТБ, скопируйте на него данные и получите диск. Высокая задержка, но действительно хорошая пропускная способность, когда она прибывает. Различные онлайн-сервисы резервного копирования для этого для первоначального резервного копирования.
источник
Я предлагаю вам использовать что-то вроде:
который создаст 10 файлов размером не более 100 ГБ. Но это не решило бы вашу проблему "OOM", так как tar должен передавать поток для чтения / записи, поэтому узким местом является gzip.
источник
Как насчет этого:
find
поиск списков дерева каталоговtar -T -
читает список со стандартного ввода-czf -
создает архив и пишет в stdout,z
gzips потокssh remotehost
войти на удаленный хост используяssh
cd /target/dir/
перейти в целевой каталогtar xzf -
извлечь входящий поток из стандартного вводаисточник
С помощью fexsend вы можете отправлять файлы любого количества и размера любому получателю на лету, см .:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Конечно, вам нужен сервер F * EX, но он бесплатный:
http://fex.rus.uni-stuttgart.de:8080/
источник