Accesso ai contenuti originali del mount point


32

Sul mio NAS senza testa ho sdf1(una scheda flash) montata come /mentre /homeè montata da lv00(un volume LVM supportato da un RAID software). Per poter accedere alla macchina quando il RAID fallisce, ho una copia della mia chiave pubblica ssh, ecc. Nel /home/foo/.sshfile system da sdf1.
Per aggiornare i file che sono nascosti dal montati /homenormalmente rimonta lv00in /mnt/home, fare quello che devo fare, e quindi spostare lv00di nuovo al suo posto.
C'è un modo per raggiungere questo obiettivo senza smontare /home?

Risposte:


44
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

Finché si utilizza --bind(al contrario di --rbind), si ottiene un clone del supporto senza le cose montate su di esso.


Perfezionare! Stavo giocando con l'idea di mount --bind, ma ho avuto solo alcune idee contorte che si sarebbero sicuramente spezzate quando ne avevo bisogno. Questo fa esattamente ciò di cui ho bisogno e può persino entrare come supporto permanente. Grazie
Janus,

è una copia
poige

Vale la pena modificare questa risposta per includere il fatto che è necessario eseguire il bind mount di un livello sopra la directory coperta con un mount, come indicato nell'altra risposta? Questa risposta è altrimenti migliore, perché è più breve e quindi più facile da leggere rapidamente!
Michael Firth,

5

Ho cercato di ottenere qualcosa di simile, ma la risposta effimera non ha spiegato la semantica del metodo. Non è riuscito per me e quindi ho fatto praticamente la stessa domanda prima qui su unix.SE. Dopo un commento l'ho capito da solo e ho risposto. Questa è una versione modificata della mia risposta per adattarsi a questo contesto qui. Ho rimosso la mia altra domanda (e risposta) a favore di questa.

Ecco cosa stavo cercando di fare:

Caso di esempio

Monti:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)

Dopo il montaggio /ho una cartella /home/joeper l'utente joe. Una volta che l'altra posizione viene montata ( /data), ho a disposizione l'intero set di cartelle home, quindi le sto montando in posizione ( /data/home on /home). C'è una cartella /data/home/joe, quindi fino a quando il montaggio non /dev/sdb1riesce, otterrà il contenuto di /data/home/joe, altrimenti tornerà a /home/joe(on /dev/sda1!).

Quando ha esito positivo, come posso accedere al contenuto originale di /home/joe(on /dev/sda1!) Invece di quelli montati in posizione da /data/home/joe?

Soluzione

Sulla base di un commento del commento di Patrick sulla mia domanda e della soluzione di effimero (risposta accettata qui), ho trovato quanto segue.

Si è evidentemente possibile mount --bind(o mount -o bindla) cartella padre ( questa è la parte cruciale ) di un bind-mount altrove e accedere in tal modo il contenuto originale. Quindi, per il mio esempio, invece di provare a:

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath

(cioè montare le posizioni già montate altrove) dovevo:

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath

Questo è ciò che Patrick intendeva nel suo commento

A meno che tu non stia rimontando /(root), quella risposta dovrebbe funzionare bene.

Finché hai a disposizione una cartella principale per la posizione montata sul bind, funzionerà, anche se con una indiretta come mostrato sopra. Se hai collegato qualcosa su di /te, sei sfortunato, poiché non esiste una cartella principale per /.


Montare la cartella principale era la parte chiave che mi mancava. Grazie.
Aidan il

1

Puoi spostare il supporto in una nuova posizione senza smontarlo, usando mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home

1
Grazie Michael. Questo ha lo stesso svantaggio di rendere / home inaccessibile ad altri utenti.
Giano,
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.