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 )
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
journal
viatune2fs
o 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.
SYNC
Montajes honesosCuando la seguridad es primordial, montar un sistema de archivos con la
sync
opció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.
fuente
sync
despué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 llamadassync
eliminará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 lassync
devoluciones durante la cual los datos aún no se pueden escribir en el disco.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), ydata=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 queordered
es el predeterminado en la mayoría de distribuciones de Linux en estos días ...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.
fuente
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.
fuente