Яка різниця між:
ln -s /mnt/extra/home /
і
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
вже встановлений каталог
Яка різниця між:
ln -s /mnt/extra/home /
і
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
вже встановлений каталог
Відповіді:
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
потрібна файлова система, що записується, на якій можна створити симпосилання.
ln -s
модифікує файлову систему, а mount --rbind
не. Це означає, що ви можете змонтувати домашній каталог на корені, доступному лише для читання (наприклад, завантажувальному компакт-диску), але не можете зробити символічне посилання на нього.
--bind
і --rbind
мені не байдуже, чи мої цільові каталоги порожні, вони просто кріпляться "на вершині" будь-яких файлів, що залишаються, залишаючи їх недоступними
У цьому випадку як прив'язка, так і символічне посилання працюватимуть однаково для більшості цілей, але вони мають важливі відмінності.
Символічне посилання трохи легше. Ви можете мати сотні чи тисячі символічних посилань, не будучи великою проблемою управління. Вони сидять у файловій системі, а не вимагають спеціальних налаштувань на системному рівні.
Символічні посилання можна створити резервну копію та скопіювати правильно такими інструментами, як cp та rsync. Тобто інструменти можуть розпізнавати та копіювати символічне посилання, гарантуючи, що при відновленні десь ще посилання буде відновлено та вказує на правильне місце призначення. За замовчуванням все буде працювати «правильно». На відміну від цього, під час резервного копіювання або копіювання прив’язки до кріплення кріплення буде оброблено прозоро, що призведе до копіювання самих файлів, що може призвести до дублювання, якщо ви також отримаєте ті самі файли в їх іншому місці та вимагати додаткової роботи, якщо ви хочете копіювати кріплення прив’язки в пункті призначення.
Символічні посилання можуть бути змінені або видалені будь-яким користувачем, який має доступ до посилання, тому легко зробити це лише суперпользователем або відкрити його певному користувачеві. Кріплення для прив'язки може встановлюватися або змінюватися тільки суперрусером.
Якщо це звучить як світиться схвалення символічних посилань, це так. Вони є більш простим способом зв’язку між файлами та каталогами. Ви використовуєте кріплення для прив'язки лише для ситуацій, коли символічне посилання не працює, що може бути менше, ніж ви думаєте. Більшість інструментів, включаючи засоби резервного копіювання та синхронізації, мають розумну поведінку за замовчуванням для символічних посилань і їх обробка символічних посилань може бути налаштована. Кріплення прив'язки прозоре до таких інструментів, тому ви втрачаєте таку гнучкість та втрачаєте розумну поведінку (наприклад, як було сказано вище, дублювання каталогів у ваших резервних копіях).
Ще одна відмінність полягає в тому, що символічне посилання є символічним , тобто воно просто посилається на шлях - рядок символів, і він відновлюється щоразу, коли ви відкриваєте підкаталог / файл у цільовому шляху. На відміну від цього, він mount --rbind
поводиться більше як жорстке посилання, для якого шлях не оцінюється повторно при кожній дереференції.
Це змінює деякі сценарії, як chroot
. Наприклад, vsftpd chroot
s в домашній каталог облікового запису користувача FTP, на який ви входите. Таким чином, якщо ви введете символьне посилання в цей каталог, vsftpd
його не вдасться знешкодити, і, отже, ціль не буде доступна через FTP. Якщо ви замість цього зробите mount --rbind
, тоді vsftpd
ви просто отримаєте доступ до цього піддерева, як ніби він насправді був там, аналогічно, як коли б ви жорстко пов’язали файл.
ln
робить зв’язки; зокрема,ln -s
робить символічні зв’язки.mount
монтує файлову систему в каталог. Вони не мають нічого спільного.