1

Я хотел бы попросить помощи сообщества в понимании * nix-концепции "точек монтирования" в сравнении с папками. Я пытался сделать фоновое чтение, такое как это, это, и это, среди прочего, но концепция все еще неясна для меня. Я постараюсь задать этот вопрос так, чтобы он не был дубликатом первой ссылки.

Раскрытие информации: мой компьютерный фундамент почти полностью находился в среде DOS/Windows, что, вероятно, способствовало тому, что мне было трудно это понять.

Первый вопрос: что такое точка монтирования? (Я читал различные объяснения того, что это такое, может быть, то, что приведено в ответ на это, будет иметь значение).

Я бы тоже хотел поработать с конкретным примером. Следующий вывод из коробки Linux, с которой я работаю:

>df -k
Filesystem                        1K-blocks      Used Available Use% Mounted on
/dev/mapper/fedora_localhost-root 239727136 215317088  12209500  95% /
devtmpfs                            8145236         0   8145236   0% /dev
tmpfs                               8166384       160   8166224   1% /dev/shm
tmpfs                               8166384       796   8165588   1% /run
tmpfs                               8166384         0   8166384   0% /sys/fs/cgroup
tmpfs                               8166384        76   8166308   1% /tmp
/dev/sda1                            487652    150127    307829  33% /boot

>ls -l /dev/mapper/fedora_localhost-root 
lrwxrwxrwx 1 root root 7 Jan  3 18:12 /dev/mapper/fedora_localhost-root -> ../dm-0

>ls -l /dev/dm-0
brw-rw---- 1 root disk 253, 0 Jan  3 18:12 /dev/dm-0

Позвольте мне попытаться выразить словами моё слабое понимание, и, возможно, ответчики смогут понять и исправить мои недоразумения.

Из моих чтений я думаю , что Linux «делает физические устройства, такие как жесткие диски, доступными как« блочные устройства », которые выглядят как файлы, расположенные где-то в /dev», например /dev/dm-0 . Это правильно?

Из моих чтений я понимаю, что "точка монтирования" подобна "верхнему каталогу" данного раздела, что-то вроде C:\ или D:\ в терминологии DOS. Это правильно?

Одна вещь, которую я не понимаю, тогда: мой пример показывает /dev/dm-0 "смонтированный на" / . Но разве не / самый верхний каталог? Я имею в виду, что каждая доступная папка обязательно является какой-то подпапкой / не так ли? Например, /home , /var и т.д. Все ли папки находятся "под" / потому что они имеют префикс / , верно? Я имею в виду следующее: если мое понимание того, что "точка монтирования подобна самой верхней директории данного раздела", верно, как вы могли бы иметь более одной точки монтирования, поскольку самая верхняя точка монтирования / уже используется вверх?

Относится к вышеприведенному абзацу: /dev/dm-0 сама является подпапкой / . Так что мне непонятно, как точка монтирования / может быть точкой входа во что-то, что является ее собственной подпапкой? Что-то кажется мне круглым, и я этого не понимаю.

Наконец, кто-то может объяснить разницу между точкой монтирования и подпапкой? Одна из статей, которые я прочитал, говорит, что / , /home и /boot - это точки монтирования. Так в чем же разница между /home и точкой монтирования по сравнению с тем, что я выполнил mkdir /home?

Спасибо за любую помощь. Я все ошеломлен и смущен этим.

4 ответа4

4

Windows также поддерживает точки монтирования дисков (Microsoft называет их "точками повторной обработки", но концепция такая же). Поскольку вы более знакомы с Windows, чем с операционными системами * NIX, вот небольшой эксперимент, который вы можете выполнить в Windows, чтобы помочь вам понять концепцию:

  1. Вставьте флешку в ваш компьютер.
  2. Создайте новую пустую папку на рабочем столе.
  3. Откройте консоль управления дисками, щелкните правой кнопкой мыши флэш-диск и выберите « Change Drive Letters and Paths... диску».
  4. В появившемся диалоговом окне нажмите кнопку « Add... .
  5. Убедитесь, что выбрана кнопка Mount in the following empty NTFS folder: и найдите путь к той папке, которую вы создали на рабочем столе (например, C:\Users\<your profile>\Desktop\New Folder)
  6. Хит ОК и ОК. Теперь проверьте ваш рабочий стол. Вы увидите, что созданная папка имеет значок ярлыка диска:

Значок диска

Если вы посмотрите на это из окна командной строки, вы увидите его как тип объекта <JUNCTION> :

Обратите внимание, что ваша флешка теперь имеет две точки монтирования; E: (или что-то еще) и та папка, которую вы создали на шаге 2. Вы можете удалить букву диска, если хотите, и вы все равно сможете копировать файлы в / из нее через папку на рабочем столе. Вы даже можете добавить несколько букв дисков для него, если хотите. Вот что такое точка монтирования: это просто путь для доступа к вашим дискам / разделам.

В отличие от Linux, Windows представляет эту папку для вас как некий странный ярлык. Windows делает это, потому что точки монтирования - это немного странное понятие в мире Microsoft (отсюда твоя путаница). Они даже не работают должным образом во многих случаях. Но в операционных системах * NIX это просто так. Каталог может быть либо папкой, либо точкой монтирования в Linux, и в большинстве случаев различие между ними не имеет значения.

* В операционных системах NIX отсутствует понятие букв дисков. Ваша "корневая" файловая система (/) всегда находится наверху дерева и монтируется (обычно, но не всегда) как загрузочный диск вашей системы. Это то, что C:\ для Windows. Может быть только один корень (точно так же, как может быть только один диск C: :). Каждый другой диск или раздел в вашей системе должен быть подключен к пути (каталогу) под этим корнем. Итак, что будет D: или E: в Windows будет /mnt/D_Drive , /media/cdrom , или даже /var , /home , или что-то еще в Linux.


Теперь это важная вещь, и это большой источник вашего замешательства:
Узел устройства - это не то же самое, что точка монтирования. И в Windows, и в Linux есть узлы устройств. Разница в том, что Windows никогда не показывает их вам, и они не существуют в виде файлов на вашем жестком диске, как в Linux.

На приведенном выше снимке экрана командной строки вы заметите, что созданная вами папка указана как \??\Volume{GUID}\ . Как в Linux, так и в Windows исходное устройство само имеет узел устройства (например, /dev/sda1 в Linux или \??\Volume{GUID} в Windows). Точка монтирования - это файловая система на этом устройстве . В Windows вы можете рассматривать буквы дисков (например, E:\ ) как точки монтирования для ваших дисков / разделов. Разница лишь в том, что Windows никогда не показывает \??\Volume{GUID} узел устройства. Он только показывает вам точки монтирования, и эти точки монтирования почти всегда являются буквами дисков (но, как мы видим из эксперимента выше, это не обязательно).


Я надеюсь, что это прояснит для вас.

Теперь вернитесь в Управление дисками и удалите эту точку монтирования, прежде чем случайно сделать что-то глупое, например, попытаться скопировать / переместить куда-нибудь! :-)

3
Wrote this as a comment, realised I could expand it into a full blown answer.

Папки - это идея Windows, забудьте о них. Что касается каталогов, то в Linux все является файлом, и поэтому он может существовать в каталоге. Кроме того, в круговых ссылках нет ничего плохого, вы можете иметь ссылку в /link, которая идет на /; Linux позволяет это, принять это, двигаться дальше

Точка монтирования - это точка, к которой подключенное устройство доступно.

Ваш / 'root' никогда не двигается, он всегда / но все остальное может быть где угодно, где бы вы этого не хотели. (Существуют определенные стандарты, которые мы стараемся придерживаться, подробно изложенные в документации LSFH.)

Если у вас есть /, вы можете смонтировать другие устройства в этом «пространстве». Обычно у вас есть диск / файл подкачки, который существует по какому-то неясному пути, о котором заботится ядро

У вас может быть целый диск, выделенный для /home - так что это будет точка монтирования, а затем вы можете использовать /usr и /tmp на своих собственных дисках, каждый из которых также является точкой монтирования.

Вы можете вообразить, что физические устройства существуют вне /, а то, что находится в /dev, это просто воображаемые ярлыки, если это заставляет вас чувствовать себя лучше.

2

Общее правило: имея каталог, вы можете сделать его точкой монтирования, смонтировав что-нибудь в нем. Исходное содержимое каталога (если оно есть; рекомендуется использовать пустые каталоги для точек монтирования) теперь недоступно, потому что там наложена какая-то другая файловая система.

Например, если ваш жесткий диск был D:\ в Windows и там была папка D:\data\a1\ , вы можете смонтировать его под Linux в /mnt/foo/ и сразу же получить /mnt/foo/data/a1/ . Монтирование в /bar/baz/ вместо этого позволит вам получить доступ к тому же каталогу a1 что и /bar/baz/data/a1/ .

Подкаталог где-то внутри этой вновь смонтированной файловой системы (например, /bar/baz/data/a1/) может стать точкой монтирования для чего-то другого, если вы не хотите, здесь нет общих ограничений.

В начале у вас есть / доступны. Вы монтируете свою корневую файловую систему там. Он включает (среди прочего) несколько пустых каталогов, предназначенных для точек монтирования для других файловых систем. Таким образом, вы создаете дерево каталогов, перекрывая различные файловые системы в определенных точках монтирования в правильном порядке.

0

В Windows, когда у вас есть разные разделы или целые диски с файловой системой, которую распознает ОС, им присваивается буква диска (D:, E: и т.д.). В Unix у вас есть одна файловая система, которая монтируется как root, а остальные доступны через точки монтирования. После монтирования вы получаете доступ к диску как к папке корневой файловой системы. Папка точки монтирования должна существовать в корневой файловой системе, прежде чем вы смонтируете там другую файловую систему. Поскольку Unix стремится реализовать все как общее решение, вы можете смонтировать общий ресурс Windows, образ .iso или временную файловую систему (например, ramdrive DOS) в точке монтирования, и после монтирования он прозрачен для пользователя.

Примечание: я знаю, что это немного неточное описание, но именно так я и объяснил бы мне, когда я был пользователем Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .