Solución 1:
Diseño adecuado
Supongo que no puede simplemente extender el sistema de archivos en cuestión (usando lvextend && ext2online
), porque no usa LVM o usa un tipo de sistema de archivos incorrecto.
Tu enfoque
Lo que has propuesto podría funciona si señalas a los demonios con SIGHUP (kill -1 pid). Obviamente, más adelante necesitaría "mount -o bind //somewhere" y limpiar lo que quedó debajo de /var/log montado. Pero me huele mal, sobre todo para producción.
Evite el tiempo de inactividad, tenga un resultado limpio (pero complicado de hacer)
Olvídese de la idea de "mount -o bind", cree un nuevo LV/partición, pero no lo monte todavía.
lsof | grep /var/log # lists open files in /var/log
Para cada demonio que tiene un archivo abierto (esperaría al menos syslog, inetd, sshd):
- reconfigure el daemon no para iniciar sesión en /var/log
- actualizar el demonio (
kill -1
o/etc/init.d/script reload
) - confirmar con
lsof | grep /var/log
ese demonio ha cerrado sus archivos
Montar sobre /var/log.Restaurar configuraciones antiguas, SIGHUP/recargar demonios de nuevo.
Manera fácil (tiempo de inactividad)
Cree una nueva partición/LV y móntela correctamente sobre /var o /var/log. La manera fácil es poner el servidor en modo de mantenimiento (modo de usuario único) y usar la consola real (no ssh) para la operación.
Solución 2:
Las respuestas de todos los demás son excelentes y correctas, y definitivamente deberías leerlas primero.
Solo pensé en compartir esto porque facilita copiar y pegar, si su caso resulta ser bastante simple como el mío:
Detenga el syslog y copie los registros actuales:
service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog
luego, monte su nueva ubicación sobre /var/log
. Digamos que es un nuevo dispositivo llamado /dev/sdb
mount /dev/sdb /var/log
ahora puede volver a copiar los archivos y reiniciar el syslog:
cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start
Suponiendo que todo esto suceda bastante temprano en la vida de su máquina, rsyslog
es probable que sea el único demonio en ejecución. ¡YMMV!
PD:querrás agregarlo a tu fstab
también probablemente. Aquí hay una forma de hacerlo, suponiendo nuevamente un montaje muy sencillo:
cat /etc/mtab |grep /var/log >>/etc/fstab
(cf https://serverfault.com/a/267610/80606 acerca de convertir mtab en fstab)
Solución 3:
Otra cosa que podrías hacer es:
- Detener los procesos que tienen archivos abiertos en
/var/log
- Verifique que no haya ningún proceso con archivos abiertos en
/var/log
(usandolsof
como sugirió kubanskamac) - Mueva su
/var/log
a otra partición con suficiente espacio libre (siguiendo tu ejemplo, sería/home/log
) - Cree un enlace simbólico desde /var/log a /home/log (
ln -s /home/log /var/log
) - Reinicia los procesos que detuviste en el primer paso
Tenga en cuenta que esto está lejos de lo que consideraría como una buena práctica. Es solo una solución alternativa para que no tenga que apagar el servidor. La solución correcta sería crear un nuevo /var
o /var/log
partición con suficiente espacio (o expandir la actual),