Rimontare un disco occupato in modalità di sola lettura


19

Voglio forzare una partizione del disco in modalità di sola lettura e mantenerla di sola lettura per più di 30 minuti.

Cosa ho provato:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    Problema : questo dava errore di dispositivo occupato poiché alcuni processi utilizzavano la partizione. Non voglio uccidere i processi usando il disco. Voglio simulare il disco improvvisamente andando in sola lettura quando i processi lo stanno ancora utilizzando.

  2. Chiave sysrq usata, come sotto

    echo u > /proc/sysrq-trigger
    

    Problema : in questo modo tutte le partizioni del disco saranno di sola lettura (sebbene il dispositivo sia occupato). Ma dopo 20-30 minuti la macchina si riavvia da sola. Alcune macchine si riavviano immediatamente dopo l'esecuzione di questo comando. Non sono ancora sicuro di cosa stia causando questo riavvio. Non voglio che la macchina si riavvii da sola e devo mantenere il disco in modalità di sola lettura per oltre 30 minuti.

Domanda : Esiste un modo migliore per forzare una singola partizione del disco in sola lettura e sostenerla in quello stato per mezz'ora e riportarla in modalità lettura-scrittura senza causare alcun riavvio nel processo?


3
Hai preso in considerazione fsfreeze -f? Non rimonta esattamente il file system in sola lettura. Invece, blocca tutti gli scrittori fino a quando fsfreeze -u. Ma è simile ...
Celada

Grazie Celada! è una buona idea! .. In questo momento non ho fsfreeze funzionante nella mia macchina, ma ci proverò.
Adithya CS

Ho provato fsfreeze -fe nel mio caso è stato più "os freeze". Forse perché le scritture sono state bloccate anziché essere rifiutate?
Piotr Findeisen

fsfreezeho reso il mio sistema inaccessibile e non sono riuscito a inserire il comando unfreeze non potendo tornare a un terminale e ho dovuto riavviare la macchina. Quindi attenzione ! :)
Alex,

Risposte:


16

Normalmente non è possibile rimontare un filesystem in sola lettura se nei processi è presente un file aperto per la scrittura o se contiene un file eliminato ma ancora aperto. Allo stesso modo, non è possibile smontare un filesystem che ha file aperti (o usi simili di file come un processo che ha la sua directory corrente lì, un eseguibile in esecuzione, ecc.).

È possibile utilizzare umount -lper rilasciare il punto di montaggio e impedire l'apertura di ulteriori file, ma mantenere il filesystem montato e mantenere i processi che hanno già i file aperti in esecuzione normalmente.

Non riesco a pensare a un modo generico per forzare il rimontaggio di un filesystem in sola lettura quando non dovrebbe esserlo. Tuttavia, se il filesystem è supportato da un dispositivo a blocchi, è possibile rendere il dispositivo a blocchi di sola lettura , ad es

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggerè un modo piuttosto estremo per forzare il rimontaggio come di sola lettura, perché interessa tutti i filesystem. È inteso come un metodo last-ditch per lasciare il filesystem in uno stato pulito appena prima di riavviare.

La reinstallazione di un filesystem in sola lettura non provoca un riavvio. Qualunque cosa stia causando il riavvio non è direttamente correlata al rimontaggio della partizione in sola lettura. Forse è completamente non correlato, o forse questo fa scattare un bug nell'applicazione che lo fa girare e fa surriscaldare il processore e il tuo processore è difettoso o overcloccato e alla fine si riavvia. È necessario rintracciare la causa del riavvio.


2
Sfortunatamente, questa non è una soluzione portatile. Su lampone ottengo: "Autorizzazione negata" quando corroecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. e echo u > /proc/sysrq-triggernon è solo estremo, ma può anche costringerti a riavviare se vuoi rimontare nuovamente RW. Quando ho provato questo e poi ho rimontato (con mount..) dmesgho detto "Impossibile rimontare RDWR a causa dell'elenco di inode orfano non elaborato. Si prega di umount / rimontare invece"
Piotr Findeisen

@PiotrFindeisen l'hai eseguito come root?
Hanshenrik,

@hanshenrik credo di si
Piotr Findeisen

4

Usa mountl'opzione force (supponendo che il tuo mount ne abbia uno; GNU mountno, ma per esempio BSD e macOS):

mount -f -o remount,ro /mount/point

Naturalmente, il tuo chilometraggio può variare a seconda del file system attuale, della versione del kernel e della situazione , quindi questa è un'opzione di livello superiore che prova altri trucchi di livello inferiore come ad esempio menzionato da @Gilles.


1
@psusi no. Mi ha permesso di rimontare la mia /partizione ext4 .
Piotr Findeisen

2
Si scopre che stavo pensando umount -f, ma ho appena provato a rimontare su ro, e mentre -f fa sì che il comando non restituisca un errore, il file system in realtà non viene fatto in sola lettura.
psusi

1
@psusi, nessuna sorpresa. Non mi aspetto un singolo approccio per funzionare in tutti i casi. Questo ha funzionato ripetutamente per me (partizione root ext4 su raspberry per la questione) - e intendo rimontare su RO, non ignorando gli errori - quindi immagino funzionerà per alcuni, ma non per tutti, altri casi. Spiacente, questo non ha incluso il tuo.
Piotr Findeisen

13
man mount dice di -fsi --fake. Citazione: "Fa sì che tutto venga fatto tranne la chiamata di sistema effettiva; se non è ovvio, questo '' falso '' monta il filesystem. Questa opzione è utile insieme al flag -v per determinare a cosa sta tentando il comando mount Sì. Può anche essere usato per aggiungere voci per dispositivi che sono stati montati in precedenza con l'opzione -n. L'opzione -f controlla il record esistente in / etc / mtab e fallisce quando il record esiste già (con un normale mount non falso, questo controllo viene eseguito dal kernel). "
Will Manley,

3
BSD e, quindi, macOS mount ' -f significa davvero "forza".
Terdon
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.