¿La mejor manera de evitar que el sistema raíz se llene cuando falla un montaje?

16

Tenemos un servidor web interno (virtualizado, que aloja ReviewBoard, pero no es súper relevante) y tenemos un modo de falla relativamente consistente con monturas NFS fallidas que causan / se llenan. La distribución es Ubuntu (no pregunte) si una solución depende de una distribución diferente, será más lenta de implementar.

Las copias de seguridad se realizan en / mnt / backup /, que se supone que se monta en NFS en otro sistema. Desafortunadamente, cuando el montaje falla o se cae, las copias de seguridad se realizan en el sistema de archivos raíz, lo que, como puede imaginar, no tarda mucho antes / está lleno, y luego los servicios comienzan a fallar.

Se han discutido varias soluciones posibles.

  1. Monitoree / mnt / backups y asegúrese de que no sea root. Quizás un trabajo cron.

  2. Utilice / mnt / protected / backups y monte / protegido primero en un sistema de archivos pequeño, tal vez un montaje en bucle en un archivo local, por lo que es mucho menos probable que falle.

  3. Chmod a-rwx / mnt / backups (el punto de montaje del sistema de archivos raíz). No estoy seguro de si el montaje sobre un director protegido funcionará, creo que sí.

  4. En el árbol montado, cree un directorio llamado "Copias de seguridad", luego enlace suave "ln - s / mnt / backup / Backups / Backups". El uso de / Backups para las copias de seguridad fallará a menos que se monte / mnt / backup, ya que el árbol local no contiene el subdirectorio.

  5. Realizar una comprobación de que el directorio está montado correctamente en el script de copia de seguridad.

Estoy interesado en cualquier comentario sobre estos enfoques, contras o cualquier técnica adicional que las personas usen como una forma estándar de proteger el sistema de archivos raíz de este tipo de maldad.

Peter
fuente

Respuestas:

13

Número 5: ponga una prueba en su script de copia de seguridad para asegurarse de que el directorio esté montado antes de continuar. El script debería fallar si el montaje no está disponible o no está presente. O simplemente puede asegurarse de que las cosas estén montadas antes de ejecutar la copia de seguridad.

Pruebe el mountpointcomando, que verifica si un directorio especificado es un punto de montaje:

mountpoint -q /mnt/backups || mount /mnt/backups

ewwhite
fuente
Hmm, supongo que agregaría || echo "Mount / mnt / backups falló" 2> & 1 O tal vez solo exista allí. ¡¡¡Gracias de todos modos!!!
Peter
22

La solución más a prueba de errores es hacer que el punto de montaje no se pueda escribir. Esta sería tu solución # 3. Sin embargo, hay un paso adicional que debe realizar. chattr +i /mnt/backups. Esto se debe a que incluso sin permisos, la raíz aún podría escribir en el directorio. Con chattr +i(establece un indicador inmutable) ni siquiera la raíz puede escribirle. Una vez que se monta el montaje, los permisos no importan ya que los permisos serán del directorio remoto, no del local.

Patricio
fuente
1
Ese es un truco bastante bueno, nunca pensé en usar 'chattr'
warren
1
Utilizo esta técnica en todos mis puntos de montaje.
3dinfluence
1
Intenté esto con encfsun sistema de archivos fusible. Da error:fusermount: user has no write access to mountpoint
ctrl-alt-delor
Esta es la solución que normalmente uso, y creo que debería ser la respuesta aceptada.
shodanshok
3

Lo que dijo ewwhite. Además, un poco de monitoreo adicional para la salud del sistema base no sería una mala idea.

Algo como Monit puede verificar para ver cuánto espacio queda . Si desea profundizar en el monitoreo del sistema, puede mirar a Nagios, pero Monit es liviano y hará lo básico.

Como está usando Ubuntu, Monit ya está en repositorio, por lo que puede hacer "sudo apt-get install monit", luego comenzar a mirar los archivos de configuración para indicarle que envíe alertas al lugar correcto, supervise los servicios correctos, etc. Aquí hay un tutorial rápido .

cjc
fuente
1

Aquí hay un trazador de líneas que puede ejecutar como un trabajo cron, se supone que el montaje en cuestión está en fstab:

if mountpoint -q /mnt ; then : ; else mount /mnt ; fi
dan
fuente
0

Para una solución a más largo plazo: no estoy seguro de cómo hacer esto en Ubuntu (estoy centrado en HR) o si vale la pena (si solo tiene una máquina), pero una metodología que nos ha funcionado durante MUCHOS años es crear una lógica separada volúmenes, sistemas de archivos, incluso grupos de volúmenes en máquinas de servidor. Entonces, como una práctica estándar, creamos volúmenes lógicos LVM para /, / tmp. / usr, / usr / local, / opt, / home, / var, espacio de intercambio y una partición separada para / boot. Este enfoque hace que sea más difícil para los sistemas de archivos llenar y deshabilitar el sistema. En realidad, este enfoque hará que sea casi imposible llenar el sistema / archivo. Todavía necesita ver / tmp, / var, por supuesto. Si necesitamos alojar datos, creamos un grupo de volúmenes totalmente diferente para ellos. Este enfoque también tiene otros beneficios, expandir los sistemas de archivos a voluntad, moverlos, crear nuevos, etc.

ank
fuente
Entonces, ¿su solución para evitar que el sistema de archivos se llene si falla un montaje es agregar más montajes? ¿Qué?
Patrick