Portál AbcLinuxu, 27. července 2025 17:37
block_size=4955 target_file=file app_script=app_script sync mke2fs -c /dev/ram $block_size mount -t ext2 /dev/ram /mnt cp -R root-fs/* /mnt/ umount /dev/ram dd if=/dev/ram bs=1k count=$block_size of=ext2n cp ext2n image gzip -9v -f image cp -f image.gz $target_file syncProblem je v tom, ze ked ho spustim prvykrat (po restarte compu) tak velkost
$target_file
je okolo 1,1MB (kompresia okolo 77%). Ale ked ho spustim druhykrat tak vysledny subor $target_file
je velky uz okolo 1,3MB (kompresia okolo 71%). Potrebujem setrit miestom a 77%tna kompresia je este pripustna, kdezto 71%tna uz nie. V com moze byt problem ? preco mi to raz skomprimuje tak, raz tak ?
Tipujem, ze by mohol byt problem vo filesysteme, ktory vytvaram v /dev/ram, ale nexapem preco, kedze ho vytvaram nanovo.
gzip -9v -f imagedava spusten dvakrat pokazde jiny vysledek?
gzip
je deterministicky program, takze pokud dava ruzne vysledky, tak musi byt ruzny vstup. To že dd
dává stejný počet bytů nic neznamená, záleží na jejich obsahu a ten bude pro oba případy různý.
Tipujem, ze by mohol byt problem vo filesysteme, ktory vytvaram v /dev/ram, ale nexapem preco, kedze ho vytvaram nanovo.
Tohle možná bude ten problém. Při vytváření se FS nemaže. Tedy předchozí byty tam fyzicky zůstanou (jen se vytvoří nové inody a bitmapy pro prázdný FS). Takže pro další komprimaci se sice vytvoří FS, ale image té partišny není stejný i když ten FS obsahuje stejná data.
Zkuste do toho skriptu vložit vymazání té partišny (dd
z /dev/zero
)
mke2fs -c /dev/ram $block_size
dd if=/dev/zero of=/dev/ram bs=1k count=$block_size
dd if=/dev/zero
je potrebne dat nie za ale predmke2fs
dd if=/dev/ram bs=1k count=$block_size of=ext2n
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.