mysqld no se inicia porque el espacio en disco está lleno:
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
correr 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 *
en /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
En /dev/sda5
, hay archivos del sitio web en /var/www
.
Como es la primera vez, no tengo idea de qué archivos eliminar aparte de moverlos /var/www
a otra partición.
Y uno más, ¿cuál es la forma correcta de eliminar archivos de registro, historial, etc. /dev/sda5
?
Respuesta1
Rápido y sucio: mueve tu /var/www
a /home/www
y luego crea un enlace simbólico:
rsync -a /var/www /home &&
rm -r /var/www &&
ln -s /home/www /var/www
A más largo plazo: tal vez coloque sus directorios /var/www
y /var/log
en sus propias particiones dedicadas. Probablemente podrías reducir /home
y utilizar el espacio liberado para crear particiones adecuadas.
Respuesta2
- me gustaría
mv /var/log/*gz /var/log/*.0 /home/backup/var/log
yum clean packages
o apt-get clean para eliminar cosas de /var/cache- Sí, mueva /var/www a, por ejemplo, /home
- tal vez elimine la partición /var.
Respuesta3
¿A qué se debe el desglose /var/lib
? Si es como mi sistema, ¿la mayor parte (digamos 500 MB) está ocupada por /var/lib/mysql
?
Todos los demás números parecen bastante normales y razonables, por lo que son conmovedores /var/lib/mysql
y /var/www
son las únicas soluciones realistas a largo plazo.
Para eliminar archivos de registro antiguos, ¿se están rotando sus registros? Por ejemplo, ¿tiene /var/log/messages
, /var/log/messages.1
, /var/log/messages.2.gz
, etc, o tal vez /var/log/messages-20101221
, /var/log/messages-20101220.gz
, etc?
La forma obvia de eliminarlos es por edad, por ejemplo
# find /var/log -type f -mtime +14 -print
# find /var/log -type f -mtime +14 -exec rm '{}' \;
Además, verifique que la configuración de logrotate /etc/logrotate.conf
sea la que desea. Yo diría que no deberías cambiarlos, ya que no son tu principal problema, pero tal vez solo quieras mantener los registros de una semana, en cuyo caso intenta algo como esto:
daily
rotate 7
create
compress
include /etc/logrotate.d
Luego hay archivos para cada servicio, por ejemplo, syslog, mysql, apache, etc. para configurar la rotación de registros para cada uno de ellos. En los sistemas Debian y Red Hat, esto ya debería estar configurado.
Si aún no tienes logrotate, entonces es un poco más difícil. Consideraría usar grep o tail para guardar las entradas recientes, luego eliminar el archivo y reiniciar syslogd (por ejemplo, service syslogd restart
o pkill -HUP syslogd
.
Finalmente, un guión que escribí precisamente para esta situación es 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