`du` показывает ненулевой размер пустого каталога [дубликат]

На этот вопрос уже есть ответ:

Я знаю, что когда я создаю пустой каталог, он имеет свой размер:

mkdir test && du -h test

дает:

4,0K    test

Но это другой случай. У меня был каталог с файлами 1e6 (74 ГБ) на внешнем жестком диске (ext4). Я обработал их файлы, сохраненные в другом каталоге и удаленные из этого места в параллельном скрипте. Теперь этот каталог должен быть пустым. Это нормально, что

ls -a raw/all

print

.  ..

Но

du -h raw/all

дает

19M     raw/all

Без -h у нас ровно 19288Б. И это тоже странный результат:

ls -la raw/all

total 19292
drwxr-xr-x 2 daniel daniel 19746816 wrz 18 19:23 .
drwxrwxr-x 4 daniel daniel     4096 wrz 17 13:21 .. 

Что происходит? Есть ли кеш в команде du ? Или после обработки такого количества файлов после этих файлов остаются какие-то остатки? I удалено из файла unlink в скрипте perl5.

Обновление - ответы на вопросы из комментариев

ls -aiR raw/all
raw/all:
51647758 .  51647760 ..

lsof +L1 

печатает 44 строки, но ничего не связано с этим каталогом. Но lsof дает что-то с числами, вроде e 19746816 .

lsof | grep raw
bash      5355                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof      5677                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
grep      5678                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof      5679                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all

Ноутбук был перезагружен. Внешний диск был отключен. Но du по-прежнему показывает 19M .

0
задан 21 September 2017 в 01:40

1 ответ

Каталоги в ext4 файловых системах растут, но не уменьшаются. Так, если в какой-то момент это должно было поднять 19M для хранения деталей файлов в нем, это сохранит так много пространства, даже если те файлы были удалены. Если Вы хотите уменьшить теперь пустой каталог, удалить и воссоздать его:

rmdir foo && mkdir foo

Или, сдерживающие полномочия:

mkdir foo2
chown --reference=foo foo2
getfacl foo | setfacl --set-file=- foo2
rmdir foo
mv foo2 foo

Источник:

2
ответ дан 2 November 2019 в 06:03

Другие вопросы по тегам:

Похожие вопросы: