Según tengo entendido, los discos duros y los SSD implementan una corrección básica de errores dentro del disco, y la mayoría de las configuraciones RAID, por ejemplo, mdadm, dependerán de esto para decidir cuándo un disco no pudo corregir un error y debe desconectarse. Sin embargo, esto depende de que el almacenamiento sea 100% preciso en su diagnóstico de errores. Eso no es así, y una configuración común como un espejo RAID-1 de dos unidades será vulnerable: suponga que algunos bits de una unidad están corruptos y la unidad no informa un error de lectura. Por lo tanto, los sistemas de archivos como btrfs y ZFS implementan sus propias sumas de verificación, para no confiar en los firmwares de unidades defectuosas, cables SATA con fallas, etc.
Del mismo modo, la RAM también puede tener problemas de confiabilidad y, por lo tanto, tenemos RAM ECC para resolver este problema.
Mi pregunta es esta : ¿cuál es la forma canónica de proteger el archivo de intercambio de Linux de la corrupción silenciosa / podredumbre de bits no detectada por el firmware de la unidad en una configuración de dos discos (es decir, utilizando controladores de núcleo de línea principal)? Me parece que una configuración que carece de protección de extremo a extremo aquí (como la proporcionada por btrfs) de alguna manera niega la tranquilidad que aporta la RAM ECC. Sin embargo, no puedo pensar en una buena manera:
- btrfs no admite archivos de intercambio en absoluto. Puede configurar un dispositivo de bucle desde un archivo btrfs y hacer un intercambio sobre eso. Pero eso tiene problemas:
- Las escrituras aleatorias no funcionan bien: https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
- La sugerencia allí para deshabilitar la copia en escritura también deshabilitará la suma de comprobación, lo que anulará el objetivo de este ejercicio. Suponen que el archivo de datos tiene sus propias protecciones internas.
- ZFS en Linux permite usar un ZVOL como intercambio, lo que supongo que podría funcionar: http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap ; sin embargo, según mi lectura, ZFS normalmente requiere memoria y hacer que funcione en un intercambio -solo la aplicación suena como algo de trabajo para resolverlo. Creo que esta no es mi primera opción. ¿Por qué tendrías que usar un módulo de kernel fuera del árbol solo para tener un intercambio confiable que me supera? Seguramente hay una manera de lograr esto con la mayoría de las distribuciones / kernels de Linux modernas en la actualidad.
- En realidad, había un subproceso en una lista de correo del kernel de Linux con parches para habilitar las sumas de verificación dentro del administrador de memoria, exactamente por las razones que discuto en esta pregunta: http://thread.gmane.org/gmane.linux.kernel/989246 - desafortunadamente, por lo que puedo decir, el parche murió y nunca llegó río arriba por razones desconocidas para mí. Lástima, sonaba como una buena característica. Por otro lado, si coloca un intercambio en un RAID-1, si la corrupción está más allá de la capacidad de reparación de la suma de comprobación, querrá que el administrador de memoria intente leer desde la otra unidad antes de entrar en pánico o lo que sea probablemente fuera del alcance de lo que debe hacer un administrador de memoria.
En resumen:
- RAM tiene ECC para corregir errores
- Los archivos en almacenamiento permanente tienen btrfs para corregir errores
- Intercambio tiene ??? <--- esta es mi pregunta