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


32

На моєму безголовому NAS я встановив 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

Я намагався досягти чогось подібного, але відповідь ефемія не пояснила семантику методу. Не вдалося мені, тому я раніше на 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?

Рішення

На підставі коментаря коментаря Патріка на моє запитання та рішення 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), ця відповідь повинна працювати добре.

Поки у вас є батьківська папка для місця, встановленого для прив’язки, вона буде працювати, хоча і з одним непрямим способом, як показано вище. Якщо ви щось підкріпили, /вам не пощастило, оскільки для батьків немає папки /.


Монтаж батьківської папки був ключовою частиною, яку я бракував. Спасибі.
помічник

1

Ви можете перенести кріплення на нове місце, не відключаючи його, використовуючи mount --move:

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

1
Дякую Майклу. Це той самий недолік, що робить / недоступним для інших користувачів.
Янус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.