Configuración ext4 "segura" para sistemas que se ejecutan sin supervisión

18

Tengo un sistema que ejecuta Linux que debe ejecutarse sin supervisión durante largos períodos de tiempo. El sistema utiliza una tarjeta CF industrial para el almacenamiento. La mayoría de las veces no hay escrituras en flash, aunque de vez en cuando se pueden modificar algunos datos / configuraciones. El sistema debe ser resistente a fallas de energía.

Me gustaría usar ext4 para esto. ¿Cuál es la mejor manera de configurar ext4 para este tipo de configuración? Teniendo en cuenta que:

  • El rendimiento no es un problema en absoluto (especialmente el rendimiento de escritura)
  • Ante la pérdida de energía, el sistema siempre debe iniciarse en estado limpio, incluso si eso significa que se pierden los datos escritos en los últimos segundos
  • Si es posible evitar fsck, entonces mucho mejor.

(Soy consciente de esta pregunta relacionada: evitar la corrupción de datos en la unidad ext4 / Linux en caso de pérdida de energía )

Grodriguez
fuente

Respuestas:

11

He trabajado en la construcción de un sistema para la automatización en barcos, y había un requisito previo: en cada momento la potencia podría disminuir y todo debería volver a funcionar correctamente.

Mi solución fue construir un sistema initramfs basado en Gentoo, con solo una carpeta rw para aplicaciones y configuraciones (este es el enfoque utilizado por todos los proveedores de enrutadores / firewall). Esta solución agrega una capa adicional de complejidad cuando se trata de actualizaciones del sistema, pero le asegura que el sistema SIEMPRE arrancará.

Con respecto a su pregunta específica, debe mantener el diario EXT4 habilitado para tener fsck más rápido (de unos pocos segundos), usar la opción de montaje data = journal , reducir la opción de confirmación o usar la opción de sincronización para mantener los buffers siempre vacíos.

Refs: http://www.kernel.org/doc/Documentation/filesystems/ext4.txt

Giovanni Toraldo
fuente
¡Bueno! Si la aplicación no escribe demasiados datos, debería estar contento con la opción de sincronización.
Giovanni Toraldo
1
El mejor lugar para mirar es la documentación del kernel de Linux: kernel.org/doc/Documentation/filesystems/ext4.txt Habilite data = journal y commit = nrsec para minimizar cualquier pérdida potencial de datos (* == predeterminado)
Giovanni Toraldo
Las confirmaciones cronometradas son definitivamente útiles: creo que solo puede reducirse a intervalos de 1 segundo (aunque con una penalización de rendimiento MAYOR para operaciones intensivas de escritura), pero si no puede permitirse 1 segundo de pérdida de datos, tiene mayores problemas;)
voretaq7
2
Uno de los principales efectos positivos del registro en diario es que recuperarse de un bloqueo es una cuestión de reproducir los últimos cambios no confirmados, que es realmente más rápido que comprobar el volumen completo en busca de inconsistencias. Si este es su principal problema, entonces debería usar el EXT4 predeterminado y ser feliz.
Giovanni Toraldo
1
Los datos "perdidos" de @Grodriguez pueden ser desde "El archivo ya no está allí" hasta "¿Por qué hay una parte del núcleo dentro de mi base de datos?" - Todo depende de lo que se "pierde" :)
voretaq7
12

Prefiero esto diciendo que, en lo que a mí respecta, EXT (en todas sus encarnaciones) es un sistema de archivos bastante horrible: he visto casos más " interesantes " de corrupción del sistema de archivos en el número relativamente pequeño de Linux / EXT {2,3,4} sistemas que he administrado que tengo en la cantidad relativamente grande de sistemas de archivos Not-EXT que he tenido ocasión de usar.
Si es posible, intente elegir un sistema de archivos más robusto. Te lo agradecerás cuando ocurra lo inevitable.


Dicho esto y todos mis prejuicios personales a la vista y descartados, EXT4 tiene tres características que puedo pensar que podrían ayudarte:

  • El
    registro en diario EXT4 puede ser un sistema de archivos en diario, si así lo desea. Habilite la función de registro en diario (y configure específicamente el modo de registro de datos en journalvia tune2fso como opción de montaje).
    Esto incurre en un impacto en el rendimiento ya que todos los datos deben escribirse en el diario EXT antes de que se "confirmen" al sistema de archivos (cada escritura básicamente ocurre dos veces), pero garantiza que siempre pueda recuperarse hasta que la reproducción del diario lo lleve sin problemas.

  • SYNCMontajes honesos
    Cuando la seguridad es primordial, montar un sistema de archivos con la syncopción siempre es una buena idea. Esto obliga a todas las escrituras al disco de inmediato; nuevamente, esto es un golpe de rendimiento, pero es una buena idea si espera fallas de alimentación o extraños al azar que extraen la tarjeta CF.

  • Limite los sistemas de archivos que se pueden escribir tanto como sea posible Este no es específico de EXT, pero la filosofía de Linux demasiado común de "simplemente crear una gran partición raíz y volcar todo en ella" es, francamente, estúpida . Crear una estructura de sistema de archivos adecuado ( /, /var, /usr, /home, etc ...), y montar ya que muchos de los sistemas de ficheros de sólo lectura como sea posible.
    Esto solía ser un consejo común para los sistemas Unix en aras de la seguridad, pero en su caso tiene un beneficio adicional: no puede dañar un sistema de archivos si no puede escribir en él.

voretaq7
fuente
La funcionalidad de los montajes totalmente síncronos no es equivalente a simplemente llamar syncdespués de cada escritura: los montajes síncronos no regresarán (o al menos no deberían) de una llamada de escritura del sistema de archivos hasta que los datos estén en el disco. Las llamadas synceliminarán todas las escrituras pendientes, pero todavía hay una ventana (aunque sea corta) entre el momento en que regresa la escritura y su llamada a las syncdevoluciones durante la cual los datos aún no se pueden escribir en el disco.
voretaq7
¿Qué sistema de archivos me recomiendan? ¿Puedes cuantificar tus experiencias?
Mark Wagner
@embobo, mis experiencias son completamente anecdóticas: nunca he probado el estrés de la familia de sistemas de archivos EXT, pero un incidente que se me viene a la mente es cuando tuve un servidor Squid que sufrió "¡¿Dónde se fueron todos mis inodes?!?" - el sistema de archivos se pisoteó, y de alguna manera posteriormente se marcó limpio, pero cada inodo de alguna manera se dejó en un estado reclamado pero nunca referenciado. El truco para arreglar ese desastre en particular fue positivamente EPIC (terminamos haciendo un nuevo FS). Ese fue el día que perdí toda confianza en la familia EXT de sistemas de archivos.
voretaq7
@Grodriguez Re: Registro en diario, las tres opciones son data=journal(lo que describí anteriormente), data=ordered(los metadatos se registran. Los datos se envían al disco antes de que los metadatos se envíen al sistema de archivos), y data=writeback(lo que efectivamente no es registro / protección de datos - Cosas malas puede ocurrir después de un bloqueo, como basura en el medio de los archivos). Creo que orderedes el predeterminado en la mayoría de distribuciones de Linux en estos días ...
voretaq7
2
Además de "Limitar los sistemas de archivos de escritura tanto como sea posible": en debian wiki es una guía para hacer exactamente esto con muchos ejemplos de demonios que necesitan un tratamiento especial. También debería ser válido para la mayoría de los otros distritos: wiki.debian.org/ReadonlyRoot
krissi
7

EXT4 no suena como la mejor opción para su sistema; Sugeriría mirar un sistema de archivos con estructura de registro. Estos funcionan tratando los datos como un flujo constante de actualizaciones de escritura contra un flujo virtual, con un puntero que señala el último 'encabezado'. Las actualizaciones se producen escribiendo datos y metadatos en el almacenamiento y luego actualizando el puntero. En el caso de un bloqueo después de la escritura pero antes de la actualización del puntero, se pierden los datos más recientes pero el sistema de archivos es consistente.

Dos sistemas de archivos candidatos son LogFS y NILFS . Ambos están disponibles en el núcleo principal de Linux.

Steve Smith
fuente
1

Me intriga el dispositivo que está construyendo. Usted busca la confiabilidad de un dispositivo integrado mientras usa un sistema de archivos que no es realmente adecuado.

Ext4 (y familia) es un excelente sistema de archivos de uso general con (supongo) muchos miles de millones de horas de uso en hardware y casos de uso variados. Sin embargo, lo que pides realmente no encaja con ext4. Los punteros de voretaq7 y Giovanni lo ayudarán a aprovechar al máximo ext4 si es necesario, pero la respuesta real es utilizar algo más adecuado a sus necesidades. Steve te ha dado un par de opciones. Si sigue sacando potencia de un ext4 FS, eventualmente obtendrá un desastre.

Si este es un sistema único que está creando, debe elegir usar algo más adecuado o aceptar que habrá problemas en algún momento. Podría ser solo 1 corte de energía de cada 100 o 1 de cada 1000. Eso podría ser lo suficientemente bueno como para correr el riesgo y el dispositivo probablemente podría funcionar durante mucho tiempo (años) sin ninguna intervención manual.

Si este es un producto que tiene la intención de desplegar / comercializar ampliamente, tiene la opción de usar algo más adecuado. O bien, toma la decisión comercial de admitir un porcentaje de los dispositivos que se fabricarán todos los años y que necesitarán reemplazo o intervención manual para recuperarlos.

cosa muy pegajosa
fuente