Intereting Posts

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

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

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

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

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

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

Я попытался добиться чего-то подобного, но ответ эгоизма не объяснил семантику метода. Мне это не удалось, и поэтому я задал практически тот же вопрос ранее на 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 ( on /dev/sda1 !).

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

Решение

Основываясь на комментарии комментария Патрика по моему вопросу и решению эфемерным (принятый ответ здесь), я придумал следующее.

По-видимому, возможно mount --bind mount -o bind ) к 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), этот ответ должен работать нормально.

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