Что такое…

Что такое точка монтирования — и куда пропадают файлы, хотя их никто не удалял

Иллюстрация: в ветку большого дерева вставляют светящийся диск, как картридж, а под ним прячутся старые листья

Вот что однажды случается почти с каждым. В папке лежали файлы. Ты подключил к этой папке диск. Файлы исчезли. Никто ничего не удалял.

А потом отключаешь диск — и они снова на месте. Целые, нетронутые.

Это не магия и не сбой. Так работает точка монтирования. Разберёшься в ней — и заодно поймёшь, почему Docker иногда «теряет» твои node_modules.

Что такое точка монтирования

На Windows у каждого диска своя буква: C:, D:, флешка — E:. Это несколько отдельных деревьев папок.

В Linux и macOS дерево одно. Оно начинается с корня /. Новый диск не получает букву — его прикрепляют к какой-то папке внутри этого дерева. Эта папка и называется точкой монтирования.

Подключил флешку — она появилась, например, как /media/usb. Зашёл в эту папку — ты уже на флешке. Вышел на уровень выше — снова на основном диске. Граница невидима: обычные cd и ls, никаких букв.

Посмотреть, что куда прикреплено:

df -h       # диски, их размер и точки монтирования
findmnt     # то же деревом
df -h .     # на каком диске ты прямо сейчас

Последняя команда — самая полезная. Она отвечает на вопрос «а куда на самом деле пишутся мои файлы?»

Куда пропадают файлы

Теперь загадка из начала. Папка /data была обычной, и в ней лежал old.txt. Потом к ней примонтировали диск.

Монтирование не удаляет и не смешивает. Оно накрывает папку сверху, как крышка. Пока диск прикреплён, ты видишь только его содержимое. Старый old.txt никуда не делся — он лежит под крышкой, на основном диске, просто до него не добраться.

Проверить легко:

umount /data
ls /data      # old.txt снова тут

У этого есть неприятная сторона. Допустим, диск с бэкапами не подключился после перезагрузки. Скрипт ничего не заметил и записал бэкапы в пустую папку — то есть на системный диск. Место кончилось, сервер встал. Отсюда классика из статьи про ошибку No space left on device: df говорит, что занято всё, а du по папкам ничего крупного не находит. Иногда лишнее спрятано именно под точкой монтирования.

Почему Docker теряет node_modules

Это тот же механизм — и самая частая встреча с ним у новичков. В Docker есть флаг -v: подключить папку с твоего компьютера внутрь контейнера.

docker run -v "$PWD":/app my-app

В образе при сборке уже были /app/node_modules. Но ты примонтировал свою папку проекта поверх /app. Крышка легла сверху. Внутри контейнера теперь видна твоя папка — а в ней node_modules нет или они собраны под другую систему.

Результат: Error: Cannot find module 'express'. Хотя в образе модуль точно был.

Лечится ещё одной точкой монтирования, специально для этой подпапки:

docker run -v "$PWD":/app -v /app/node_modules my-app

Второй -v без левой части создаёт отдельный том для node_modules. Он ложится поверх твоей папки и возвращает модули из образа. В docker-compose.yml это одна строчка - /app/node_modules в списке volumes.

Как примонтировать диск самому

Допустим, ты купил к VPS дополнительный диск. Вот весь путь:

lsblk                        # найди новый диск, например sdb
sudo mkfs.ext4 /dev/sdb      # только для НОВОГО пустого диска: сотрёт всё
sudo mkdir /mnt/data         # пустая папка — будущая точка монтирования
sudo mount /dev/sdb /mnt/data
df -h /mnt/data              # проверка: размер должен быть от нового диска

После перезагрузки диск отвалится, если не прописать его в /etc/fstab. Узнай его постоянный UUID командой sudo blkid /dev/sdb и добавь строку:

UUID=твой-uuid  /mnt/data  ext4  defaults,nofail  0  2

nofail важен: без него сервер с отвалившимся диском может не загрузиться вовсе. А чтобы не повторить историю с бэкапами на системный диск, скрипт перед записью может проверить mountpoint -q /mnt/data || exit 1 — команда молча завершится, если диск не на месте.

Где ещё ты это встретишь

  • WSL на Windows. Диск C: внутри Linux живёт по адресу /mnt/c — это точка монтирования. Проект в /mnt/c/Users/... работает заметно медленнее: каждый файл ходит через мостик между системами. npm install и сборки держи в домашней папке Linux, ~/projects.
  • Серверы и облака. Дополнительный диск у VPS сам не появляется. Его монтируют в папку вроде /mnt/data, а чтобы он подключался после перезагрузки — прописывают в /etc/fstab.
  • Временная память. На Fedora, Arch и свежих Debian /tmp — точка монтирования для «диска» в оперативной памяти. Всё, что там лежит, исчезает после перезагрузки.
  • Mac. Внешние диски появляются в /Volumes/Имя — та же идея, просто другая папка.

Можно ли примонтировать диск в папку, где уже есть файлы?

Можно, система не запретит. Но старые файлы спрячутся под диском, пока ты его не отключишь. Поэтому для монтирования обычно берут пустую папку.

Чем точка монтирования отличается от ярлыка?

Ярлык — это файл-указатель на другое место, его можно удалить. Точка монтирования — обычная папка, к которой система прикрепила целую файловую систему. Внутри неё ты уже физически на другом диске. Похожая путаница бывает с жёсткими ссылками — там у одного файла несколько имён, а здесь у папки подменяется содержимое.

Что будет, если вынуть флешку без отключения?

Часть данных могла ещё не записаться: система копит запись в памяти и сбрасывает пачками. Команда umount или «Извлечь» дожидается записи, поэтому файлы приходят целыми.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →