LINUX.ORG.RU

Распаковать Squashfs и упаковать обратно

 ,


0

1

здравствуйте друзья! Есть Squashfs, само собой режим read only. Надо взять распаковать, поменять пару строчек текста и запаковать обратно. Как правильно это сделать?

Squashfs filesystem, little endian, non-standard signature, version 4.0, compression:gzip, size: 11594585 bytes, 1515 inodes, blocksize: 65536 bytes, created: 2018-03-27 08:01:12

Делаю так:

unsquashfs mtd9.bak

Меняю пару строчек, при этом удаляю столько же символов Комментов, т.е файл больше стать не должен. упаковываю так

mksquashfs  squashfs-root mtd9_new.bak -b 65536

в итоге почему-то получается объём больше на 2 мб, почему???

Ответ на: комментарий от anonymous

вот что у меня есть:

binwalk mtd9.bak

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Squashfs filesystem, little endian, non-standard signature, version 4.0, compression:gzip, size: 11594585 bytes, 1515 inodes, blocksize: 65536 bytes, created: 2018-03-27 08:01:12

А вот что получается

binwalk mtd9_new.bak
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 14414289 bytes, 1515 inodes, blocksize: 65536 bytes, created: 2019-01-21 20:10:43

Как видите оба в gzip посмотрел степень сжатия по умолчанию идёт 9... Что ещё может быть/

bart212k ()
Ответ на: комментарий от Elyas

вот что пишет при сборке

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 65536
	compressed data, compressed metadata, compressed fragments, compressed xattrs
	duplicates are removed
Filesystem size 14076.42 Kbytes (13.75 Mbytes)
	35.38% of uncompressed filesystem size (39786.52 Kbytes)
Inode table size 14164 bytes (13.83 Kbytes)
	28.46% of uncompressed inode table size (49761 bytes)
Directory table size 14320 bytes (13.98 Kbytes)
	42.74% of uncompressed directory table size (33506 bytes)
Number of duplicate files found 59
Number of inodes 1515
Number of files 1218
Number of fragments 93
Number of symbolic links  72
Number of device nodes 186
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 39
Number of ids (unique uids + gids) 2
Number of uids 1

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

нет ты не понял размер при просто распаковке и сборке выходит на 2 мб больше... Что вношу изменения в строку что не вношу всё равно откуда то прибавляются 2 мб...

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

Видимо, при создании оригинального образа использовали какой-то хитрый софт, который позволяет избавиться от дополнительной избыточности.

Похожая ситуация с базами GeoIP. Контора, которая их поставляет, публикует формат и даже перловые библиотеки для создания своих баз. Но если распаковать их базу, а потом запаковать их кодом, получится файл почти в два раза больше. Что-то около 100 МБ против 50 МБ.

i-rinat ★★★★★ ()
Ответ на: комментарий от bart212k

Я бы начал со сравнения оригинального и перепакованного образов squashfs по байтам. По разнице можно попытаться понять, где их паковщик поступил по-другому.

i-rinat ★★★★★ ()
Ответ на: комментарий от bart212k

Какая разница, как ты её снимал? Тут дело в том, что каким-то образом файлы смогли упаковать лучше, чем может упаковать mksquashfs. И при этом оставаясь в рамках формата.

Вообще, ничего удивительного. Если из GIMP'а сохраняешь PNG-файл, он не обязательно самого маленького размера. Специализированными компрессорами можно перебрать все варианты сжатия и сэкономить ещё несколько килобайт.

Тебе нужно найти способ упаковать плотнее. Для этого нужно либо найти некие волшебные утилиты, либо написать их самому.

i-rinat ★★★★★ ()
Ответ на: комментарий от kawaii_neko

file вообще молчит, а вот binwalk видимо врал... вот вывод

Filesystem size 11322.84 Kbytes (11.06 Mbytes)
Compression lzma
Block size 65536
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Fragments are compressed
Always-use-fragments option is not specified
Xattrs are compressed
Duplicates are removed
Number of fragments 93
Number of inodes 1515
Number of ids 1

упаковал lzma и о чудо!!! размер стал меньше, но теперь он меньше чем надо!

Filesystem size 11322.84 Kbytes (11.06 Mbytes) Block size 65536 распаковал и упаковываю ничего не изменив, получаю:

Filesystem size 11159.88 Kbytes (10.90 Mbytes) Block size 65536

Теперь то что?)))

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

Больше не меньше, главное что бы ядром в устройстве монтировался.

А вообще, в идеале нужно перепаковывать той же версией mksquashfs которой создавался исходны образ.

Ну либо ты прочитл больше чем нужно.

anonymous ()
Ответ на: комментарий от i-rinat

Если из GIMP'а сохраняешь PNG-файл, он не обязательно самого маленького размера. Специализированными компрессорами можно перебрать все варианты сжатия

Благодаря фильтрам (зачастую очень замедляющим сжатие). В GIMP'е я что-то их не вижу, в XnView и Fastone есть. Как я понимаю они тоже lossless.

anonymous ()