¿Qué opción de montaje usar para el sistema de archivos ext3 para minimizar la pérdida o corrupción de datos?

15

Tengo una configuración incrustada usando un initramfs para el sistema de archivos raíz pero usando una partición ext3 personalizada montada en un disco compacto flash IDE. Debido a que la integridad de los datos ante la pérdida de energía es el factor más importante en toda la configuración, he utilizado las siguientes opciones para montar (a continuación se muestra la entrada de mi /etc/fstabarchivo

<file system> <mount pt> <type> <options>                         <dump><pass>
/dev/sda2     /data      ext3   auto,exec,relatime,sync,barrier=1 0     2

Descubrí estas opciones leyendo en internet. Lo que me preocupa es que el contenido de /proc/mountsdar lo siguiente:

/dev/sda2 /data ext3 rw,sync,relatime,errors=continue,user_xattr,acl,
barrier=1,data=writeback 0 0

Por lo que entiendo al leer, es que quiero usar la data=journalopción para mi montaje, ya que ofrece la mejor protección contra la corrupción de datos. Sin embargo, desde la página de manual para opciones específicas de ext3 mount, dice lo siguiente sobre la opción de reescritura:

El orden de los datos no se conserva: los datos pueden escribirse en el sistema de archivos principal después de que sus metadatos se hayan confirmado en el diario.
Se rumorea que es la opción de mayor rendimiento. Garantiza la integridad interna del sistema de archivos , sin embargo, puede permitir que aparezcan datos antiguos en los archivos después de un bloqueo y recuperación del diario.

Estoy muy confundido acerca de esto: la página del manual parece sugerir que, para la integridad del sistema de archivos, quiero especificar la data=writebackopción, mountpero la mayoría de las otras referencias que he encontrado (incluidos algunos libros publicados en Linux incrustado) sugieren que debería estar usando data=journal. ¿Cuál sería el mejor enfoque para mí? La velocidad de escritura no es un problema en absoluto; sin embargo, la integridad de los datos sí lo es.

matemático1975
fuente
1
Proporciona alguna orientación sobre data = journal . Me inclinaría a usar eso sobre cualquier otra cosa, ya que RH solo admite ese tipo de pedidos.
slm
2
@sim en realidad dice data=ordered: p
sourcejedi

Respuestas:

7

No se deje engañar por el hecho de que solo writebackmenciona internal filesystem integrity.
Con ext3, si se utiliza journal, orderedo writeback, los metadatos del sistema de archivos es siempre articulado y que significa la integridad del sistema de archivos interno.

Los modos de datos ofrecen una forma de control sobre cómo se escriben los datos ordinarios en el sistema de archivos.
En el writebackmodo, los cambios de metadatos se registran primero en el diario y se escribe un bloque de confirmación. Una vez que se ha actualizado el diario, pueden continuar los metadatos y las escrituras de datos. data=writeback puede ser un riesgo de seguridad grave: si el sistema se bloquea al agregar un archivo, después de que se hayan confirmado los metadatos (y se hayan asignado bloques de datos adicionales), pero antes de que los datos se hayan escrito (los bloques de datos se sobrescriban con nuevos datos), luego después del diario recuperar ese archivo puede contener bloques llenos de datos de archivos eliminados previamente, de cualquier usuario 1 .

Entonces, si la integridad de los datos es su principal preocupación y la velocidad no es importante, data=journales el camino a seguir.

don_crissti
fuente
4

Como ya ha notado, el punto principal es que no puede evitar que su sistema de archivos se bloquee.

Lo que puedes hacer:

  1. En el lado del software, puede usar fdatawrites después de cada operación importante (vea esta publicación de 2003 de Theodore T'so, un desarrollador principal de Linux FS Kernel. Todavía es cierto. También hay una sobre una pérdida de datos importante oculta en versiones anteriores de ext4)
  2. Reduzca el intervalo de confirmación a 1 segundo ( commit = 1 ) (vea este artículo de LWN, se trata de ext4 pero contiene información realmente útil sobre ext3). NB: No debería ser necesario, con sincronización .
  3. Como dijo RHEL doc señalado por sim, use * data_err = abort * y data = ordenado
  4. noatime reducirá las operaciones inútiles en el sistema de archivos
  5. Como ya ha notado, barrera = 1 es una buena manera de minimizar la pérdida de datos (vea esta publicación )
  6. Y la sincronización también es, por supuesto, una de las opciones de "No quiero perder mis datos".

Al final, las opciones de montaje paranoico pueden verse así:

auto,exec,relatime,sync,barrier=1,commit=1,data=ordered,data_err=abort,noatime,

Y también puede garantizar la integridad de los datos con un fsck automático en cada arranque.

Coren
fuente
2

Intente cambiar la parte de la página de manual que identifica:

respóndeme

El orden de los datos no se conserva : los datos pueden escribirse en el sistema de archivos principal después de que sus metadatos se hayan confirmado en el diario. Se rumorea que es la opción de mayor rendimiento. Garantiza la integridad interna del sistema de archivos, sin embargo, puede permitir que los datos antiguos aparezcan en archivos después de un bloqueo y recuperación de diario.

Como don_crissti señaló, los otros modos no tienen el "sin embargo".

depquid
fuente