Несжатый tar-архив из одного файла состоит заголовка, файла и завершающей панели. Итак, ваша основная проблема заключается в том, как добавить 512 байт заголовка в начало вашего файла. Вы можете начать с создания желаемого результата, используя только заголовок:
tar cf - bigfile | dd count=1 >bigarchive.tar
Затем скопируйте первые 10 ГБ вашего файла. Мы просто предполагаем, что ваш dd может читать / записывать 1 ГБ за раз:
dd count=10 bs=1G if=bigfile >>bigarchive.tar
Теперь мы освобождаем скопированные данные из исходного файла:
fallocate --punch-hole -o 0 -l 10GiB bigfile
Это заменяет данные разреженными нулями, которые не занимают места на файловую систему.
Продолжайте таким же образом, добавляя skip = 10
к следующему dd
, а затем увеличивая начальное смещение fallocate
до -o 10 ГБ
. В самом конце добавьте несколько символов null, чтобы дополнить окончательный tar-файл.
Если ваша файловая система не поддерживает fallocate
, вы можете сделать что-то подобное, но начиная с конца файла. Сначала скопируйте последние 10 Гбайт файла в промежуточный файл с именем, скажем, part8
. Затем используйте команду truncate
, чтобы уменьшить размер исходного файла. Действуйте аналогично, пока у вас не будет 8 файлов по 10 Гбайт каждый. Затем вы можете объединить заголовок и часть1
в bigarchive.tar
, затем удалите part1
, а затем объедините part2
и удалите его, и так далее.