[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Чем сжать "файл с дырками"?



On Mon, 27 Oct 2008 11:49:17 +0300
"Dmitry Fedorov" <dm.fedorov@gmail.com> wrote:

> > Хм... Видимо, я что-то недопонимаю в том, как FS хранит такой файл.
> > Размер файла 4294967296 байт, т.е. 4194304 кбайт. Ясно, что не все эти
> > килобайты заполнены, часть этого пространства -- дырки.
> >
> > Но FS хранит один такой файл в 1119512 однокилобайтных блоках, а другой
> > точно такой же (копию) -- в 1051616 блоках. Странно.
> 
> Дырки сами по себе из нулевых данных не образуются, их делать надо.
> В одном файле нули остались нулями с использовнием блоков данных,
> без дырок,
> в другом нулевые области заменились дырками.

Ура! Я продырявил файл!

~/tmp$ dd if=/dev/zero of=orig.bin count=20
20+0 записей считано
20+0 записей написано
 скопировано 10240 байт (10 kB), 0,0001567 секунд, 65,3 MB/s

~/tmp$ hexedit orig.bin 
(два байта, нулевой и последний, поменял с 0x00 на 0xAA)

~/tmp$ cp --sparse=always orig.bin copy.bin 

~/tmp$ ls -1s
 8 copy.bin
12 orig.bin

Что мы видим? Файл размером 10 kB с двумя ненулевыми и остальными
нулевыми байтами продырявился, но файловой системе нужно целых 8
блоков, чтобы его хранить. А не один блок, как я ожидал. Ну что ж,
видимо, ей так нравится. Оставим это на её совести. :) Вопрос закрыт.
Спасибо за советы.

-- 
Андрей Телешов


Reply to: