Funziona così:
La maggior parte dei sistemi operativi ha una chiamata di sistema che consente una cosiddetta "scrittura sincrona". Ciò significa che durante un'operazione di scrittura, se una scrittura è stata completata, è garantito che è stato eseguito il commit su disco.
La scrittura sincrona non è quindi memorizzata nella cache. Blocca l'applicazione fino al completamento. Questo tipo di operazione è ovviamente più lenta della scrittura cache che mantiene i dati nella memoria del sistema operativo fino a quando il disco non è abbastanza inattivo e quindi scrive i dati.
Alcuni software critici, come il software di database, eseguono scritture sincrone per dati critici perché un aggiornamento semi-scritto in caso di interruzione dell'alimentazione può essere dannoso per l'integrità del database.
I controller RAID sono notoriamente lenti con le scritture RAID-5, quindi questo diventa un problema se il software applicativo utilizza molte scritture sincrone. Per questo motivo, i controller RAID-5 sono dotati di cache proprie.
Quello che fa il controller RAID è invece scrivere i dati nella sua cache e LIES nel sistema operativo, dicendo che ha eseguito il commit dei dati sul disco mentre i dati sono ancora nella cache RAID.
Ma cosa succede se l'alimentazione viene persa mentre i dati erano ancora nel buffer del controller RAID? Avresti dati scritti a metà e probabilmente incoerenti sui tuoi dischi.
Potresti dire che questo comportamento vanifica lo scopo di una scrittura sincrona ... se fosse ok avere una scrittura cache, il software dell'app non chiederebbe una scrittura sincronizzata in primo luogo.
Il compromesso è questo: il controller RAID sta ancora nel sistema operativo che ha impegnato i dati su disco, ma per proteggere questi dati critici in caso di interruzione dell'alimentazione, il controller RAID ha una batteria che mantiene la cache in vita per un po 'di tempo fino a quando l'alimentazione non può essere restaurato.
Quindi dopo il ripristino dell'alimentazione e l'avvio e l'inizializzazione dei dischi, il controller ha ancora quei dati nella sua cache grazie alla batteria e può finire di scrivere la transazione su disco.
Tutti sono felici.
Questo è il motivo per cui i controller RAID di solito non consentono di abilitare la cache di scrittura a meno che non si disponga di un'unità batteria funzionante e carica.