La mejor resistencia contra la corrupción en una sola tarjeta SD la ofrecería BTRFS en RAID1 modo con fregado automático cada período de tiempo predefinido.
Los beneficios:
- retención de la capacidad de RW en el sistema de archivos
- sistema de archivos moderno y completo con opciones muy útiles para un RPi, como compresión transparente e instantáneas
- diseñado teniendo en cuenta la memoria flash (entre otras cosas)
Aquí se explica cómo hacerlo:
Ejecuto mi RaspberryPi en ArchARM Linux y mi tarjeta está en el lector SD, así que modifique esas instrucciones en consecuencia para otras distribuciones e interfaces /dev.
Aquí hay un diseño de partición de ejemplo:
/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap
Para obtener btrfs en RAID1, crea el sistema de archivos de la siguiente manera:
mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3
Entonces tu rsync -aAXv
a su sistema previamente respaldado.
Para que arranque desde BTRFS en raid1, debe modificar initramfs . Por lo tanto, debe hacer lo siguiente mientras aún tiene su sistema ejecutándose en su antiguo sistema de archivos.
Raspberry normalmente no usa mkinitcpio, por lo que debe instalarlo. Luego, debe agregar "btrfs" a la matriz de MÓDULOS en mkinitcpio.conf y recrear initramfs con
mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION
Para saber qué escribir en lugar de YOUR_KERNEL_VERSION, ejecute
ls /lib/modules
Si actualiza el kernel, DEBE volver a crear initramfs ANTES de reiniciar.
Luego, debe modificar los archivos de arranque de RPi.
En cmdline.txt, debe tener
root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs
y en config.txt, debe agregar
initramfs initrd 0x01f00000
Una vez que haya hecho todo eso y haya iniciado con éxito su sistema btrfs RAID1, lo único que queda es configurar la limpieza periódica (cada 3-7 días) ya sea con systemd timer (preferido) o cron (dcron) así:
btrfs scrub start /
Se ejecutará en su sistema de archivos comparando las sumas de verificación de todos los archivos y corrigiéndolos (reemplazándolos con la copia correcta) si encuentra algún daño.
La combinación de BTRFS RAID1, medio único y Raspberry Pi hace que este material sea bastante arcano. Tomó algo de tiempo y trabajo juntar todas las piezas, pero aquí está.
Iría por otro camino y simplemente usaría un sistema de archivos de solo lectura. Nunca obtengo mi raspberry pi lo suficientemente estable cuando uso un sistema de archivos raíz de lectura y escritura en la tarjeta SD. Puede iniciar su raíz a través de kernel cmdline (ro) o usar un initramfs con piggyback que incluye su sistema completo.
Ambos son posibles de crear con mi sistema de compilación casero OpenADK.(http://www.openadk.org)
Bueno, el almacenamiento flash es más deseable que el almacenamiento magnético, por varias razones, pero para esta aplicación diré principalmente porque no hay partes móviles. Dicho esto, no creo que exista un sistema de archivos 'a prueba de corrupción', pero existen algunos sistemas de archivos robustos (ext4 es uno), así como algunas tácticas para ayudar a mitigar la corrupción.
Disco RAM
Si la imagen del RPi no tiene para cambiar, y parece que no lo hace, si nada intentará (o debería intentar) escribir en el disco, intente usar un sistema de archivos raíz creado para descomprimirse en la RAM. La idea aquí es que tiene un sistema de archivos raíz comprimido en el arranque que se descomprime en la RAM. Todos los cambios ocurren en el disco RAM, por lo que efectivamente no se escribe nada en la tarjeta SD, solo se lee en el arranque. esto debería reducir las lecturas/escrituras en su disco, preservando su vida útil. Esto es similar a lo que se hace cuando arranca Linux desde un CD, y es una de las primeras cosas que suceden cuando arranca Linux.