On 2008.10.27 at 18:02:42 +0500, Andrey Teleshov wrote: > On Mon, 27 Oct 2008 11:49:17 +0300 > "Dmitry Fedorov" <[EMAIL PROTECTED]> 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 > блоков, чтобы его хранить. А не один блок, как я ожидал. Ну что ж,
Тут есть следующие тонкости 1. Блок в понимании ls и блок в понимании файловой системы - это не одно и то же. Похоже, что в данном случае ls считает размером блока 1Кб (у нее есть ключик --block-size), а умолчательный размер блока FS у нас нынче 4Кб. Так что 8 блоков с точки зрения ls это два реальных блока. 2. Файл с дыркой с одним значимым байтом в начале, и одним в конце, должен занимать именно ДВА БЛОКА. Просто по самому принципу организации дырок - если нам попался блок, состоящий из одних нулей, то мы его не размещаем. В начале файла есть ненулевые данные - мы блок разместили. Второй блок не разместили, а третий - опять разместили. Там есть ненулевой байт. В результате и получаем 8 кб занятого места на диске. Если файл будет не на 10 килобайт, а на 10 мегабайт, результат будет тот же самый. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

