Linux, come cambiare lo stato dell'HDD da ReadOnly solo dopo un arresto temporaneo?


17

Al momento non è possibile rispondere a questo problema.

Di solito dopo alcuni problemi con letture o scritture per bloccare il dispositivo, il kernel decide di cambiare flag per TUTTO IL DISPOSITIVO in sola lettura. Dopo questo, qualsiasi scrittura su qualsiasi partizione / filesystem situata su questo dispositivo causa lo scambio come di sola lettura insieme allo stato del dispositivo, perché qualsiasi scrittura è impossibile.

Esempio da dmesg, questa è una simulazione per guest linux su windows8 usando VirtualBox quando defrag prende l'immagine del dispositivo guest:

[11903.002030] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11903.003179] ata3.00: failed command: READ FPDMA QUEUED
[11903.003364] ata3.00: cmd 60/08:00:a8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11903.003385]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11903.004074] ata3.00: status: { DRDY }
[11903.004248] ata3: hard resetting link
[11903.325703] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11903.327097] ata3.00: configured for UDMA/133
[11903.328025] ata3.00: device reported invalid CHS sector 0
[11903.329664] ata3: EH complete
[11941.000472] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11941.000769] ata3.00: failed command: READ FPDMA QUEUED
[11941.000952] ata3.00: cmd 60/08:00:c8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11941.000961]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11941.001353] ata3.00: status: { DRDY }
[11941.001504] ata3: hard resetting link
[11941.320297] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11941.321252] ata3.00: configured for UDMA/133
[11941.321379] ata3.00: device reported invalid CHS sector 0
[11941.321553] ata3: EH complete
[11980.001746] ata3.00: exception Emask 0x0 SAct 0x11fff SErr 0x0 action 0x6 frozen
[11980.002070] ata3.00: failed command: WRITE FPDMA QUEUED
[11980.002255] ata3.00: cmd 61/18:00:28:23:59/00:00:00:00:00/40 tag 0 ncq 12288 out
[11980.002265]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
-------------------
There are many other errors, like "lost write page", "Journal has aborted", "Buffer I/O error", "hard resetting link" and many others.

Dopo questo, rimontare causa:

mount / -o remount,rw
mount: cannot remount block device /dev/sda1 read-write, is write-protected

perché TUTTO il dispositivo sda mantenendo rootfs sda1 è PRONTO.

Nella mia esperienza questo si verifica in situazioni:

  1. L'HDD è veramente danneggiato. I problemi di scrittura restituiti dipendono dalle condizioni dell'HDD
  2. La macchina host è sovraccarica, quindi le scritture HDD virtuali per guest Linux sono scadute
  3. Il cavo FC o il dispositivo SAN (dischi array su Fibre Channel) sono sovraccarichi
  4. Connessione momentanea persa su FC o FCoE. Forse un pacchetto FC perso / scaduto

In queste situazioni il dispositivo è realmente in lettura-scrittura, ma il kernel linux contrassegna questo dispositivo internamente come sola lettura e viene usato come sola lettura. Questa è la funzionalità del kernel creata per la prevenzione dei danni, ma è utilizzabile solo in 1. punto.

La domanda è Come dire manualmente al kernel, il dispositivo a blocchi hdd funziona normalmente?

A parte questo, il kernel serve il dispositivo in sola lettura, come "CD-ROM", e nessun altro comando ha la possibilità di funzionare correttamente, incluso mount / remount -o read-write, fsck e altri.

Risponditori inutilizzabili, veramente qualificati come spam da persone che vogliono aiutare, ma non comprendono la natura del problema:

  1. Prova a rimontare come read-write (impossibile, il dispositivo è RO)
  2. fsck questo (cosa per? dispositivo è RO, nessuna riparazione è possibile)
  3. 'Non lo so' (prima con senso, ma inutilizzabile)
  4. 'Sostituisci il tuo dispositivo' * (di solito il problema è qualcos'altro)

Qualcuno ha qualche formula per la domanda sopra? Cambia flag per il dispositivo a blocchi scrivibile che lo ripristina dallo stato di sola lettura a quello di lettura-scrittura? In questo momento sembra che nessuno sappia come.

Sono alcune soluzioni alternative, ma di solito semi-utilizzabili o inutilizzabili:

  1. Rimuovi modulo supporta l'accesso all'hdd o all'array di archiviazione specificati. Sfortunatamente il dispositivo solitamente danneggiato mantiene i rootfs, o il driver mantiene sia il dispositivo danneggiato che il dispositivo che mantiene i rootfs
  2. Rimuovere l'accesso FC al dispositivo e unirlo nuovamente (fctools), non sempre possibile, non sempre funziona.
  3. Riavvia TUTTA la macchina. Di solito solo questo è sempre possibile e siamo sempre costretti a farlo.

Ai punti 1. e 2. diciamo al kernel che disconnettiamo completamente il dispositivo e ci riconnettiamo ad esso. Il kernel lo ha riconosciuto come unendo un nuovo dispositivo funzionante correttamente. Possiamo simularlo utilizzando il dispositivo USB e rimuovere temporaneamente l'alimentazione. Il punto 3. è l'ultima possibilità e di solito funziona. Ma perché dovremmo riavviare tutto? Sfortunatamente in ogni momento abbiamo perso tutti gli aggiornamenti delle riviste e i buffer sporchi.

Si noti, nelle stesse situazioni non ho problemi con Windows (desktop e server).


Non una risposta, ma possibilmente correlata in caso di # 2 (elevato carico dell'host, timeout hdd guest): aumentare il timeout hdd Linux per prevenire la corruzione del file system causata da timeout hdd nel sistema guest.
basic6

@Znik, queste macchine virtuali guest sono in esecuzione su Citrix XenServer? O hardware fisico? Il nostro StorageServer collega la terra di Ethernet a terra di mini-sas. Quando questa macchina a ponte va nel panico, deve essere riavviata forzatamente. Le macchine virtuali guest Windows tornano. Le macchine virtuali guest Linux presentano lo stesso identico problema che hai. Nulla ha suggerito qui riporta i punti di mount a sinistra.
Rjt

@rjt, questo si verifica in molte situazioni. La situazione principale è quella in cui il dispositivo è estremamente lento con qualsiasi problema, come danni fisici, sovraccarico del dispositivo, cablaggio, FC esterno su Eth ed eth è sovraccarico, a volte l'interruttore si reimposta quando blocco di trasferimento, timeout, pacchetto perso ecc. Il dispositivo di solito è ancora visibile, ma contrassegnato come di sola lettura. Il riavvio non è una soluzione, è una soluzione alternativa, come ho descritto nella domanda principale / descrizione del problema.
Znik,

Risposte:


12

prova con blockdev --setrwohdparm -r 0


grazie, questo dovrebbe essere utile. Sto aspettando qualsiasi timeout sul controller fc
Znik

Una parte importante che deve essere aggiunta: a volte è necessario eseguire un fsckfile system di sola lettura, prima di poterlo montare nuovamente.
Evi1M4chine,

3
Non funziona per me. ho un problema simile
jonneymendoza,

1
Non ha funzionato per me nemmeno con fsck. Ospiti Citrix XenServer Linux.
Rjt

Non funziona ! Questi comandi sembrano efficaci, ma il dongle è ancora RO. (è un software, ma da dove ???) Se vuoi provare, prendi qualsiasi Debian iso 9.4.
Sandburg,

5

Come Jose Luis Martin ha suggerito di usare blockdev, il mio 2cent è quello di fare un rimontaggio rw e forcefsck

(supponendo che sda ​​sia il tuo disco)

blockdev --setrw /dev/sda
mount /dev/sda -o remount,rw
touch /forcefsck

1
Ha più senso correre fsckprima del mount, poiché non riuscirà a montare senza fsck. (Almeno nel mio caso è successo.)
Evi1M4chine

`# blockdev --setrw / dev / xvda1 # # touch / tmp / date +%Y%m%d-%H%M%Stouch: impossibile toccare? / tmp / 20170722-221904 ?: file system di sola lettura # # mount -o rimontaggio, rw / dev / xvda1 [137010.709883] EXT4 -fs errore (dispositivo xvda1): ext4_remount: 4824: interruzione forzata da montaggio utente: impossibile rimontare il dispositivo a blocchi / dev / xvda1 lettura-scrittura, è protetto da scrittura `
rjt

2

Controlla questa pagina wiki, spiega l'errore generato da libata:

https://ata.wiki.kernel.org/index.php/Libata_error_messages

Da quello che vedo sopra, hai un problema di timeout e secondo il documento menzionato:

Il controller non è riuscito a rispondere a un comando ATA attivo. Questo potrebbe essere un numero qualsiasi di cause. Molto spesso ciò è dovuto a un bug del sottosistema di interrupt non correlato (provare ad avviare con 'pci = nomsi' o 'acpi = off' o 'noapic'), che non è riuscito a fornire un interrupt quando ci aspettavamo uno dall'hardware.

Potresti voler disabilitare ACPI (controlla come basarti sulla tua distribuzione) o controllare il tuo kernel per i bug conosciuti e possibilmente aggiornarlo se non è l'ultimo (o esegui il downgrade).


Sì, questo è davvero timeout. Di solito ciò si verifica sul controller FC quando il dispositivo array è sovraccarico. Hai ragione, sul sottosistema ATA locale di solito si tratta di qualsiasi bug hardware o implementazione di driver / chipset
Znik

Quindi è un timeout? Bene, cosa sudo hdparm -I /dev/sdX | grep lockeddice? Si deve dire: 'non bloccato'. Ha mostrato questi enigmatici timeout in passato qui ogni volta che un HDD era bloccato da una password ATA (a causa di una precedente cancellazione della sicurezza e di un arresto del sistema in seguito che ha causato la cancellazione della pw di sicurezza). Questa roba della password ha davvero un impatto enorme , anche sui tuoi nervi. :) Anche gli strumenti standard spediti dal tuo rivenditore di dischi rigidi si comportano in modo folle, come se l'HDD stesse per morire quando la password è attiva. Il colpevole di innumerevoli ciuffi di capelli strappati nel corso degli anni.
syntaxerror,

1

Riavvia in Windows 10, vai alle opzioni di risparmio energia e disattiva lo spegnimento rapido. quindi riavviare su Linux ..gbamm tutto bene.

l'arresto rapido in Windows 10 mette in letargo alcuni file e l'unità viene parzialmente utilizzata. quindi Linux vede che è occupato.

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.