URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93554
[ Назад ]

Исходное сообщение
"Директория пуста, но ls и du рапортуют, что нет"

Отправлено fa , 12-Июл-12 03:31 
Всем привет

Недавно вычищал директорию /var/spool/clienmqueue. Удалил все. Однако ls и du говорят, что там лежит 20M файлов. Внизу копипаст консольных комманд.

# cd /var/spool/clienmqueue
# find ./ -type f -delete
# ls
# ls -lah
total 20M
drwxrwx---  2 smmsp smmsp  20M Jul 12 01:20 .
drwxr-xr-x 11 root  root  4.0K May 11  2011 ..
# cd ..
# du -ch clientmqueue/
20M     clientmqueue/
20M     total

Почему эти комманды выводят неактуальные данные?

P.S. В clienmqueue точно ничего нет (нет никаких скрытых файлов).


Содержание

Сообщения в этом обсуждении
"Директория пуста, но ls и du рапортуют, что нет"
Отправлено PavelR , 12-Июл-12 06:29 
>[оверквотинг удален]
> # ls -lah
> total 20M
> drwxrwx---  2 smmsp smmsp  20M Jul 12 01:20 .
> drwxr-xr-x 11 root  root  4.0K May 11  2011 ..
> # cd ..
> # du -ch clientmqueue/
> 20M     clientmqueue/
> 20M     total
> Почему эти комманды выводят неактуальные данные?
> P.S. В clienmqueue точно ничего нет (нет никаких скрытых файлов).

Вы не пробовали _читать_ ? А, в Вашем Windowz читать не надо, там всё мышкой тыкается и "интуитивно понятно"?

ребут сервера может помочь. попробуйте.

А потом - читать. Много читать.


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 09:36 
> ребут сервера может помочь. попробуйте.

не поможет, если конечно директория не в ram
> А потом - читать. Много читать.

поможет :)


топикстартеру: du и ls говорят вам что директория весит 20Mb, а вы считаете что файлы в ней весят 20Mb ;)


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено Andrey Mitrofanov , 12-Июл-12 10:02 
> не поможет, если конечно директория не в ram
>> А потом - читать. Много читать.
> поможет :)
> топикстартеру: du и ls говорят вам что директория весит 20Mb, а вы
> считаете что файлы в ней весят 20Mb ;)

Да, больше похоже на пустую директорию, в которой было [удалено] ~100тыс. файлов, но она не освободила неиспользуемое место, чем на FAQ им. "du vs df vs total".

---
Шел+авк все читают? %))

$ for((d=0;d<5133;d++)); do touch 1/$d; echo "$d: `du -b 1`"; done|awk '{if($2!=p)print;p=$2;fflush()}'
0: 14   1
1: 22   1
2: 30   1
3: 38   1
4: 46   1
5: 54   1
6: 62   1
7: 70   1
8: 78   1
9: 86   1
10: 95  1
11: 104 1
12: 113 1
13: 122 1
14: 131 1
15: 140 1
16: 149 1
17: 4096        1
253: 8192       1
508: 12288      1
763: 16384      1
1018: 20480     1
1273: 24576     1
1528: 28672     1
1783: 32768     1
2038: 36864     1
2293: 40960     1
2548: 45056     1
2803: 49152     1
3058: 53248     1
3313: 57344     1
3568: 61440     1
3823: 65536     1
4078: 69632     1
4333: 73728     1
4588: 77824     1
4843: 81920     1
5098: 86016     1
$ for((d=5144;d>=0;d--)); do rm -f 1/$d; echo "$d: `du -b 1`"; done|awk '{i
f($2!=p)print ;p=$2;fflush()}'
5144: 86016     1
5098: 81920     1
4843: 77824     1
4588: 73728     1
4333: 69632     1
4078: 65536     1
3823: 61440     1
3568: 57344     1
3313: 53248     1
3058: 49152     1
2803: 45056     1
2548: 40960     1
2293: 36864     1
2038: 32768     1
1783: 28672     1
1528: 24576     1
1273: 20480     1
1018: 16384     1
763: 12288      1
508: 8192       1
253: 4096       1
17: 149 1
16: 140 1
15: 131 1
14: 122 1
13: 113 1
12: 104 1
11: 95  1
10: 86  1
9: 78   1
8: 70   1
7: 62   1
6: 54   1
5: 46   1
4: 38   1
3: 30   1
2: 22   1
1: 14   1
0: 6    1
$ _

xfs "дувается" в онлайне[, извините].
А если создать в том же порядке, что и удалять (не в  обратном, как выше), то

$ for((d=5144;d>=0;d--)); do touch 1/$d; done
$ for((d=5144;d>=0;d--)); do rm -f 1/$d; echo "$d: `du -b 1`"; done|awk '{if($2!=p)print ;p=$2;fflush()}'|less
5144: 86016     1
0: 6    1

уже не совем сразу.


В общем случай разный может быть.

---И да, до сих пор в непонятках, где _такое _прочитать:)


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 10:28 
ну тут явно не du vs df, тут du и ls

насчет xfs, не знаю но думаю что также: ext2,3 в файле типа директория хранит список имя файла и его inode и после удаления файлов из директории, этот список не изменяется, не дефрагментируется, поэтому уменьшить размер файла-директории можно только пересоздав ее, ну или отредактировав файл-директорию напрямую на диске

прочитать это можно в книжке по архитектуре unix, как правило ext2/ext3 там рассматриваются, в робачевском, книжка с черепашкой это есть...


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 10:49 
> ну тут явно не du vs df, тут du и ls
> насчет xfs, не знаю но думаю что также: ext2,3 в файле типа
> директория хранит список имя файла и его inode и после удаления
> файлов из директории, этот список не изменяется, не дефрагментируется, поэтому уменьшить
> размер файла-директории можно только пересоздав ее, ну или отредактировав файл-директорию
> напрямую на диске
> прочитать это можно в книжке по архитектуре unix, как правило ext2/ext3 там
> рассматриваются, в робачевском, книжка с черепашкой это есть...

нет в xfs не так как в ext

Структура директорий в XFS - это просто песня!.. цитата из http://www.opennet.me/docs/RUS/xfs_struct/


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено lavr , 12-Июл-12 10:57 
>> ну тут явно не du vs df, тут du и ls
>> насчет xfs, не знаю но думаю что также: ext2,3 в файле типа
>> директория хранит список имя файла и его inode и после удаления
>> файлов из директории, этот список не изменяется, не дефрагментируется, поэтому уменьшить
>> размер файла-директории можно только пересоздав ее, ну или отредактировав файл-директорию
>> напрямую на диске
>> прочитать это можно в книжке по архитектуре unix, как правило ext2/ext3 там
>> рассматриваются, в робачевском, книжка с черепашкой это есть...
> нет в xfs не так как в ext
> Структура директорий в XFS - это просто песня!.. цитата из http://www.opennet.me/docs/RUS/xfs_struct/

вы удаляли файлы при работающем sendmail'е?!

lsof покажет вам кто держит файлы...

# service sendmail stop
# sync; sync

Возможно, решат проблем без перезагрузки.



"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 11:25 
>[оверквотинг удален]
>>> напрямую на диске
>>> прочитать это можно в книжке по архитектуре unix, как правило ext2/ext3 там
>>> рассматриваются, в робачевском, книжка с черепашкой это есть...
>> нет в xfs не так как в ext
>> Структура директорий в XFS - это просто песня!.. цитата из http://www.opennet.me/docs/RUS/xfs_struct/
> вы удаляли файлы при работающем sendmail'е?!
> lsof покажет вам кто держит файлы...
> # service sendmail stop
> # sync; sync
> Возможно, решат проблем без перезагрузки.

это не du vs df vs total


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено lavr , 12-Июл-12 11:37 
>[оверквотинг удален]
>>>> прочитать это можно в книжке по архитектуре unix, как правило ext2/ext3 там
>>>> рассматриваются, в робачевском, книжка с черепашкой это есть...
>>> нет в xfs не так как в ext
>>> Структура директорий в XFS - это просто песня!.. цитата из http://www.opennet.me/docs/RUS/xfs_struct/
>> вы удаляли файлы при работающем sendmail'е?!
>> lsof покажет вам кто держит файлы...
>> # service sendmail stop
>> # sync; sync
>> Возможно, решат проблем без перезагрузки.
> это не du vs df vs total

вы читать умеете?! буквы различаете?!

файлы были удалены при работающем sendmail демоне?!

Если точно сказать не можете: ответ - не помню, не уверен что остановил сервис sendmail
перед удалением файлов.


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 11:41 
> вы читать умеете?! буквы различаете?!
> файлы были удалены при работающем sendmail демоне?!
> Если точно сказать не можете: ответ - не помню, не уверен что
> остановил сервис sendmail
> перед удалением файлов.

я умею читать, но я не могу вас понять, я не топикстартер, поэтому на ваш вопрос ответить не могу.
Вы внимательно читали тред?


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено lavr , 12-Июл-12 11:49 
>> вы читать умеете?! буквы различаете?!
>> файлы были удалены при работающем sendmail демоне?!
>> Если точно сказать не можете: ответ - не помню, не уверен что
>> остановил сервис sendmail
>> перед удалением файлов.
> я умею читать, но я не могу вас понять, я не топикстартер,

-----------------------------------------------^^^^^^^^^^^^^^^- sorry

> поэтому на ваш вопрос ответить не могу.

что тут отвечать, если sendmail работал и держал открытыми кучу файлов, то
после rm дескрипторы так и остались открытыми.

разумеется что по ls мы увидим пустоту, а du и df скажут что место как было
занято, так и осталось занятым, хотя директория "вроде как пуста".

Что тут непонятного, lsof в руки и он все покажет.

> Вы внимательно читали тред?

старался.


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 11:54 
ну так ls не показывает пустоту

# cd /var/spool/clienmqueue
# find ./ -type f -delete
# ls
# ls -lah
total 20M
drwxrwx---  2 smmsp smmsp  20M Jul 12 01:20 .


он показывает что файл-директория занимает 20М, а не содержимое директории 20М,
в ext2/3 файл-директория не дефрагментируется после удаления файлов, удаленные, но открытые файлы здесь не причем...


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено lavr , 12-Июл-12 12:02 
> ну так ls не показывает пустоту
> # cd /var/spool/clienmqueue
> # find ./ -type f -delete
> # ls
> # ls -lah
> total 20M
> drwxrwx---  2 smmsp smmsp  20M Jul 12 01:20 .
> он показывает что файл-директория занимает 20М, а не содержимое директории 20М,
> в ext2/3 файл-директория не дефрагментируется после удаления файлов, удаленные, но открытые
> файлы здесь не причем...

именно что причем, попробуйте посмотреть сколько в ext2/3 уйдет на описание
директории, наверняка ~4K

Не вдаваясь в знание ext2/3, просто mkdir name && ls -lah name
потом можно создать кучу файлов удалить и снова посмотреть.


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 12:13 
stat /.../                                                                                                                                                                                                              
  File: «/.../»
  Size: 189853696       Blocks: 371184     IO Block: 4096   каталог
Device: fe00h/65024d    Inode: 2           Links: 5
Access: (0777/drwxrwxrwx)  Uid: ( 1000/    user)   Gid: (  100/   users)
Access: 2012-04-02 10:16:10.000000000 +0400
Modify: 2012-07-12 12:11:02.000000000 +0400
Change: 2012-07-12 12:11:02.000000000 +0400

189 мегов на описание директории, 2,8M файлов, если я их удалю столько и останется


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено fa , 12-Июл-12 12:15 
> вы удаляли файлы при работающем sendmail'е?!
> lsof покажет вам кто держит файлы...
> # service sendmail stop
> # sync; sync
> Возможно, решат проблем без перезагрузки.

sendmail остановлен (на момент удаления тоже был остановлен). Собственно, почтовика на сервере нет. Просто cron пытался слать отчеты root-у и от этого в clientmqueue скопилось много файлов. В выводе lsof нет ничего с директорией clienmqueue. sync тоже не помогает.

Вот еще что заметил. Если скопировать директорию в другую, та другая будет уже пустой.
# cp -a clientmqueue clientmqueue2
# ls -lah clientmqueue*
clientmqueue:
total 20M
...
clientmqueue2:
total 16K
...


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 12:20 
чудеса да и только :)

"Директория пуста, но ls и du рапортуют, что нет"
Отправлено fa , 12-Июл-12 12:54 
> чудеса да и только :)

Спасибо, что отвечаете. Поправьте, если не прав.
Насколько я понял, эти 20M, которые показывает ls и du - место, которое директория зарезервировала для себя самой, чтобы хранить информацию о файлах, которые в ней находятся. Т.е. если файлов было много, то и места для хранения "указателя" на каждый файл тоже нужно было много.

Собственно, не хватает ответа на вопрос, "что делать?". Насколько я понял из Ваших ответов, директория не собирается возвращать эти 20М (ФС - ext3).


"Директория пуста, но ls и du рапортуют, что нет"
Отправлено djaarf , 12-Июл-12 13:29 
>> чудеса да и только :)
> Спасибо, что отвечаете. Поправьте, если не прав.
> Насколько я понял, эти 20M, которые показывает ls и du - место,
> которое директория зарезервировала для себя самой, чтобы хранить информацию о файлах,
> которые в ней находятся. Т.е. если файлов было много, то и
> места для хранения "указателя" на каждый файл тоже нужно было много.
> Собственно, не хватает ответа на вопрос, "что делать?". Насколько я понял из
> Ваших ответов, директория не собирается возвращать эти 20М (ФС - ext3).

если 20М критично, то удалите и создайте директорию руками, естественно не забыв про permissions и owner:group

размер вырастет снова, когда в ней будет много файлов одновременно

если не удалять, то при создании новых файлов будет затираться старая информация, т.е. размер именно директории увеличится только когда накопится более 20М имен/инодов,

можно привести аналогию mysql:ibdata при innodb_file_per_table = 0, дефррагментация не возможна, по крайней мере в версиях до 5.1