У меня есть несколько копий файла. Файлы занимают 2390170 КБ каждый, в соответствии с ls -lk
и du --apparent-size -k
.
Проблема в том, что du -k
сообщает разные размеры для каждой копии: 2389824, 2392512, 2392512 и 2390336.
Я ожидал, что использование диска должно составлять 2390172 КБ (размер минимального числа блоков (597543), куда помещается файл.
Итак, почему у каждого файла разное использование диска?
Я также видел, что одна из копий использует 2389824 КБ, но размер файла на 346 КБ больше: 2390170. Как это имеет смысл?
PD: Все файлы находятся в одной файловой системе ext3. Размер блока файловой системы составляет 4096. Все файлы имеют одинаковый хэш.
Обновление: из комментариев:
although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like
редкие файлы могут быть причиной, потому что использование диска ниже. Но я не вижу, как внутренняя фрагментация или косвенные блоки могут уменьшить использование диска по сравнению с исходным файлом. Поскольку файл один и тот же, использование диска из-за внутренней фрагментации и косвенных блоков должно быть постоянным.
Я заметил, что cp --sparse=always
может сделать разреженный файл из не разреженного.
cp --sparse=always
приводит к файлу, который использует 2390336KiB cp --sparse=never
приводит к файлу, который использует 2392512KiB
Поэтому я предполагаю, что использование 2389824KiB для одной из копий вызвано другой реализацией разреженного алгоритма ...
Исходный файл был скопирован с компьютера Windows через sftp или samba, и я думаю, что файл 2389824KiB является его копией, но я не помню, как я это сделал (я думаю, что с cp, но я не конечно).