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

Удалить исходный tar после распаковки? Недостаточно места для распаковки

У меня есть tar-файл объемом 130 ГБ, который мне нужно распаковать в / storage.

Проблема в том, что у меня недостаточно места на диске для одновременного существования обоих. Как я могу распаковать tar-файл и убедиться, что на диске достаточно места, и удалить файл сразу после распаковки?

Спасибо.

Это сложно. Это действительно зависит от того, сколько у вас свободного места.

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

Обновление tar требует, чтобы tar был восстановлен без удаленных файлов на том же диске. Вот почему у вас должен быть размер tar в два раза + что-то еще, чтобы можно было извлекать файлы.

HTH

Если это просто файл tar (т.е. не заархивированный) и если на диске достаточно места для хранения заархивированной версии tarball, вы можете попытаться заархивировать его, а затем создать unzip | tar труба. Однако я бы проверил это заранее.

Более простое решение: приобретите диск большего размера.

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

Одним словом: боль и страдание ...

Понимание формат файла, используемый tar, вы можете создать некоторые инструменты, которые помогут вам в том, что вы делаете, но есть сложности, которые могут иметь или не иметь отношения к вашему конкретному файлу. Файл tar использует заголовки размером 512 байт, которые, помимо прочего, определяют имя файла и его длину. Вы можете использовать эту информацию для создания серии смещений в файле tar для каждой записи файла. Затем вы можете сделать что-то вроде перемещения по tar-файлу назад и обрезать файл по мере извлечения файлов.

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

Язык программирования Python, среди прочего, включает хорошую библиотеку для работы с tar-файлами.

Однако другой вариант - просто разделить большой файл tar на множество файлов меньшего размера, независимо от формата tar. Разделите конец и затем обрежьте исходный файл. Повторяйте до тех пор, пока вместо одного файла размером 130 ГБ у вас не будет 130 файлов размером 1 ГБ. Очевидно, что получение правильного разделения / усечения может быть немного сложным. Это можно сделать с помощью команд "dd" и "truncate"

Тогда было бы несложно создать сценарий, который "отбирает" первый файл, удаляет первый файл, отбирает второй файл, удаляет второй файл и т. Д. Передать этот сценарий в "tar x" и как tar файл извлекает исходные файлы будут удалены.

Конечно, все это разрушительные операции, так что у вас в основном есть один шанс сделать их правильно.

Самый простой - если у вас есть место, куда можно скопировать файл размером 130 ГБ и извлечь его оттуда. Скажем, внешний жесткий диск USB или другой компьютер и извлеките его через туннель SSH.