¿Cómo puedo mover / var / log directorio

15

En nuestro servidor de producción hay una unidad pequeña para el punto de montaje raíz /, /var/logestá ocupando demasiado espacio y tengo que eliminar manualmente algunos archivos. ¿Cómo puedo pasar /var/log/a digamos /home/logSIN REINICIAR?

Aquí está lo que pensé:

$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart

Pero sé que algunos servicios usan descriptores de archivo, por lo que continuarán usando /var/loginodos o inodos.

Razique
fuente
Hay una respuesta detallada a esencialmente la misma pregunta en AskUbuntu en askubuntu.com/a/346579/422224
Eborbob
Esta no es una respuesta sino una sugerencia. si es posible, use para registros un sistema de archivos con compresión en tiempo real, como btrfs. Cuando monte esta partición, use la opción de montaje "compress = lzo" o "compress = zlib". lzo ofrece un mejor rendimiento, zlib una mejor compresión.
Massimo

Respuestas:

25

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.

Su enfoque

Lo que ha propuesto podría funcionar si señala a los demonios con SIGHUP (kill -1 pid). Obviamente, necesitaría más adelante "montar -o enlazar / / en algún lugar" y limpiar lo que quedó debajo de montado / var / log. Pero tiene un mal olor para mí, especialmente para la producción.

Evite el tiempo de inactividad, tenga un resultado limpio (pero complicado de hacer)

Olvídate de la idea "mount -o bind", crea una nueva partición / LV, pero no la montes todavía.

lsof | grep /var/log             # lists open files in /var/log

Para cada demonio que tenga algún archivo abierto (esperaría al menos syslog, inetd, sshd):

  • reconfigurar 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 que el demonio ha cerrado sus archivos

Montar sobre / var / log. Restaurar configuraciones antiguas, SIGHUP / recargar demonios nuevamente.

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 llevar el servidor al modo de mantenimiento (modo de usuario único) y usar la consola real (no ssh) para la operación.

kubanczyk
fuente
8

Las respuestas de todos los demás son excelentes y correctas, y definitivamente debes leerlas primero.

Solo pensé en compartir esto porque facilita copiar y pegar, si su caso resulta ser bastante simple como el mío fue:

Detenga el registro del sistema y copie los registros actuales:

service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog

luego, monte su nueva ubicación /var/log. Digamos que es un nuevo dispositivo llamado/dev/sdb

mount /dev/sdb /var/log

ahora puede volver a copiar 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, rsysloges probable que sea el único demonio en ejecución. YMMV!

PD: probablemente querrás agregarlo a tu fstabtambién. Aquí hay una forma de hacerlo, asumiendo nuevamente un montaje muy sencillo:

cat /etc/mtab |grep /var/log >>/etc/fstab

(cf /server//a/267610/80606 sobre la captura de mtab a fstab)

hwjp
fuente
55
Buena solución La única cosa que cambiaría es la sustitución de su cp -rcon sudo tar cpfy sudo tar xpfpara preservar la propiedad de los archivos y permisos en la remota posibilidad de que hay registros creados por un usuario distinto de root.
Brenda Bell
2

Otra cosa que puedes hacer es:

  • Detenga los procesos que tienen archivos abiertos en /var/log
  • Verifique que no haya ningún proceso con archivos abiertos /var/log(utilizando lsofcomo se sugiere kubanskamac)
  • Mueva su /var/loga otra partición con suficiente espacio libre (siguiendo su ejemplo, eso sería /home/log)
  • Cree un enlace simbólico desde / var / log a / home / log ( ln -s /home/log /var/log)
  • Reinicie los procesos que detuvo en el primer paso.

Tenga en cuenta que esto está lejos de lo que consideraría 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 una nueva /varo /var/logpartición con suficiente espacio (o expandir la actual),

mfriedman
fuente
¿Tendría algún efecto hacer la idea del enlace si se ejecuta el logrotate? No sabía si sobreescribiría o arruinaría las ubicaciones de los archivos si aún no eran enlaces ... eso podría significar más dolores de cabeza de mantenimiento más adelante.
Bart Silverstrim
Sí, finalmente parece que hacer esta operación mientras el servidor se está ejecutando no es tan bueno. No podré ver qué proceso todavía usa el antiguo / var / log / Además, creo que algunas aplicaciones no manejan fácilmente el enlace simbólico, por lo que eventualmente podría arruinar el registro. Tal vez debería programar un modo de mantenimiento. En realidad, estoy borrando manualmente los archivos cuando el espacio izquierdo se acorta. mriedman: Comprobaré si puedo cambiar el tamaño de esa partición
Razique
0

Otra solución basada en @hwjp, si no puede usar otro volumen de unidad para moverlos, puede crear un volumen de unidad virtual en otro volumen que tenga más espacio disponible (ese es mi caso):

Crear volumen virtual:

A) hacer: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: archivo de entrada para proporcionar una secuencia de caracteres para inicializar el almacenamiento de datos
  • of = VHD.img: archivo de imagen que se creará como volumen de almacenamiento en / thevolumeofyourchoice
  • bs = 1M: lee y escribe hasta 1M a la vez
  • cuenta = 1200: copia solo bloques de entrada de 1200 M (1 GB)

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgformatee el tipo de sistema de archivos EXT4 en el archivo de imagen de registro VHD con la utilidad mkfs.

C) hacer: sudo mkdir /thevolumeofyourchoice/vlogmontar el registro VHD en un directorio (punto de montaje)

D) hacer: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Para montar el registro VHD al inicio del sistema en el directorio final, agregue esta entrada en el archivo / etc / fstab.

/thevolumeofyourchoice/VHD-log.img  /var/log/  ext4    defaults        0  0

Mover archivos de registro antiguos:

E) hacer:

  • service rsyslog stop
  • lsof | grep /var/log para enumerar los archivos abiertos en / var / log y apagar el demonio necesario (apach2, freshclam en mi caso)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p igual que --preserve = modo, propiedad, marcas de tiempo)

F) hacer:

  • sudo umount /thevolumeofyourchoice/vlog
  • sudo mv /var/log /var/log-old
  • sudo mkdir /var/log
  • sudo chgrp syslog /var/log
  • sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /var/log

G) hacer: service rsyslog starty reiniciar otros servicios que detuvo

Finalmente doble chequeo:

Puede hacer una lsof | grep /var/loglista de archivos abiertos en / var / log y verificar que apuntan a / var / log y no a / var / log-old

Puede mv, hacer una copia de seguridad o eliminar / var / log-old después de que todo esté bien.

Mike Castro Demaria
fuente
-1

Yo solo:

apt install lsyncd
mv /var/log /varlog.root
mkdir /var/log /home/log
mount --bind /home/log /var/log

# set up lsyncd appropriately to sync real-time between /varlog.root & /var/log
service lsyncd start
sleep 3m

service rsyslog restart
# Proceed with all the other daemons
# to switch them over to the new /var/log and release /varlog.root
sleep 3m

# Then do this a few times until no processes use the old dir
lsof +D /varlog.root && rm -rf /varlog.root
Alexander Shcheblikin
fuente
¿Es bueno dejarlo /var/logmontado /home/logcomo está? Supongo que toda esta pregunta no es para administradores experimentados.
kubanczyk
¿Qué quieres decir? / home / log está montado sobre / var / log, no al revés. Y sí, no es un problema dejarlo como está, solo asegúrese de que se restaure en cada arranque automáticamente y con la suficiente antelación para que todos los procesos no intenten crear algunos registros nuevos en el punto de montaje vacío / var / log.
Alexander Shcheblikin
muchas veces los requisitos de seguridad necesitan / var / log y / var / log / audit en puntos de montaje separados reales. De lo contrario, déjelos y configure la rotación de registro adecuada para evitar el uso innecesario del disco.
Brad