понедельник, 8 октября 2012 г.

Что делать если du и df выводят разные данные

Случалось ли вам столкнуться с ситуацией когда вы освободили место на диске, удалили жирные логи, а система по прежнему считает, что у вас переполнен диск.
Если вы столкнулись с подобной ситуацией, то скорее всего удалённые вами файлы до сих пор открыты каким бы то ни было приложением.

Это выглядит примерно следующим образом.
df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             7,9G  7,6G     0 100% /
 tmpfs                 502M     0  502M   0% /lib/init/rw
 udev                  497M  100K  497M   1% /dev
 tmpfs                 502M     0  502M   0% /dev/shm

du -sh /
 2,2G    /
Чтобы получить список процессов которые до сих пор держат удалённые файлы, выполните следующую команду

lsof -n -P | grep deleted | awk '{ print $1}' | sort | uniq
 java
 mysqld
 nginx
 uwsgi
Теперь их стоит погасить
killall java -9
/etc/init.d/mysql stop
/etc/init.d/nginx stop
/etc/init.d/uwsgi stop
После чего выполните команду sync чтобы записать все изменения из буфера памяти на диск
sync
И можете проверить что пространство на диске действительно высвободилось
df -h
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/sda1             7.9G  2.1G  5.5G  28% /
 tmpfs                 502M     0  502M   0% /lib/init/rw
 udev                  497M  100K  497M   1% /dev
 tmpfs                 502M     0  502M   0% /dev/shm
Теперь можете запустить свои сервисы.
Enhanced by Zemanta