Доступ к оригинальному содержимому точки монтирования


32

На моем безголовом сетевом sdf1накопителе (флеш-карта) смонтирована, как /и /homeпримонтирована lv00(том LVM, поддерживаемый программным RAID). Чтобы получить доступ к машине при сбое RAID, у меня есть копия моего открытого ключа ssh и т. Д. В /home/foo/.sshфайловой системе из sdf1.
Для того, чтобы обновить файлы, которые скрыты конными /homeя обычно перемонтирования lv00в /mnt/home, делать то , что я должен делать, а затем перейти lv00обратно на место.
Есть ли способ добиться этого без размонтирования /home?

Ответы:


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

Пока вы используете --bind(в отличие от --rbind), вы получите клон горы без материала, смонтированного поверх него.


Отлично! Я играл с идеей mount --bind, но получил только некоторые замысловатые идеи, которые наверняка сломаются, когда мне это понадобится. Это делает именно то, что мне нужно, и даже может использоваться как постоянное крепление. Спасибо
Янус


Стоит ли редактировать этот ответ, чтобы включить тот факт, что вам необходимо связать-монтировать уровень выше каталога, который вы покрыли монтированием, как описано в другом ответе? В противном случае этот ответ лучше, потому что он короче и, следовательно, его легче читать!
Майкл Ферт

5

Я пытался добиться чего-то подобного, но ответ ephemient не объяснил семантику метода. Мне это не удалось, и поэтому я задал практически тот же вопрос ранее здесь, на unix.SE. После комментария я понял это самостоятельно и ответил на него. Это отредактированная версия моего ответа, чтобы вписаться в этот контекст здесь. Я удалил свой другой вопрос (и ответ) в пользу этого.

Вот что я пытался сделать:

Пример дела

кронштейны:

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

После монтирования у /меня есть папка /home/joeдля пользователя joe. Как только другое место будет смонтировано ( /data), у меня будет полный набор домашних папок, так что я привязываю их на место ( /data/home on /home). Там есть папка /data/home/joe, поэтому, если установка /dev/sdb1удалась, он получит содержимое /data/home/joe, в противном случае он вернется к /home/joe(вкл /dev/sda1!).

Когда это удастся, как я могу получить доступ к исходному содержимому /home/joe(вкл /dev/sda1!) Вместо того, чтобы привязать его к месту /data/home/joe?

Решение

На основании комментария Патрика по поводу моего вопроса и решения ephemient (принятый ответ здесь) я придумал следующее.

Это является , по- видимому возможно mount --bind(или mount -o bind) в родительской папке ( это важная часть ) в безвыходном смонтировать в другом месте и , таким образом , доступ к исходному содержанию. Так что для моего примера, вместо того, чтобы пытаться:

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

(т.е. смонтировать уже смонтированные привязки места в другом месте) мне пришлось:

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

Так вот что Патрик имел в виду в своем комментарии

Если вы не перемонтируете через /(root), этот ответ должен работать нормально.

Пока у вас есть родительская папка в доступном для привязки месте, она будет работать, хотя и с одним косвенным указанием, как показано выше. Если вы что-то монтируете на привязку, /вам не повезло, поскольку нет родительской папки для /.


Монтирование родительской папки было ключевой частью, которую мне не хватало. Спасибо.
aidan

1

Вы можете переместить крепление в новое место, не размонтируя его, используя mount --move:

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

1
Спасибо, Майкл. Это имеет тот же недостаток, что сделать / home недоступным для других пользователей.
Янус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.