La mia comprensione è che i dischi rigidi e gli SSD implementano alcune correzioni di errori di base all'interno dell'unità e che la maggior parte delle configurazioni RAID, ad esempio mdadm, dipenderà da ciò per decidere quando un'unità non è riuscita a correggere un errore e deve essere messa offline. Tuttavia, ciò dipende dal fatto che la memoria sia accurata al 100% nella sua diagnosi di errore. Non è così, e una configurazione comune come un mirror RAID-1 a due unità sarà vulnerabile: supponiamo che alcuni bit su un'unità siano silenziosamente danneggiati e l'unità non segnali un errore di lettura. Pertanto, i file system come btrfs e ZFS implementano i propri checksum, in modo da non fidarsi dei firmware delle unità buggy, dei cavi SATA glitch e così via.
Allo stesso modo, la RAM può anche avere problemi di affidabilità e quindi abbiamo RAM ECC per risolvere questo problema.
La mia domanda è questa : qual è il modo canonico per proteggere il file di scambio di Linux da corruzione silenziosa / decomposizione dei bit non catturati dal firmware dell'unità su una configurazione a due dischi (cioè usando i driver del kernel mainline)? Mi sembra che una configurazione che manca di protezione end-to-end qui (come quella fornita da btrfs) in qualche modo nega la tranquillità offerta dalla RAM ECC. Eppure non riesco a pensare a un buon modo:
- btrfs non supporta affatto gli swapfile. È possibile impostare un dispositivo loop da un file btrfs e scambiarlo. Ma questo ha problemi:
- Le scritture casuali non funzionano bene: https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
- Il suggerimento di disabilitare il copy-on-write disabiliterà anche il checksum, sconfiggendo così l'intero punto di questo esercizio. Il loro presupposto è che il file di dati abbia le proprie protezioni interne.
- ZFS su Linux consente di utilizzare uno ZVOL come swap, che immagino possa funzionare: http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap - tuttavia, dalla mia lettura, ZFS è normalmente impegnativo in memoria e farlo funzionare in uno scambio -solo applicazione sembra un po 'di lavoro per capirlo. Penso che questa non sia la mia prima scelta. Perché dovresti usare un modulo kernel out-of-tree solo per avere uno scambio affidabile è al di là di me - sicuramente c'è un modo per farlo con la maggior parte delle moderne distribuzioni / kernel Linux in questo giorno ed età?
- In realtà c'era un thread su una mailing list del kernel Linux con patch per abilitare i checksum all'interno del gestore della memoria stesso, per le ragioni esatte che discuto in questa domanda: http://thread.gmane.org/gmane.linux.kernel/989246 - purtroppo, per quanto ne so, la patch è morta e non è mai arrivata a monte per motivi a me sconosciuti. Peccato, sembrava una bella caratteristica. D'altra parte, se si inserisce lo swap su un RAID-1 - se la corruzione è al di là della capacità del checksum di riparare, si vorrebbe che il gestore della memoria provasse a leggere dall'altra unità prima di andare nel panico o altro, che è probabilmente al di fuori dell'ambito di ciò che dovrebbe fare un gestore della memoria.
In sintesi:
- RAM ha ECC per correggere gli errori
- I file in memoria permanente hanno btrfs per correggere errori
- Lo scambio ha ??? <--- questa è la mia domanda