Яка різниця між ln -s та mount --rbind?


8

Яка різниця між:

ln -s /mnt/extra/home /

і

mkdir /home
mount --rbind /mnt/extra/home /home

1
lnробить зв’язки; зокрема, ln -sробить символічні зв’язки. mountмонтує файлову систему в каталог. Вони не мають нічого спільного.
AlexP

Але mount --rbind /mnt/extra/homeвже встановлений каталог
NerdOfLinux

Поставте це як відповідь, і я
позначу

Відповіді:


13

mount --rbindробить рекурсивне прив'язування; тобто ієрархія файлової системи, встановлена ​​на /mnt/extra/home, також буде доступна через /home.

На практиці основна відмінність між ln -sрішенням і mount --rbindрішенням полягає в тому, що з ln -s /home- це симпосилання, а з mount --rbindним - каталог; це зачіпає такі інструменти , як find, df, test/ і [т.д.

Крім того, ln -sпомилка буде, якщо вона /homeіснує, тоді як mount --rbindне буде, якщо її немає або вона не є порожньою каталогом.

Коментар Марка нижче також важливий: ln -sпотрібна файлова система, що записується, на якій можна створити симпосилання.


7
Велика різниця в тому, що ln -sмодифікує файлову систему, а mount --rbindне. Це означає, що ви можете змонтувати домашній каталог на корені, доступному лише для читання (наприклад, завантажувальному компакт-диску), але не можете зробити символічне посилання на нього.
Марк

3
--bindі --rbindмені не байдуже, чи мої цільові каталоги порожні, вони просто кріпляться "на вершині" будь-яких файлів, що залишаються, залишаючи їх недоступними
Xen2050

7

У цьому випадку як прив'язка, так і символічне посилання працюватимуть однаково для більшості цілей, але вони мають важливі відмінності.

Символічне посилання трохи легше. Ви можете мати сотні чи тисячі символічних посилань, не будучи великою проблемою управління. Вони сидять у файловій системі, а не вимагають спеціальних налаштувань на системному рівні.

Символічні посилання можна створити резервну копію та скопіювати правильно такими інструментами, як cp та rsync. Тобто інструменти можуть розпізнавати та копіювати символічне посилання, гарантуючи, що при відновленні десь ще посилання буде відновлено та вказує на правильне місце призначення. За замовчуванням все буде працювати «правильно». На відміну від цього, під час резервного копіювання або копіювання прив’язки до кріплення кріплення буде оброблено прозоро, що призведе до копіювання самих файлів, що може призвести до дублювання, якщо ви також отримаєте ті самі файли в їх іншому місці та вимагати додаткової роботи, якщо ви хочете копіювати кріплення прив’язки в пункті призначення.

Символічні посилання можуть бути змінені або видалені будь-яким користувачем, який має доступ до посилання, тому легко зробити це лише суперпользователем або відкрити його певному користувачеві. Кріплення для прив'язки може встановлюватися або змінюватися тільки суперрусером.

Якщо це звучить як світиться схвалення символічних посилань, це так. Вони є більш простим способом зв’язку між файлами та каталогами. Ви використовуєте кріплення для прив'язки лише для ситуацій, коли символічне посилання не працює, що може бути менше, ніж ви думаєте. Більшість інструментів, включаючи засоби резервного копіювання та синхронізації, мають розумну поведінку за замовчуванням для символічних посилань і їх обробка символічних посилань може бути налаштована. Кріплення прив'язки прозоре до таких інструментів, тому ви втрачаєте таку гнучкість та втрачаєте розумну поведінку (наприклад, як було сказано вище, дублювання каталогів у ваших резервних копіях).


0

Ще одна відмінність полягає в тому, що символічне посилання є символічним , тобто воно просто посилається на шлях - рядок символів, і він відновлюється щоразу, коли ви відкриваєте підкаталог / файл у цільовому шляху. На відміну від цього, він mount --rbindповодиться більше як жорстке посилання, для якого шлях не оцінюється повторно при кожній дереференції.

Це змінює деякі сценарії, як chroot. Наприклад, vsftpd chroot s в домашній каталог облікового запису користувача FTP, на який ви входите. Таким чином, якщо ви введете символьне посилання в цей каталог, vsftpdйого не вдасться знешкодити, і, отже, ціль не буде доступна через FTP. Якщо ви замість цього зробите mount --rbind, тоді vsftpdви просто отримаєте доступ до цього піддерева, як ніби він насправді був там, аналогічно, як коли б ви жорстко пов’язали файл.

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