
Дан файл с синглом h
в нем. Если я запущу find
примитив, -ls
я получу следующий вывод:
$ cat some_file
h
$ find . -ls
2750606 0 drwxr-xr-x 4 mbigras FOO\Domain Users 136 May 18 12:35 .
3067730 16 -rw-r--r-- 1 mbigras FOO\Domain Users 6148 May 18 12:33 ./.DS_Store
3067836 8 -rw-r--r-- 1 mbigras FOO\Domain Users 2 May 18 12:35 ./some_file
Из man find
и поиска -ls
мы можем найти вывод следующей информации о файлах:
его номер inode, размер в блоках по 512 байт, права доступа к файлу, количество жестких ссылок, владелец, группа, размер в байтах, время последнего изменения и путь.
Меня интересуют некоторые вещи:
- Если в нем
some_file
есть толькоh
один байт, то почему "размер в байтах" равен 2? Я бы ожидал, что он будет равен 1. - Если второе число — это «размер в 512-байтовых блоках», то почему оно больше «размера в байтах»? Я бы ожидал, что оно будет равно 0 или, по крайней мере, меньше.
решение1
some_file
содержит h
за которым следует новая строка, всего два байта. Попробуйте что-то вроде
hexdump -C some_file
для просмотра содержимого файла байт за байтом.
Любой файл размером от 1 до 512 байт займет один блок размером 512 байт, если это минимальный размер выделения на диске, точно так же, как файл размером 513 байт займет два блока по 512 байт. Количество блоков не округляется до ближайшего целого числа.
решение2
посмотрим, в чем причина, почему мы используем 512 байт; предположим, файл размером 513 байт, то что происходит, так это то, что для того, чтобы сохранить этот файл, нам нужно 2 блока размером 512 байт на жестком диске. Чтобы сохранить 513-й байт, нам нужно выделить полный блок жесткого диска, который содержит 512 байт правильно. Таким образом, есть потеря 511 байт из-за внутренней фрагментации, поэтому для того, чтобы уменьшить эту внутреннюю фрагментацию, всегда лучше, чтобы вы сохраняли размер блока как можно меньше, и экспериментальным путем мы обнаружили, что 512 байт - это размер, который является оптимальным, если вы уменьшите его, то вам, возможно, придется получить доступ ко многим блокам, чтобы получить доступ к файлу, и это займет время. Поэтому для того, чтобы оптимизировать вещи, они экспериментально обнаружили, что 512 байт - это лучший размер для того, чтобы увеличить эффективность и уменьшить потери памяти.