Чому жорсткі посилання дійсні лише в одній файловій системі?


22

Я читаю це вступ до командного рядка Марка Бейтса.

У першій главі він зазначає, що жорсткі посилання не можуть охоплювати файлові системи.

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

Я знаю лише одну файлову систему. Той, що починається від root ( /). Це твердження про те, що жорсткі посилання не можуть охоплювати файлові системи, для мене не має сенсу.

Стаття Вікіпедії про файлові системи Unix теж не корисна.

Відповіді:


29

Сподіваюся, я можу відповісти на це способом, який має для вас сенс. Файлова система в Linux, як правило, складається з розділу, форматованого одним із різних способів (треба любити вибір!), На який ви зберігаєте свої файли. Будь то ваші системні файли чи ваші особисті файли ... всі вони зберігаються у файловій системі. Ця частина ви, здається, розумієте.

Але що робити, якщо ви розділите свій жорсткий диск, щоб він мав декілька розділів (думаю, Apple Pie розрізали на шматки) або додали додатковий жорсткий диск (можливо, USB-накопичувач?). Заради аргументів усі вони також мають файлові системи.

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

image.jpg             image2.jpg
          \           /
           [your data]

тут, зображення image.jpg та image2.jpg вказують безпосередньо на ваші дані. Вони обидва жорсткі посилання. Однак ...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

У цьому (грубому) прикладі image2.jpg не вказує на ваші дані, він вказує на image.jpg ..., що є посиланням на ваші дані.

Символічні посилання можуть працювати через межі файлової системи (якщо припустити, що файлова система приєднана та змонтована, як і ваша USB-палка). Однак жорстке посилання не може. Він нічого не знає про те, що є у вашій іншій файловій системі або де зберігаються ваші дані.

Сподіваємось, це допомагає мати кращий сенс.


Спасибі. Я не розумів, що різні розділи файлів називаються "файлові системи".
Антон Парас

1
Одне з речей, які ви можете зробити з розділом, - це розмістити на ньому файлову систему, є інші місця, куди можна поставити файлові системи та інші речі, які ви можете зробити з розділами, але найпоширеніший варіант - це той.
Ясен

10
Є одна ієрархія файлів, яка починається з "/". Він буде мати один або кілька файлових систем встановлені
mpez0

@ mpez0: Навіть, наприклад, з chroot(2)реальною контейнерами ви можете мати кілька ієрархій, які можуть не мати нічого спільного між собою.
Кевін

@Kevin, chrootвиділяє частину ієрархії для процесу та його нащадків, але батько все ще має один повний ієрарх. Контейнеризація може це робити, залежно від того, наскільки він близький до VM. Але скільки деталей може упакувати один коментар? Дякую,
mpez0

23

Файлова система складається з структури каталогів , складеної для записів каталогу для організації файлів. Кожен запис каталогу асоціює ім'я файлу з inode .

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

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

Різниця між м'якою та жорсткою

Висновок:

Оскільки inode - це структура даних, яка використовується для представлення об'єкта файлової системи, вона є внутрішньою для Файлової системи, і ви не можете вказати на inode іншої файлової системи.

Таким чином, жорсткі посилання дійсні лише в одній файловій системі, але м'які посилання (Symbolic link) можуть охоплювати файлові системи, оскільки вони просто вказують на інший запис каталогу (інтерфейс файлової системи, а не внутрішній об'єкт).


1
Приємна стисла відповідь.
дубкат

Що буде, якщо інша файлова система (скажімо, USB) матиме файл із тим самим NAME, до якого у нашій файловій системі підключено наше символічне посилання?
Йозеф Климук

@JosefKlimuk, м'яке посилання вказувало б на шлях, скажімо /mnt/myfile. Якщо ви монтуєте іншу файлову систему в /mnt/. М'яке посилання вирішиться для запису змонтованої файлової системи під /mnt/. Таким чином, якщо ви встановили файлову систему зі свого пристрою USB /mnt, м'яке посилання вирішило б запис у цій файловій системі.
Факундо Віктор

2

Коренева файлова система може складатися з декількох файлових систем; /usr/localможе бути встановлений на окремому розділі і /homeможе бути на іншому розділі на мережевому диску десь в іншому місці. У цьому випадку жорстке посилання для /usr/local/bin/git(наприклад) може не створюватися поза /usr/local, оскільки воно охоплюватиме файлові системи .

Причиною цього є те, що вставки виділяються окремо для /, /usr/localі /home(знову ж таки, у цьому прикладі), і коли ви створюєте жорстке посилання, ви дійсно просто вкажете додаткову назву для inode.


2

Жорсткі зв’язки призводять до збереження цілі в живих. Поки будь-яке жорстке посилання доступне, система забезпечить, щоб його ціль не могла бути звільнена. Тому необхідно, щоб усі носії інформації, які могли містити жорсткі посилання на певний inode, монтувалися в будь-який час, коли система намагатиметься визначити, чи існують якісь посилання на неї.

Зважаючи на те, що час роботи inode зазвичай визначається підтримкою підрахунків посилань, а не скануванням посилань, можливо, можна організувати речі для того, щоб дві або більше файлових систем, що містили посилання один на одного, могли використовуватися незалежно, якщо не було необхідності використовувати посилання, які з'єднані між системами та за умови, що не потрібно використовувати fsck ні на одній. Однак якщо кількість ідей в одній із систем порушилася, єдиним способом зробити цю систему знову корисною було б використовувати форму операції fsck, яка могла б сканувати обидві файлові системи на предмет посилань. Через це обмеження, хоча, можливо, можна дозволити двом взаємопов’язаним файловим системам використовуватись незалежно, переваги від цього, ймовірно, будуть занадто обмеженими, щоб зробити його корисним.


Хороший момент, але трохи надто дотичний, щоб бути гарною відповіддю.
Джо

@Joe: Дозвіл жорстких посилань на міжфайлові системи спричинив би ряд технічних труднощів, але більшість з них можна було б подолати, таким чином поставивши питання про те, чи є якась вагома причина, чому вони не повинні бути. Проблема, що зберігається в живих, може здатися незрозумілою, але на відміну від інших питань, вона може бути вирішена лише через встановлення суворих смислових обмежень щодо використання таких посилань, що суттєво обмежить їх значення.
supercat

Влучне зауваження. Файлову систему можна встановити на іншому пристрої та змінити, щоб вклад і посилання могли «вийти з синхронізації». Кожна файлова система може мати GUID, і посилання може включати в себе цей GUID для відстеження inode у файлових системах. Також на FS може бути якийсь журнал, і тоді, коли він встановлений, хост-системі не потрібно буде його сканувати, але він може просто прочитати журнал і "наздогнати" зміни в inode, що пов'язують зміни (Коли ми його очистимо, хоч?). Підсумковий рядок є базовим FS, який повинен бути змінений нетривіальними способами, і він працюватиме лише в сумісних файлових системах.
Рольф

1

Одне число inode використовується для представлення файлу в кожній файловій системі. Всі жорсткі посилання, засновані на номері inode. Посилання на файлову систему тут .

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