Расхождение с выводом du df
Добавление размеров файлов и каталогов, возвращаемых ls
дает значение, отличное от df
или же du
, df
а также du
Команды выдают мне один и тот же вывод, поэтому у меня нет такой частой проблемы, но я знаю, что это было "пустое" устройство / папка, поэтому я хотел знать, почему это "не пустое" использованное пространство.
Моя первая мысль была о скрытых файлах, поэтому я искал и нашел опцию -a, но цифры еще не складываются [24,4 КБ из ls -lah
сильно отличается от 5,1 МБ с df и du: вывод в конце сообщения]. Еще одна странная вещь - вывод e2fsck, похоже, там 13 файлов [., .., lost+found, но как найти оставшиеся 10?]
Кто-нибудь знает, что мне все еще не хватает?
cd /mnt
# ls -lah
total 24
drwxr-xr-x 3 root root 20.0K May 7 09:36 .
drwxrwxr-x 17 root root 420 May 7 09:26 ..
drwx------ 2 root root 4.0K Apr 21 13:42 lost+found
# df -h /mnt
Filesystem Size Used Available Use% Mounted on
mmcblk0p1 1.8G 5.1M 1.7G 0% /mnt
# du -d 0 -h /mnt
5.1M /mnt
# umount /mnt
# e2fsck -C 0 /dev/mmcblk0p1
e2fsck 1.42.12 (29-Aug-2014)
/dev/mmcblk0p1: clean, 13/117360 files, 8693/468990 blocks
1 ответ
ls
не показывает размер содержимого каталога. Он показывает размер, используемый для хранения метаданных, описывающих каталог. Этот размер будет зависеть от количества файлов в каталоге и длины их (и каталогов) имен, а не от их размеров. Чтобы проиллюстрировать это, я создам разное количество пустых (0-размера) файлов:
## 10 files
for i in {1..10}; do touch foo/$i; done
$ ls -l
drwxr-xr-x 2 terdon terdon 4096 May 11 16:36 foo
$ du -sc foo/* | grep total
0 total
## 100000 files
$ touch foo/file{1..100000}
ls -l
drwxr-xr-x 2 terdon terdon 2801664 May 11 16:37 foo
$ du -sc foo/* | grep total
0 total
Как вы можете видеть выше, размер сообщения ls
изменилось, несмотря на то, что фактический размер каталога не изменился.
Итак, ваши недостающие файлы, вероятно, находятся в lost+found
каталог, проверьте там.