mysqld не запускается, так как диск заполнен:
101221 14:06:50 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
101221 14:06:50 [ERROR] Can't start server: can't create PID file: No space left on device
бег df -h
:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 16G 3.2G 12G 23% /
/dev/sda5 4.8G 4.6G 0 100% /var
/dev/sda3 430G 855M 407G 1% /home
/dev/sda1 76M 24M 49M 33% /boot
tmpfs 956M 0 956M 0% /dev/shm
du -sh *
в /var
:
12K account
56M cache
24K db
32K empty
8.0K games
1.5G lib
8.0K local
32K lock
221M log
16K lost+found
0 mail
24K named
8.0K nis
8.0K opt
8.0K preserve
8.0K racoon
292K run
70M spool
8.0K tmp
76K webmin
2.6G www
20K yp
в /dev/sda5
, есть файлы веб-сайта в /var/www
.
так как это первый раз, я понятия не имею, какие файлы удалить, кроме как переместить /var/www
на другой раздел
И еще один: как правильно удалить файлы журналов, историю и т. д. /dev/sda5
?
решение1
Быстро и грубо: переместите свой файл /var/www
в /home/www
, затем создайте символическую ссылку:
rsync -a /var/www /home &&
rm -r /var/www &&
ln -s /home/www /var/www
В долгосрочной перспективе: Возможно, поместите ваши /var/www
и /var/log
каталоги в их собственные выделенные разделы. Вы, вероятно, могли бы уменьшить /home
и использовать освободившееся пространство для создания подходящих разделов.
решение2
- Я бы
mv /var/log/*gz /var/log/*.0 /home/backup/var/log
yum clean packages
или apt-get clean для удаления содержимого из /var/cache- Да, переместите /var/www, например, в /home
- возможно, удалите раздел /var..
решение3
Какова разбивка по /var/lib
? Если это как в моей системе, большую часть (скажем, 500 МБ) занимает /var/lib/mysql
?
Все остальные цифры выглядят вполне нормальными и разумными, поэтому они воодушевляют /var/lib/mysql
и /var/www
являются единственными реалистичными долгосрочными решениями.
Для удаления старых файлов журналов, ротируются ли ваши журналы, например, есть ли у вас /var/log/messages
, /var/log/messages.1
, /var/log/messages.2.gz
, и т. д. или, может быть /var/log/messages-20101221
, /var/log/messages-20101220.gz
, , и т. д.?
Очевидный способ удалить их — по возрасту, например
# find /var/log -type f -mtime +14 -print
# find /var/log -type f -mtime +14 -exec rm '{}' \;
Также проверьте, что настройки logrotate /etc/logrotate.conf
соответствуют вашим требованиям. Я бы сказал, что вам не следует их менять, поскольку они не являются вашей главной проблемой, но, возможно, вы хотите хранить логи только за неделю, в таком случае попробуйте что-то вроде этого:
daily
rotate 7
create
compress
include /etc/logrotate.d
Затем есть файлы для каждой службы, например syslog, mysql, apache и т. д. для настройки ротации журналов для каждой из них. В системах Debian и Red Hat это должно быть уже настроено для вас.
Если у вас еще нет logrotate, то это немного сложнее. Я бы рассмотрел использование grep или tail для сохранения последних записей, а затем удаление файла и перезапуск syslogd (например, service syslogd restart
или pkill -HUP syslogd
.
Наконец, вот сценарий, который я написал специально для этой ситуации diskuse
.
# test -d ~/bin || mkdir ~/bin
# svn cat http://svn.mikelward.com/svn/scripts/diskuse > ~/bin/diskuse
# chmod +x ~/bin/diskuse
# ~/bin/diskuse -A /var > ~/biggest-files-in-var.txt
# head ~/biggest-files-in-var.txt
# ~/bin/diskuse -T -A /var > ~/biggest-dirs-in-var.txt
# head ~/biggest-dirs-in-var.txt
# ~/bin/diskuse -a 1d /var > ~/biggest-files-in-var-that-changed-today.txt
# head ~/biggest-files-in-var-that-changed-today.txt