Una perdita di potenza imprevista può danneggiare un'installazione Linux?


22

Sto sviluppando un'applicazione su una scheda embedded Linux (esegue Debian) ad esempio Raspberry Pi, Beagle Board / Bone o olimex. Le schede funzionano in un ambiente in cui l'elettricità viene tagliata in modo imprevisto (è molto complicato posizionare l'alimentatore, ecc.) E accadrebbe ogni giorno un paio di volte. Mi chiedo se le interruzioni di corrente impreviste potrebbero causare crash / problemi sul sistema operativo Linux? Se è qualcosa di cui dovrei preoccuparmi, cosa suggeriresti per prevenire danni al sistema operativo a causa di interruzioni di corrente impreviste?

PS. L'applicazione deve scrivere alcuni dati sul supporto di memorizzazione (scheda SD), penso che non sarebbe adatto per montarlo come di sola lettura.


1
Stai lontano da ext2 (usa ext3 o superiore) su filesystem che modifichi molto e dovresti essere OK per la maggior parte.
LawrenceC,

A meno che non stiate molto attenti a specificare le vostre schede SD, le schede non garantiscono nulla se si interrompe l'alimentazione in modo imprevisto. La carta potrebbe essere nel mezzo di una mossa che porta all'usura, portando a una strana e inattesa corruzione, che potrebbe anche trovarsi in una diversa partizione!
derobert,

Non so esattamente come farlo, ma potresti prendere in considerazione la possibilità di effettuare transazioni basate su applicazioni chiave. In questo modo, puoi avere il tuo file corrente e un backup. Si applicano le transazioni al file corrente e, in caso contrario, è possibile ripristinare il file corrente dal backup e riapplicare le transazioni. Se si passa tra corrente e backup utilizzando i collegamenti simbolici o scambiando i nomi dei file, ciò può accadere molto rapidamente con molte meno possibilità di errore rispetto alla copia. Dopo un aggiornamento riuscito, il file corrente diventa il backup e il backup diventa quello corrente.
Joe,

Continua. Questo funziona quasi. Il nuovo file corrente avrebbe anche bisogno delle transazioni applicate ad esso che richiedono l'elaborazione delle transazioni due volte, quindi sono sicuro che c'è un modo migliore. In ogni caso, potrebbe essere ancora più veloce e sicuro della copia dell'intero file se è grande.
Joe,

Risposte:


14

Interruzioni di corrente impreviste possono causare la corruzione dei dati del file system, ad esempio se un processo ha iniziato a scrivere su un file, ma non è ancora finito di scriverlo, il file potrebbe finire solo per metà. Ora immagina se l'interruzione dell'alimentazione avviene quando sei a metà dell'aggiornamento del kernel ...

Come ha scritto l0b0, l'uso di un file system di journaling aiuterà, poiché sarà in grado di tenere traccia di ciò che è stato effettivamente fatto. Oltre alle informazioni di Wikipedia che l0b0 legato, si può essere interessati a /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure pure .

Ovviamente, come programmatore, devi considerare attentamente come gestire la scrittura su file in modo che diventi un processo atomico (ovvero è completamente fatto o non fatto affatto, ma mai e poi mai fatto a metà). È un problema abbastanza complesso.


10
Il processo generale nel codice per la protezione da interruzioni di scrittura che danneggiano un file è che invece di modificare direttamente file.name, si scrive invece un file file.name.newversion completamente nuovo, quindi si utilizzano i comandi delete / rename per sostituire la versione precedente con nuovo. È necessario aggiungere il codice di pulizia per ripristinare da un'interruzione ad ogni passaggio; ma questo approccio lascia sempre una buona copia del file su disco. Ciò può influire sulla progettazione in quanto esegue un aggiornamento scadente di singoli file di grandi dimensioni o apporta frequenti modifiche a un singolo file.
Dan Neely,

11

Per ridurre al minimo la possibilità di corruzione del sistema operativo, è probabilmente meglio avere partizioni "di sistema" e "dati" separate sulla scheda SD. In questo modo è possibile montare la partizione "sistema" in sola lettura e utilizzare un FS altamente resiliente sulla partizione "dati".

Inoltre, la maggior parte di quelle schede ha requisiti di alimentazione molto bassi, quindi è possibile un backup della batteria. La scheda "LiPo rider" per Raspberry Pi può essere utilizzata come UPS di base per fornire un arresto pulito in caso di perdita di potenza.


5

Questo dipenderà

  1. se si utilizza un file system di journaling e
  2. quanto bene le applicazioni sono in grado di gestire l'elaborazione interrotta.

Si consideri ad esempio un'applicazione che elabora un file e scrive i risultati mentre vengono calcolati (una riga di output per riga di input) in un altro file. Se l'alimentazione viene interrotta durante l'elaborazione e la stessa applicazione viene eseguita dopo il riavvio, non può semplicemente riavviare l'elaborazione dall'inizio del file di input, ciò significherebbe che il file di output conterrebbe informazioni duplicate.

Potrebbe essere molto difficile dire qualcosa di definito su un ipotetico sistema complesso, ma il software Linux più stabile sembra essere in grado di gestire gli arresti anomali abbastanza bene.


1

Dato che nessuno ha menzionato alcun filesystem specifico: filesystem più moderni (ext3, ext4, ntfs) sono in grado di gestire gli arresti anomali molto meglio dei filesystem più vecchi (ext2, ext, fat32) a causa del journaling .

Supponendo che il disco rigido non si blocchi e non mente , un'interruzione completa dell'alimentazione non dovrebbe danneggiare il filesystem. I singoli file in fase di scrittura potrebbero comunque essere danneggiati, quindi, se si stava eseguendo l'aggiornamento del sistema operativo quando si è verificata un'interruzione di corrente, è comunque possibile arrestare il sistema operativo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.