Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] XFS e la perdita dei dati in caso di shutdown forzato
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Sat Aug 05, 2006 9:35 am    Post subject: [TIP] XFS e la perdita dei dati in caso di shutdown forzato Reply with quote

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
View user's profile Send private message
lavish
Bodhisattva
Bodhisattva


Joined: 13 Sep 2004
Posts: 4295
Location: Venice Island, European Union

PostPosted: Sat Aug 05, 2006 9:48 am    Post subject: Reply with quote

che ficata di tip, veramente interessante! Bravo equilibrium!
_________________
www.minimalblue.com
Back to top
View user's profile Send private message
.:deadhead:.
Advocate
Advocate


Joined: 25 Nov 2003
Posts: 2960
Location: Milano, Italy

PostPosted: Sat Aug 05, 2006 10:34 am    Post subject: Reply with quote

Mr. XFS ha colpito ancora ;)

Davvero impressionante!
_________________
Proudly member of the Gentoo Documentation Project: the Italian Conspiracy ! ;)
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Sun Aug 06, 2006 10:54 am    Post subject: Reply with quote

buono direi che questo risolve il problema :D

P.S. c'è una qualche opzione del kernel (2.6.17) per gestire la cosa o è abilitata automaticamente? (la write barrier intendo)
_________________
Any man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne
Back to top
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Sun Aug 06, 2006 2:30 pm    Post subject: Reply with quote

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
View user's profile Send private message
sometimes
n00b
n00b


Joined: 25 Jun 2005
Posts: 52

PostPosted: Wed Aug 09, 2006 11:08 pm    Post subject: Reply with quote

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
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Thu Aug 10, 2006 7:00 am    Post subject: Reply with quote

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
View user's profile Send private message
Dr.Dran
l33t
l33t


Joined: 08 Oct 2004
Posts: 766
Location: Imola - Italy

PostPosted: Sat Aug 12, 2006 12:18 pm    Post subject: Reply with quote

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
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Sat Aug 12, 2006 12:20 pm    Post subject: Reply with quote

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
View user's profile Send private message
Dr.Dran
l33t
l33t


Joined: 08 Oct 2004
Posts: 766
Location: Imola - Italy

PostPosted: Sat Aug 12, 2006 12:25 pm    Post subject: Reply with quote

Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito :D

Bien

Cheers

Franco
_________________
:: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group]
Back to top
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Sat Aug 12, 2006 12:28 pm    Post subject: Reply with quote

Dr.Dran wrote:
Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito :D


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
View user's profile Send private message
Dr.Dran
l33t
l33t


Joined: 08 Oct 2004
Posts: 766
Location: Imola - Italy

PostPosted: Sat Aug 12, 2006 12:35 pm    Post subject: Reply with quote

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 :D

Cheers

Franco
_________________
:: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group]
Back to top
View user's profile Send private message
Peach
Advocate
Advocate


Joined: 08 Mar 2003
Posts: 3680
Location: London, UK

PostPosted: Sat Feb 24, 2007 11:09 pm    Post subject: Reply with quote

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
View user's profile Send private message
flocchini
Veteran
Veteran


Joined: 17 May 2003
Posts: 1124
Location: Milano, Italy

PostPosted: Sun Feb 25, 2007 2:04 am    Post subject: Reply with quote

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
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3652

PostPosted: Sun Feb 25, 2007 9:18 am    Post subject: Reply with quote

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
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Thu Mar 01, 2007 11:19 am    Post subject: Reply with quote

http://oss.sgi.com/projects/xfs/faq.html#wcache

giusto per avere qualche riferimento ufficiale :wink:
_________________
Any man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4734
Location: not so far from an evil, world famous volcano. Under dictatorship, idiocracy, property of banks...

PostPosted: Thu Mar 01, 2007 12:07 pm    Post subject: Reply with quote

Dr.Dran wrote:
Capisco, quindi per cui se eventualmente mi ritrovo l'opzione "Write cache" attiva la disabilito subito :D


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:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Thu Mar 01, 2007 3:33 pm    Post subject: Reply with quote

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 man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum