View previous topic :: View next topic |
Author |
Message |
!equilibrium Bodhisattva
Joined: 06 Jun 2004 Posts: 2109 Location: MI/BG/LC
|
Posted: Sat Aug 05, 2006 9:35 am Post subject: [TIP] XFS e la perdita dei dati in caso di shutdown forzato |
|
|
A volte può accadere che in seguito ad uno spegnimento della macchina (kernel panic, crash, freeze hardware, interruzione elettrica), si verifichi la perdita totale o parziale dei file che nel momento del crash erano caricati in memoria.
Va premesso che questa situazione avviene molto raramente e non è la prassi di ogni crash come molti credono. Fortunatamente questo problema ora fa parte del passato, ivi di seguito vi spiegherò come risolverlo una volta per tutte ed ottenere una migliore affidabilità del filesystem anche nei momenti più critici.
XFS è progettato affinchè non scriva immediatamente i file, ma prima di farlo aspetta che i suoi buffer di scrittura siano saturi (e/o allineati con lo stripe size dell'array RAID) dopodichè rigira i dati al journaling sotto forma di metadatas; sarà il journaling ad occuparsi della loro scrittura al momento opportuno garantendo l'integrità del filesystem stesso nei momenti critici. Proprio qui inizia il paradosso, il journaling di XFS, che dovrebbe garantire l'affidabilità dei dati, non riesce nel suo intento determinando la perdita dei metadatas.
Il punto è: perchè il journaling di XFS non fa quello che dovrebbe?, la risposta è molto semplice e potrebbe essere sconcertante per qualcuno: non è colpa del journaling di XFS, ma del kernel e di certi hard drive che fanno troppo e lo fanno pure male. Mi spiego meglio, quando il journal decide di scrivere i metadatas, i dati vengono inviati all'HD, ma se questo ha la write cache abilitata, i metadatas restano nella suddetta cache e non vengono scritti realmente sull'HD fino a quando non sarà completamente satura. E' proprio in questo frangente che se capita un crash o un freeze di sistema avviene la perdita di dati, non perchè XFS è inefficiente o ha dei BUG (non ne ha da questo punto di vista), ma per il semplice fatto che l'HD non ha scritto i dati nel momento in cui gli è stato detto di farlo, non solo, la write cache quando riceve un dato restituisce al filesystem la conferma dell'avvenuta scrittura dello stesso, anche se in realtà è ancora nella cache (perchè non è piena).
XFS non ha modo di verificare l'effettivo flusso dei dati dalla write cache verso il disco di silicio, per cui per il filesystem i dati sono stati scritti e quindi procede oltre con le sue operazioni. Va da se, che se nel frattempo avviene un imprevisto, il filesystem si ritrova con delle inconsistenze tra il journaling e il filesystem stesso e la fastidiosa perdita sporadica di qualche file.
Generalmente questo problema della write cache che non fa il flush dei dati quando deve, è una prerogativa degli hard drive ATA e PATA di classe economica, o di drive ATA/SCSI molto vecchi; gli hard drive di una certa qualità abbinano alla write cache le write barrier hardware il cui scopo è proprio quello di evitare il problema sopra esposto. Le write barrier sono supportate dal kernel linux da tempo immemore, sia quelle 'hardware' che quelle 'software' (cioè emulate per quegli hard drive di cui ne sono sprovvisti); purtroppo dal kernel 2.5.x tale supporto è stato disabilitato perchè dava dei problemi e lo è rimasto fino alla serie 2.6.15 (quindi per diversi anni), per poi essere nuovamente disabilitato fino alla serie 2.6.17, dalla cui versione invece è abilitata di default.
E' proprio per colpa della mancanza di questa feature nel kernel che si verifica la perdita di dati in caso di crash, quindi per risolvere il problema abbiamo 2 soluzioni:
- per chi possiede un kernel precedente al 2.6.17 bisogna disabilitare la write cache dell'hard drive, oppure forzare l'uso delle barrier nel kernel sperando che queste vengano riconosciute e/o emulate correttamente (ogni major e minor release ha i suoi problemi con le barrier, quindi è impossibile dire quale versione risolva il problema e quale no).
- usare un kernel 2.6.17 o superiori
Determinare se la write cache è attiva
per gli hard drive ATA/PATA/SATA:
Code: | hdparm -I /dev/hda | grep Write |
se è abilitata restituirà: * Write cache
l'asterisco indica che è abilitata, la sua assenza invece indica che è disabilitata
per gli hard drive SCSI:
Code: | sdparm --get=WCE /dev/sdX |
Disabilitare la write cache
per gli hard drive ATA/PATA/SATA:
Code: | hdarm -W0 -k1 -K1 /dev/hdX |
N.B.: assicuratevi anche di inserire tali opzioni in /etc/conf.d/hdparm, così in caso di reset hardware non vanno perse.
per gli hard driver SCSI:
Code: | sdparm --clear=WCE --save /dev/sdX |
N.B.: gli SCSI a differenza degli ATA/PATA/SATA, al reboot non perdono i settaggi delle configurazioni se questi vengono salvati con l'opzione --save
Forzare il supporto del kernel per le write barrier
Per abilitare forzatamente le write barrier per i kernel che hanno tale funzione disabilitata di default, è sufficiente montare la partizione desiderata con questa opzione:
Code: | /dev/hdXY / xfs barrier 0 0 |
_________________ Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe
all my contents are released under the Creative Commons Licence by-nc-nd 2.5 |
|
Back to top |
|
|
lavish Bodhisattva
Joined: 13 Sep 2004 Posts: 4296
|
|
Back to top |
|
|
.:deadhead:. Advocate
Joined: 25 Nov 2003 Posts: 2963 Location: Milano, Italy
|
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Sun Aug 06, 2006 10:54 am Post subject: |
|
|
buono direi che questo risolve il problema
P.S. c'è una qualche opzione del kernel (2.6.17) per gestire la cosa o è abilitata automaticamente? (la write barrier intendo) _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
!equilibrium Bodhisattva
Joined: 06 Jun 2004 Posts: 2109 Location: MI/BG/LC
|
Posted: Sun Aug 06, 2006 2:30 pm Post subject: |
|
|
Cazzantonio wrote: | P.S. c'è una qualche opzione del kernel (2.6.17) per gestire la cosa o è abilitata automaticamente? (la write barrier intendo) |
non c'è nulla da abilitare nel kernel, l'unico parametro concesso è quello per il mount: barrier e nobarrier _________________ Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe
all my contents are released under the Creative Commons Licence by-nc-nd 2.5 |
|
Back to top |
|
|
sometimes n00b
Joined: 25 Jun 2005 Posts: 52
|
Posted: Wed Aug 09, 2006 11:08 pm Post subject: |
|
|
non riesco a capire una cosa,
ho un kernel 2.6.17
debbo disabilitare la write cache?
o basta che abilito la write barrier?
o sto apposto così? |
|
Back to top |
|
|
!equilibrium Bodhisattva
Joined: 06 Jun 2004 Posts: 2109 Location: MI/BG/LC
|
Posted: Thu Aug 10, 2006 7:00 am Post subject: |
|
|
sometimes wrote: | non riesco a capire una cosa,
ho un kernel 2.6.17
debbo disabilitare la write cache?
o basta che abilito la write barrier?
o sto apposto così? |
dipende dal tuo hardware, se sono supportate dall'HD nativamente sei a posto così, ti basta emergere il 2.6.17, se invece non sono supportate hai due possibilità:
- forzare l'uso delle barrier a livello di mountpoint, questo abilita l'emulazione delle barrier e se l'emulazione è possibile (è il kernel che lo decide) sei a posto.
- se anche l'emulazione delle barrier non funziona, non ti resta altro che disabilitare la write cache, se non lo fai, avrai la perdita di dati come indicato nel thread. _________________ Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe
all my contents are released under the Creative Commons Licence by-nc-nd 2.5 |
|
Back to top |
|
|
Dr.Dran l33t
Joined: 08 Oct 2004 Posts: 766 Location: Imola - Italy
|
Posted: Sat Aug 12, 2006 12:18 pm Post subject: |
|
|
Domanda scema: esiste una sorta di blacklist dove poter capire se il proprio hardware funziona bene o no?
Cheers
Franco (Che domani parte per le FERIE!!!!!) _________________ :: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group] |
|
Back to top |
|
|
!equilibrium Bodhisattva
Joined: 06 Jun 2004 Posts: 2109 Location: MI/BG/LC
|
Posted: Sat Aug 12, 2006 12:20 pm Post subject: |
|
|
Dr.Dran wrote: | Domanda scema: esiste una sorta di blacklist dove poter capire se il proprio hardware funziona bene o no? |
non che io sappia, ma fai prima ad usare hdparm/sdparm. _________________ Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe
all my contents are released under the Creative Commons Licence by-nc-nd 2.5 |
|
Back to top |
|
|
Dr.Dran l33t
Joined: 08 Oct 2004 Posts: 766 Location: Imola - Italy
|
Posted: Sat Aug 12, 2006 12:25 pm Post subject: |
|
|
Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito
Bien
Cheers
Franco _________________ :: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group] |
|
Back to top |
|
|
!equilibrium Bodhisattva
Joined: 06 Jun 2004 Posts: 2109 Location: MI/BG/LC
|
Posted: Sat Aug 12, 2006 12:28 pm Post subject: |
|
|
Dr.Dran wrote: | Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito |
dipende dal kernel che stai usando, con il 2.6.17+ non devi disabilitare nulla (a meno che nei log di dmesg ti trovi un errore del kernel che non riesce ad abilitare le write barrier, ma è raro che accada). _________________ Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe
all my contents are released under the Creative Commons Licence by-nc-nd 2.5 |
|
Back to top |
|
|
Dr.Dran l33t
Joined: 08 Oct 2004 Posts: 766 Location: Imola - Italy
|
Posted: Sat Aug 12, 2006 12:35 pm Post subject: |
|
|
Ottimo, in effetti sto utilizzando i suspend2-sources e la versione del kernel è ancora la 2.6.16 quindi preventivament utilizzerò la tua tip disabilitando la Write cache e provando a forzare l'abilitazione delle barrier
Cheers
Franco _________________ :: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group] |
|
Back to top |
|
|
Peach Advocate
Joined: 08 Mar 2003 Posts: 3686 Location: London, UK
|
Posted: Sat Feb 24, 2007 11:09 pm Post subject: |
|
|
visto che equi ha riportato alla luce questo utilissimo post, ho riscontrato un piccolo errore:
Code: | # sdparm --get=WCE /dev/sda
/dev/sda: ATA WDC WD2500JS-55M 02.0
WCE 1 |
nel tentativo di modificare e salvare mi dice questo:
Code: | # sdparm --clear=WCE --save /dev/sda
/dev/sda: ATA WDC WD2500JS-55M 02.0
change_mode_page: mode page indicates it is not savable but
'--save' option given (try without it) |
ok, allora provo senza --save:
Code: | # sdparm --clear=WCE /dev/sda
/dev/sda: ATA WDC WD2500JS-55M 02.0
change_mode_page: failed setting page: Caching (SBC) |
ma
Code: | # sdparm --get=WCE /dev/sda
/dev/sda: ATA WDC WD2500JS-55M 02.0
WCE 1 |
non ci posso fare niente? _________________ Gentoo user since 2004.
"It's all fun and games, until someone loses an eye" - mom |
|
Back to top |
|
|
flocchini Veteran
Joined: 17 May 2003 Posts: 1124 Location: Milano, Italy
|
Posted: Sun Feb 25, 2007 2:04 am Post subject: |
|
|
stessa situazione, pero' le barriers sono riconosciute correttamente e quindi non me ne curo piu' di tanto...
io ho invece ho un altro dubbio:
Code: | Filesystem "dm-0": Disabling barriers, not supported by the underlying device
XFS mounting filesystem dm-0
Ending clean XFS mount for filesystem: dm-0
Filesystem "dm-1": Disabling barriers, not supported by the underlying device
XFS mounting filesystem dm-1
Ending clean XFS mount for filesystem: dm-1
Filesystem "dm-2": Disabling barriers, not supported by the underlying device |
e via cosi', per tutti i miei device in xfs su dm-crypt. Kernel 2.6.19, evidentemente ha dei problemi, mi conviene disabilitare la write cache su tutti i dischi? (anche se essendo sotto ups e' piu' una questione di principio che una reale necessita'...) _________________ ~~ Per amore della rosa si sopportano le spine... ~~ |
|
Back to top |
|
|
Kernel78 Moderator
Joined: 24 Jun 2005 Posts: 3654
|
Posted: Sun Feb 25, 2007 9:18 am Post subject: |
|
|
Anche io ottengo messaggi simili: Code: | Filesystem "md2": Disabling barriers, not supported by the underlying device
XFS mounting filesystem md2
|
stesso messaggio per tutti i miei raid software.
Ho anche notato Code: | # hdparm -I /dev/sd[a-c] | grep Write
* Write cache
* Write cache
* Write cache
|
Mi fido a disabilitarla e metto barrier nel fstab o potrei avere problemi ?
Anche io sono sotto ups e sono abbastanza cauto quando "gioco" con il kernel e non mi è mai capitato un blocco che non potessi risolvere almeno con i magic sysrq ma se posso ottenere di più da quello che ho perchè dovrei accontentarmi ? _________________ Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con Code: | grep -vE '(^[[:space:]]*($|(#|!|;|//)))' |
|
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Thu Mar 01, 2007 11:19 am Post subject: |
|
|
http://oss.sgi.com/projects/xfs/faq.html#wcache
giusto per avere qualche riferimento ufficiale _________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Thu Mar 01, 2007 12:07 pm Post subject: |
|
|
Dr.Dran wrote: | Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito |
Considera che xfs ha un pesante meccanismo di caching interno, il motivo per il quale è stato spesso sempre tacciato di perdersi i pezzi per strada, e che lo stesso vale in misura minore anche per gli altri fs. In realtà non ne vale molto la pena, la cache la tengo disabilitata da sempre e non me ne pento.
(ma adesso ho capito perchè non ho mai avuto tante preoccupazioni)
@!equilibrium
perchè non posti il suggerimento in un bug (proponendo ai devel di impostare hdparm ed sdparm con la write cache disabilitata di default)?
Per i niubbi potrebbe essere molto utile. _________________ scita et risus abundant in ore stultorum sed etiam semper severi insani sunt
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Thu Mar 01, 2007 3:33 pm Post subject: |
|
|
djinnZ wrote: | perchè non posti il suggerimento in un bug (proponendo ai devel di impostare hdparm ed sdparm con la write cache disabilitata di default)?
Per i niubbi potrebbe essere molto utile. |
Il motivo potrebbe essere questo:
SGI wrote: | This disabling is kept persistent for a SCSI disk. However, for a SATA/PATA disk this needs to be done after every reset as it will reset back to the default of the write cache enabled. And a reset can happen after reboot or on error recovery of the drive. This makes it rather difficult to guarantee that the write cache is maintained as disabled. |
In ogni caso ormai non è più un problema:
SGI wrote: | Write barrier support is enabled by default in XFS since 2.6.17 |
_________________ Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
|