Dostęp do oryginalnej zawartości punktu montowania

32

Na bezgłowym serwerze NAS mam sdf1(kartę flash) zamontowaną tak /, jak podczas /homemontowania z lv00(woluminu LVM wspieranego przez oprogramowanie RAID). Aby móc uzyskać dostęp do komputera w przypadku awarii RAID, mam kopię mojego klucza publicznego ssh itp. W /home/foo/.sshsystemie plików z sdf1.
Aby zaktualizować pliki, które są ukryte przez zamontowany /homenormalnie Remount lv00w /mnt/home, robić to, co muszę zrobić, a następnie przenieść lv00z powrotem na swoim miejscu.
Czy istnieje sposób na osiągnięcie tego bez odmontowywania /home?

Janus
źródło

Odpowiedzi:

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

Tak długo, jak używasz --bind(w przeciwieństwie do --rbind), dostajesz klon wierzchowca bez zamontowanych na nim elementów.

efemeryczny
źródło
Doskonały! Bawiłem się pomysłem mount --bind, ale dostałem tylko kilka zawiłych pomysłów, które z pewnością się załamią, gdy będę ich potrzebować. Robi dokładnie to, czego potrzebuję, a nawet może zostać zamontowany na stałe. Dzięki
Janus
Czy warto edytować tę odpowiedź, aby uwzględnić fakt, że musisz zamontować bindowanie na poziomie wyższym niż katalog, który masz zamontowany, tak jak opisano to w drugiej odpowiedzi? W przeciwnym razie odpowiedź jest lepsza, ponieważ jest krótsza, a zatem łatwiejsza do szybkiego czytania!
Michael Firth
5

Starałem się osiągnąć coś podobnego, ale ephemient odpowiedź „s nie wyjaśnić semantykę metody. Nie udało mi się, więc zadałem praktycznie to samo pytanie wcześniej tutaj na unix.SE. Po komentarzu sam to wymyśliłem i odpowiedziałem. To jest zredagowana wersja mojej odpowiedzi, która pasuje tutaj. Usunąłem moje inne pytanie (i odpowiedź) na korzyść tego.

Oto, co próbowałem zrobić:

Przykładowa skrzynka

Wierzchowce:

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

Po zamontowaniu /mam folder /home/joedla użytkownika joe. Gdy druga lokalizacja zostanie zamontowana ( /data), mam pełny zestaw folderów domowych, więc łączę je na miejscu ( /data/home on /home). Jest folder /data/home/joe, więc dopóki montaż się /dev/sdb1powiedzie, dostanie zawartość /data/home/joe, w przeciwnym razie spadnie do /home/joe(włączony /dev/sda1!).

Kiedy to się powiedzie, w jaki sposób mogę uzyskać dostęp do oryginalnej zawartości /home/joe(on /dev/sda1!) Zamiast tych, które są zamontowane na oprawach /data/home/joe?

Rozwiązanie

Opierając się na komentarzu Patryka na moje pytanie i rozwiązaniu autorstwa ephemient (przyjęto tutaj odpowiedź), wymyśliłem następujące.

To jest widocznie możliwe mount --bind(lub mount -o bind) do folderu nadrzędnego ( jest to kluczowa część ) z bind-zamontować w innym miejscu, a tym samym dostęp do oryginalnych treści. W moim przypadku zamiast próbować:

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

(tj. zamontować już zamontowane lokalizacje w innym miejscu) Musiałem:

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

To właśnie miał na myśli Patrick w swoim komentarzu

O ile nie zamykasz się ponownie /(root), ta odpowiedź powinna działać dobrze.

Tak długo, jak masz dostępny folder nadrzędny do lokalizacji podłączonej do wiązania, będzie on działał, choć z jedną pośrednią interwencją, jak pokazano powyżej. Jeśli coś połączysz, /nie masz szczęścia, ponieważ nie ma folderu nadrzędnego /.

0xC0000022L
źródło
Montaż folderu nadrzędnego był kluczową częścią, której mi brakowało. Dzięki.
aidan
1

Możesz przenieść wierzchowca w nowe miejsce bez odmontowywania go, używając mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
Michał Mrożek
źródło
1
Dzięki, Michael. Ma to tę samą wadę, że uniemożliwia dostęp do / home innym użytkownikom.
Janus