LINUX.ORG.RU

Разделение архива на несколько частей разного размера

 , ,


0

1

Всем привет. Суть такая, имеется резервная копия некой папки сетевого обмена, файл оказался 360+ ГБ и к тому же поврежден. На просторах интернет нашел решение которое заключается в том что бы разделить на 3 части 1 - 32б, 3-64б, а в 2-всё что между ними. Только вот не знаю как сделать. Делаю с dd, но получается очень медленно, приходится копировать по 1 байту что бы была возможность пропустить 32 и точно попасть в -64байта. Может есть какое решение Надеюсь на вашу помощь. Заранее спасибо


Ответ на: комментарий от Vsevolod-linuxoid

Я может плохо читаю, но читаю эту статью второй раз, первый раз читал два дня назад, но там нет того как резать файл на куски разного размера.

Stazot
() автор топика
Ответ на: комментарий от Stazot

А, извини, плохо ОП читал. Тебе наверное dd лучше, но бери не участок по байту 64 раза, а наоборот. И используй смещение.

А вообще, укажи точно (в ОП явные опечатки), какие именно диапазоны данных нужно копировать.

Vsevolod-linuxoid ★★★★★
()

Не совсем ясно, как разрезание файла поможет, если он уже повреждён. Очень это сомнительно.

Но на всякий случай ответ:

<большой_файл head -c 32 > начало
<большой_файл tail -c +33 | head -c -64 > середина
<большой_файл tail -c 64 > конец

# альтернативный вариант последней команды на случай, если tail окажется тупой и медленный, хотя у меня всё работает быстро
<большой_файл dd bs=1 count=64 skip=$(( $(stat большой_файл --printf=%s) -64)) > конец 
legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от Stazot

Согласно инструкции с сорсфорджа там не 64 с конца надо откусывать. Примерно так должно быть:

<bad.7z head -c 32 > bad.7z.001
<bad.7z tail -c +33 > bad.7z.002

cmp <(cat bad.7z.*) bad.7z # не должно говорить, что файлы разные

# (create a.7z that is at least 1 MB larger than bad.7z.)

<a.7z head -c 32 > a.7z.001
<a.7z tail -c +33 | head -c $(stat bad.7z.002 --printf=%s)  > a.7z.002
<a.7z tail -c +33 | tail -c +$(($(stat bad.7z.002 --printf=%s)+1)) > a.7z.003 # не уверен в этой строке

cmp <(cat a.7z.*) a.7z # не должно говорить, что файлы разные

mv bad.7z.002 a.7z.002

# распаковываем a.7z.*
legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Спасибо, я только не знал как их порезать

Stazot
() автор топика
Ответ на: комментарий от legolegs

Не подскажете как бы быстро создать архив в 369+ Гб не имея такого количества данных под рукой.

Stazot
() автор топика
Ответ на: комментарий от Stazot

Ну, нагенерировать мусора и сархивировать.

dd if=/dev/urandom of=random370gb.bin bs=1k count=370M
7z a archive370gb.7z random370gb.bin

Если жалко места под файл с мусором, то можно сжимать на лету:

dd if=/dev/urandom bs=1k count=370M | 7z a -sirandom370gb.bin archive370gb.7z

Но «быстро» не получится - 7z очень медленный.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.