Как распаковать архив TAR.GZ размером 600+Гб на ssd 1Tb?
Есть ноутбук с SSD 1Тб, на нем в папочке лежит архив TAR.GZ объёмом сильно превышающим половину объема самого SSD (600+Гб). Оригинальный файл архива не требует сохранения, но нужна информация, которая внутри архива. Подктньте идей, как его можно распаковать без использования сторонних жёстких дисков. Всё ещё осложняется архитектурой CPU ноутбука aarch64 вместо x86_64. Но это уже мелочи.
Ответы (2 шт):
Теоретически, это можно сделать, так как gzip/deflate - потоковый формат. То есть, можно удалять уже распакованную часть архива с диска. Но вот есть ли на свете такой архиватор - это уже вопрос.
Возможно, придется вооружиться zlib и написать распаковщик с нуля, там относительно не сложно.
Идея такая - режем архив на чанки, скажем по сто мегабайт. Дальше просто - распаковали сто мегабайт - стерли чанк, и так далее.
Можно даже поступить более элегантно - некоторые ФС (ext4 в частности), позволяют при помощи вызова fallocate (Deallocating file space) делать в файле дыру, обозначая, что это место файл больше не занимает(дальнейшее чтение их этого места будет выдавать нули вместо данных). Так что чанки можно не делать.
Были полезны все ответы отсюда.
Я сделал небольшой скрипт на баше, который собирает в БД пути к файлам, потом монтирует архив как диск, скачивает оттуда файлы. Поначалу все файлы в алфавитном порядке без маппинга. Но потом переделал выборку файлов по конкретным смещениям в архиве.
Иными словами, когда архив примонтирован, файлы добываются без проблем в readonly режиме. И этим можно сносно пользоваться.
Но распаковать полностью так и не удалось. Удаление из архива длится целую вечность. Задачу можно решить на более низком уровне. Вероятно, пришлось бы даже вспомнить ассемблер.
Но с такими задачами надо обращаться к доктору в Кащенко.
Пришлось купить внешний терабайт.