#linux #bash #unix
ПОчему не сходится вывод du -h и du -b? $ du -h файл 12k $ du -b файл 8738
Ответы
Ответ 1
читаем man du про опцию -b: -b, --bytes equivalent to `--apparent-size --block-size=1' читаем там же про опцию --apparent-size: --apparent-size print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like мой вольный перевод: выводит «видимые» (apparent) размеры файлов вместо используемого дискового пространства; хотя «видимый» размер обычно меньше, он может быть больше из-за пустого места в «дырявых» (sparse) файлах, внутренней фрагментации, косвенных блоков и т.п. проверяем, что --apparent-size даёт в реальности (создаём файл, содержащий 8738 байтов 0x00): $ dd if=/dev/zero of=file1 bs=1 count=8738 8738+0 records in 8738+0 records out 8738 bytes (8.7 kB) copied, 0.0111545 s, 783 kB/s $ du -b file1 8738 file1 $ du -h file1 12K file1 $ du -h --apparent-size file1 8.6K file1 а на файле, который вообще пуст (т.н. «дырявый», sparse), получается ещё наглядней: $ truncate -s 8738 file2 $ du -b file2 8738 file2 $ du -h file2 0 file2 $ du -h --apparent-size file2 8.6K file2 а откуда, собственно, цифра 12K? она кратна размеру блока на диске: место под файл отводится блоками. в вашем случае, вероятно, в районе 4K. уточнить для файловых систем ext* можно, например, так: $ sudo tune2fs -l /dev/sda1 | grep -i 'block size' Block size: 4096 где /dev/sda1 — раздел, на котором находится этот самый рассматриваемый файл.
Комментариев нет:
Отправить комментарий