Come si monta nuovamente un readwrite ext3 fs dopo che è stato montato in sola lettura da un errore del disco?


18

È un problema relativamente comune quando qualcosa non va in una SAN per ext3 per rilevare gli errori di scrittura del disco e rimontare il filesystem in sola lettura. Tutto bene, solo quando la SAN è fissa non riesco a capire come reinstallare il filesystem in lettura e scrittura senza riavviare.

Ecco:

[root@localhost ~]# multipath -ll
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 1:0:0:1 sdb 8:16  [active][ready]
\_ 2:0:0:1 sdc 8:32  [active][ready]
[root@localhost ~]# mount /dev/mapper/mpath0 /mnt/foo
[root@localhost ~]# touch /mnt/foo/blah

Va bene, ora tiro fuori il LUN da sotto di esso.

[root@localhost ~]# touch /mnt/foo/blah
[root@localhost ~]# touch /mnt/foo/blah
touch: cannot touch `/mnt/foo/blah': Read-only file system
[root@localhost ~]# tail /var/log/messages
Mar 18 13:17:33 localhost multipathd: sdb: tur checker reports path is down
Mar 18 13:17:34 localhost multipathd: sdc: tur checker reports path is down
Mar 18 13:17:35 localhost kernel: Aborting journal on device dm-2.
Mar 18 13:17:35 localhost kernel: Buffer I/O error on device dm-2, logical block 1545
Mar 18 13:17:35 localhost kernel: lost page write due to I/O error on dm-2
Mar 18 13:17:36 localhost kernel: ext3_abort called.
Mar 18 13:17:36 localhost kernel: EXT3-fs error (device dm-2): ext3_journal_start_sb:   Detected aborted journal                      
Mar 18 13:17:36 localhost kernel: Remounting filesystem read-only

Pensa solo di essere di sola lettura, in realtà non è nemmeno lì.

[root@localhost ~]# multipath -ll
sdb: checker msg is "tur checker reports path is down"
sdc: checker msg is "tur checker reports path is down"
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][enabled]
 \_ 1:0:0:1 sdb 8:16  [failed][faulty]
 \_ 2:0:0:1 sdc 8:32  [failed][faulty]
[root@localhost ~]# ll /mnt/foo/
ls: reading directory /mnt/foo/: Input/output error
total 20
-rw-r--r-- 1 root root     0 Mar 18 13:11 bar

Come si ricorda ancora che il file 'bar' è lì ... mistero, ma non è importante in questo momento. Ora presento nuovamente il LUN:

[root@localhost ~]# tail /var/log/messages
Mar 18 13:23:58 localhost multipathd: sdb: tur checker reports path is up
Mar 18 13:23:58 localhost multipathd: 8:16: reinstated
Mar 18 13:23:58 localhost multipathd: mpath0: queue_if_no_path enabled
Mar 18 13:23:58 localhost multipathd: mpath0: Recovered to normal mode
Mar 18 13:23:58 localhost multipathd: mpath0: remaining active paths: 1
Mar 18 13:23:58 localhost multipathd: dm-2: add map (uevent)
Mar 18 13:23:58 localhost multipathd: dm-2: devmap already registered
Mar 18 13:23:59 localhost multipathd: sdc: tur checker reports path is up
Mar 18 13:23:59 localhost multipathd: 8:32: reinstated
Mar 18 13:23:59 localhost multipathd: mpath0: remaining active paths: 2
Mar 18 13:23:59 localhost multipathd: dm-2: add map (uevent)
Mar 18 13:23:59 localhost multipathd: dm-2: devmap already registered
[root@localhost ~]# multipath -ll
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][enabled]
 \_ 1:0:0:1 sdb 8:16  [active][ready]
 \_ 2:0:0:1 sdc 8:32  [active][ready]

Ottimo vero? Dice [rw] proprio lì. Non così in fretta:

[root@localhost ~]# touch /mnt/foo/blah
touch: cannot touch `/mnt/foo/blah': Read-only file system

OK, non lo fa automaticamente, gli darò solo una piccola spinta:

[root@localhost ~]# mount -o remount /mnt/foo
mount: block device /dev/mapper/mpath0 is write-protected, mounting read-only

Al diavolo sei:

[root@localhost ~]# mount -o remount,rw /mnt/foo
mount: block device /dev/mapper/mpath0 is write-protected, mounting read-only

Noooooooooo.

Ho provato tutti i tipi di diversi comandi mount / tune2fs / dmsetup e non riesco a capire come farlo per annullare il contrassegno del dispositivo a blocchi come protetto da scrittura. Il riavvio lo risolverà, ma preferirei farlo online. Un'ora di googling non mi ha portato da nessuna parte. Salvami ServerFault.


3
hmm, un paio di domande 'È un problema relativamente comune quando qualcosa va storto in una SAN' perché la tua SAN è così inaffidabile, prima verificherei? Hai provato a smontare con umount e quindi a montarlo di nuovo? C'è una buona ragione per cui devi fare un rimontaggio ?. Di solito ho solo bisogno di rimontare i miei filesystem di root dopo la manutenzione.
The Unix Janitor

umount rimbalza su handle di file aperti, che spesso provengono da processi che preferiresti uscire con sicurezza.
Cagenut,

Ho un problema simile in cui dopo un problema SAN i dischi VM sono di sola lettura e il tentativo di rimontare provoca lo stesso errore nell'OP. Le macchine virtuali sono su esxi 4.1 con memoria a canale in fibra ottica. Il riavvio della VM risolve il problema. Personalmente non penso che questo abbia a che fare con multipath. Sicuramente ci deve essere un modo per risolvere senza riavviare, soprattutto perché alcuni servizi (apache) tendono a continuare a funzionare su un FS di sola lettura.
Sarà il

Sono venuto qui alla ricerca di una soluzione al mio problema (che è diverso, un disco corrotto). Invece ho sorriso. +1 per "Che diavolo sei"
user1207217

Ho lo stesso identico problema, ma sto usando LVM. Lo stesso lvdisplay mi darebbe una "lettura non riuscita dopo 0 di 4096 a 449197309952: errore di input / output" fino a quando non ho fatto un "multipath -r", quindi LVM ha iniziato a visualizzare tutto correttamente senza errori. Tuttavia, non riesco ancora a rimontare la partizione. Non è possibile nemmeno smontare, dice che il dispositivo è occupato. Se chiudo tutti i processi utilizzando il dispositivo, posso smontare e quindi rimontare con successo, ma preferirei solo essere in grado di rimontare il dispositivo in lettura-scrittura, come dovrei essere in grado di ...
mpontes

Risposte:


6

Di recente ho riscontrato questo problema e risolto riavviando, ma dopo ulteriori indagini sembra che l'emissione del seguente comando possa risolverlo.

echo running > /sys/block/device-name/device/state

Penso che potresti voler dare un'occhiata alla sezione 25.14.4: Modifica dello stato di lettura / scrittura di un'unità logica online in questo documento , tuttavia, ti consiglio di riavviare.


Grazie Kevin. (Un) per fortuna il problema è scomparso da tempo, quindi non posso testarlo ma questa sembra l'opzione più promettente.
Cagenut,

3
In un problema simile ho riscontrato che / sys / block / nome-dispositivo / dispositivo / stato era già impostato su "in esecuzione" e il comando sopra non ha risolto il problema.
Sarà il

3

Prova a usare:

mount -o remount,rw /mnt/fo

Conosco FreeBSD, non Linux. Ma per FBSD è mount -rw /mnt/foo, quindi questo sembra il più giusto per me.
Chris S

1
Non ho mai avuto questo lavoro nello scenario delineato nella domanda. Una volta che il disco è contrassegnato in sola lettura a causa di errori, ha sempre richiesto un riavvio per me.
Alex

1
Lo modificherò nell'OP, ma Alex è proprio qui, il problema sembra essere al di sotto del filesystem: [root @ localhost ~] # mount -o remount, rw / mnt / foo mount: block device / dev / mapper / mpath0 è protetto da scrittura, il montaggio di sola lettura
cagenut

1
Hai provato a smontare la partizione e rimontarla? Ho avuto errori di dati in precedenza con un disco, smontaggio (o rimontaggio, rw) lo ha riparato per me. Questo era con le unità SATA (e precedenti EIDE / SCSI) Tuttavia, nella tua situazione, mi chiedo se il problema è che il canale dell'unità deve essere ripristinato. Mi chiedo se HDIO_DRIVE_RESET abbia inviato in qualche modo tramite ioctl. blockdev può essere usato per forzare la rilettura della tabella delle partizioni che potrebbe farlo. IDE lo espone con hdparm -w, forse con i tuoi drive FC, hai un modo per inviare lo ioctl al canale.

2

Sono un fan di prevenire il problema in primo luogo. La maggior parte delle caselle UNIX aziendali riproveranno le operazioni del filesystem come per sempre. Come amministratore devi fare alcuni compiti prima di mettere a punto la tua configurazione MPIO. Se l'applicazione deve attendere fino a quando il dispositivo non ritorna in uno stato utilizzabile, ecco una soluzione. Nel tuo /etc/multipath.conf assicurati che il tipo di dispositivo che ti interessa abbia un'impostazione per "no_path_retry" impostata su "coda". L'impostazione di questo farà sì che gli I / O non riusciti si mettano in coda fino a quando non esiste un percorso valido. Lo abbiamo fatto perché le nostre scatole EMC Symmtrix / DMX funzionassero per il singhiozzo in determinate condizioni: guasti / recupero del percorso dell'unità / controller / controller srdf.

Questo approccio ha salvato il nostro bacon innumerevoli volte ed è il nostro standard per centinaia di scatole su una SAN multicabinet / multivendor con replica per il ripristino di emergenza.

Ho pensato di condividere con tutti voi. Stai attento.


2

Ho avuto qualche problema, che ho risolto usando hdparm con l' -ropzione su unità secondarie di dispositivi logici multipath.

-r Ottieni / imposta flag di sola lettura per il dispositivo. Se impostato, Linux non consente le operazioni di scrittura sul dispositivo.


1

Pensi che sia legato alla sezione di questo documento intitolata Perché i filesystem ext3 sulla mia Storage Area Network (SAN) diventano ripetutamente di sola lettura ?

È un articolo piuttosto vecchio e parla di Fibre Channel, ma potrebbe essere correlato al tuo problema.


Sì, non è quell'esatto bug specifico poiché sto eseguendo versioni molto più recenti di quelle a cui fanno riferimento, ma possono verificarsi situazioni simili di ogni genere. Il mondo dei driver Fibre Channel, hbas / hba-firmware / hba-driver, array array, switch firmware, design fabric, device-mapper / multipathd config, lvm ed ext3 è semplicemente un sacco di parti in movimento. Lavora su un numero sufficiente di ambienti e vedrai questo scenario causato da un problema con problemi simili ma non identici. La domanda è: come ripristinare / rimontare senza riavviare.
Cagenut,

0

Corruzione del file system? Provare:

dumpe2fs /dev/c/c | grep Filesystem\

Se pulito con errori, è necessario eseguire la scansione e la pulizia.


-4

Linux semplicemente non fa fronte abbastanza bene alle SAN di dimensioni medio-grandi. DEVI dargli un po 'di cura e perfezionare i timeout IO e la gestione del timeout multipath, sono praticamente tutti predefiniti per desktop.

(Ricorda "rifiutare IO su dispositivo morto"?)


1
È necessario eseguire il backup di istruzioni come "Linux non fa fronte alle SAN" e "impostazioni predefinite per desktop" con riferimenti e fatti concreti.
Chris S,

1
Timeout I / O disco predefinito di 30 secondi? Il thread sopra? La nota di RedHat (per quanto obsoleta) in cui si afferma che non possono gestire con grazia una "notifica di cambio di stato", nel modo in cui sarebbe stata intesa. Quel Redhat di default mette i collegamenti multipath in una posizione (/ var / lib) che non sarebbe accessibile al momento del caricamento del driver multipath? Che non è possibile disabilitare ricorsivamente a caldo un hotplug PCI hba e portare temporaneamente offline tutti i LUN dipendenti fino a quando non è stato sostituito. Che non ha init HW multithread e impiega "un po '" per trovare> 1k luns. Udev, essendo uno script di shell ...
darkfader,
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.