Databases

Файловые хранилища

Файловое хранилище — система, отдающая данные в виде файлов и папок по протоколам NFS или SMB, в отличие от блочного и объектного хранения.

Что такое файловое хранилище

Файловое хранилище — способ хранить данные в привычной иерархии папок и файлов и отдавать их по сети через протоколы NFS или SMB. Клиент монтирует шару и работает с ней как с обычным диском: открывает файл, дописывает в середину, переименовывает, ставит права.

Слово «хранилище» в IT означает любую систему, которая хранит данные и отдаёт их по запросу. Отличаются такие системы тем, чем именно они оперируют — блоками, файлами или объектами.

Три модели хранения

Блочное Файловое Объектное
Единица Блок диска Файл в папке Объект в бакете
Доступ iSCSI, FC NFS, SMB HTTP, S3 API
Кто держит ФС Сервер-клиент Само хранилище ФС нет вообще
Изменить кусок Да Да Нет, только целиком
Совместный доступ Нужна кластерная ФС Из коробки Из коробки
Масштаб Ограничен массивом Миллионы файлов Миллиарды объектов
Типично для БД, диски ВМ Общие папки, домашние каталоги Бэкапы, медиа, датасеты

Практический выбор: под базу данных или диск виртуальной машины — блочное (СХД); под общие папки и legacy-приложения, которым нужен POSIX-доступ, — файловое (NAS); под всё, что пишется один раз и читается много, — object storage.

Как это выглядит

# NFS — стандарт в Unix-мире
sudo mount -t nfs 10.0.0.5:/export/shared /mnt/shared

# SMB — родной для Windows, работает и в Linux
sudo mount -t cifs //10.0.0.5/shared /mnt/shared -o username=user,vers=3.0

df -hT /mnt/shared

Что делает файловый доступ особенным — приложению не нужно ничего знать о сети. Оно вызывает обычный open() и write(), а сетевую работу берёт на себя ядро. Именно поэтому файловые шары до сих пор живы: под них написаны миллионы приложений, которые не умеют в S3.

Обратная сторона: сетевая ФС притворяется локальной, но ведёт себя иначе. Блокировки поверх NFS ненадёжны, задержка на порядки выше, а обрыв сети приложение видит не как ошибку сети, а как зависший write(). Отсюда правило: SQLite и любые БД на сетевой шаре — гарантированные повреждения данных.

Что такое файлообменник

Файлообменник — сервис для передачи файлов между людьми: загружаете файл, получаете ссылку, отправляете её адресату. От файлового хранилища отличается назначением: хранилище — рабочее место для данных, файлообменник — способ доставить файл тому, у кого нет доступа к вашей инфраструктуре.

Типовые сценарии — отправить макет заказчику, передать архив логов в поддержку, поделиться видео, которое не проходит по размеру через почту.

Свой файлообменник поднимают, когда файлы содержат персональные данные или коммерческую тайну и публичные сервисы неприемлемы. Практичные варианты self-hosted: Nextcloud (полноценное облако с синхронизацией и правами), PsiTransfer или Send (одноразовые ссылки со сроком жизни), либо просто MinIO с presigned-ссылками — временными URL, действующими заданное число часов.

Что важно, если поднимаете сами: срок жизни ссылок и автоудаление, лимит на размер, шифрование канала (TLS), защита от превращения сервиса в бесплатный хостинг для чужого контента. Публичный аплоад без ограничений находят и заполняют быстро.

Синхронизация и облачные диски

Отдельный класс — сервисы вроде Nextcloud, Dropbox, Яндекс.Диск: файлы лежат на сервере и синхронизируются с папками на устройствах. Технически это надстройка над object storage или файловым хранилищем, добавляющая версионирование, шаринг по ссылке и клиентов синхронизации.

Nextcloud — стандартный self-hosted вариант: ставится на VPS, хранит файлы на диске сервера или в S3-совместимом бэкенде, метаданные — в PostgreSQL или MySQL.

Практика

  • Файловая шара — не бэкап. Удалённый файл удаляется у всех. Нужны снапшоты или отдельное резервное копирование.
  • Сеть — узкое место. 1 GbE упирается примерно в 110 МБ/с независимо от скорости дисков.
  • Права проверяются на стороне хранилища. Владелец файла на NFS определяется числовым UID, и одинаковый UID на разных машинах может означать разных людей.
  • Миллионы мелких файлов — тяжёлый шаблон для файловых систем; там, где такое ожидается, объектное хранилище масштабируется лучше.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер