Zugriff auf den ursprünglichen Inhalt des Einhängepunkts

32

Auf meinem kopflosen NAS habe ich sdf1(eine Flash-Karte) gemountet, /während /homevon lv00(einem LVM-Volume, das durch ein Software-RAID gesichert ist ) gemountet wird . Um auf die Maschine zugreifen zu können, wenn das RAID ausfällt, habe ich eine Kopie meines öffentlichen SSH-Schlüssels usw. im /home/foo/.sshDateisystem von sdf1.
Um die Dateien zu aktualisieren , die versteckt sind durch die montierte /homeich normalerweise Remount lv00in /mnt/home, das tun , was ich zu tun habe, und bewegen Sie dann lv00an Ort und Stelle zurück.
Gibt es eine Möglichkeit, dies ohne Demontage zu erreichen /home?

Janus
quelle

Antworten:

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

Solange Sie --bind(im Gegensatz zu --rbind) verwenden, erhalten Sie einen Klon des Reittiers, ohne dass das Zeug darauf montiert ist.

vergänglich
quelle
Perfekt! Ich spielte mit der Idee von mount --bind, bekam aber nur ein paar verschlungene Ideen, die sicher kaputt gingen, wenn ich sie brauchte. Dies macht genau das, was ich brauche und kann sogar als permanentes Reittier eingesetzt werden. Vielen Dank
Janus
Lohnt es sich, diese Antwort zu bearbeiten, um die Tatsache einzubeziehen, dass Sie eine Ebene über dem Verzeichnis binden müssen, das Sie mit einem Mount abgedeckt haben, wie in der anderen Antwort beschrieben? Diese Antwort ist ansonsten besser, weil sie kürzer und damit schneller lesbar ist!
Michael Firth
5

Ich habe versucht, etwas Ähnliches zu erreichen, aber die Antwort von ephemient erklärte nicht die Semantik der Methode. Es ist für mich fehlgeschlagen und so habe ich hier auf unix.SE fast die gleiche Frage gestellt. Nach einem Kommentar habe ich es selbst herausgefunden und beantwortet. Dies ist eine überarbeitete Version meiner Antwort, die hier in diesen Kontext passt. Ich habe meine andere Frage (und Antwort) zugunsten dieser Frage entfernt.

Folgendes habe ich versucht:

Beispielfall

Reittiere:

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

Nach dem Einhängen habe /ich einen Ordner /home/joefür Benutzer joe. Sobald der andere Ort gemountet ist ( /data), habe ich den vollständigen Satz von Home-Ordnern zur Verfügung, so dass ich sie an Ort und Stelle binde ( /data/home on /home). Es gibt einen Ordner /data/home/joe, so lange das Mounten von /dev/sdb1erfolgreich ist, bekommt er den Inhalt von /data/home/joe, sonst greift er auf /home/joe(on /dev/sda1!) Zurück .

Wenn es erfolgreich ist , wie kann ich den ursprünglichen Inhalt des zugreifen /home/joe(auf /dev/sda1!) Anstelle der an Ort und Stelle binden montierte aus /data/home/joe?

Lösung

Basierend auf einem Kommentar von Patricks Kommentar zu meiner Frage und der Lösung durch Ephemient (akzeptierte Antwort hier), kam ich auf Folgendes.

Es ist offenbar möglich mount --bind(oder mount -o bind) den übergeordneten Ordner ( dies ist der entscheidende Teil ) eines bind-mount an anderer Stelle und Zugriff dadurch den ursprünglichen Inhalt. Also für meinen Beispielfall, anstatt zu versuchen:

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

(dh die bereits gebundenen Stellen an anderer Stelle einhängen) Ich musste:

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

Das hat Patrick in seinem Kommentar gemeint

Sofern Sie nicht über /(root) erneut einsteigen , sollte diese Antwort einwandfrei funktionieren.

Solange Sie einen übergeordneten Ordner für den eingebundenen Speicherort haben, funktioniert dies, wenn auch mit einer Indirektion, wie oben gezeigt. Wenn Sie etwas überbinden, haben /Sie Pech, da es keinen übergeordneten Ordner für gibt /.

0xC0000022L
quelle
Das Mounten des übergeordneten Ordners war der Schlüsselteil, den ich vermisst habe. Vielen Dank.
Aidan
1

Sie können die Halterung an einen neuen Ort verschieben, ohne sie abzumelden. Verwenden Sie dazu mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
Michael Mrozek
quelle
1
Danke Michael. Dies hat den gleichen Nachteil, dass / home für andere Benutzer nicht zugänglich ist.
Janus