Как монтировать контейнер объектного хранилища в Linux

Как монтировать контейнер объектного хранилища в Linux

Показываем, как примонтировать контейнер объектного хранилища на сервер с ОС Ubuntu с помощью инструмента s3fs, а также настроить автоматическое монтирование через fstab.

Объектное хранилище предлагает удобный и масштабируемый способ хранения больших объемов данных, обеспечивая при этом высокий уровень защиты.

Для работы с ним существует ряд инструментов и библиотек, которые облегчают управление и взаимодействие с данными. В этой инструкции мы рассмотрим монтирование контейнера объектного хранилища через утилиту s3fs и настроим автоматическое монтирование при запуске системы через файл fstab.

Что такое утилита s3fs и как она работает

Утилита s3fs — это инструмент, который позволяет через модуль FUSE использовать объектное хранилище как файловую систему на операционных системах Linux.

С помощью s3fs вы можете создать точку монтирования, которая будет связывать содержимое объектного хранилища с файловой системой вашего сервера. Таким образом, вы сможете обращаться к данным хранилища с помощью привычных команд, например, ls, cp, mv и других.

У s3fs есть и недостатки, которые исходят из принципа работы утилиты. Объектное хранилище представляет собой плоскую неиерархическую структуру хранения данных. Для преобразования такой структуры к виду файловой системы s3fs эмулирует ее поверх объектного хранилища. Это означает, что инструмент создает абстракцию файловой системы — интерфейс, с помощью которого вы можете взаимодействовать с хранилищем через стандартные операции. Кроме того, при каждой операции требуется дополнительная обработка и преобразование данных.

Передача больших по объему данных через s3fs выполняется медленнее, чем при использовании нативных инструментов. Следовательно, внесенные изменения будут отображаться с задержкой. Это может привести к потенциальным проблемам с поддержанием согласованности данных в распределенной среде.

Дисклеймер
Мы написали этот текст в апреле 2024, но инструменты и технологии могут меняться. На такой случай у нас есть актуальная документация с инструкцией по работе s3fs.

Как монтировать контейнер объектного хранилища в Linux

Рассмотрим на практике, как примонтировать контейнер к серверу.

Для работы нам понадобятся:

  • контейнер в объектном хранилище;
  • сервисный пользователь;
  • S3-ключи для авторизации;
  • сервер с ОС Linux, в нашем случае будем использовать Ubuntu.

Теперь подготовим все необходимые компоненты.

Создаем контейнер

Авторизуемся в панели управления my.selectel.ru и переходим в раздел Объектное хранилище. Затем создаем контейнер по кнопке Создать контейнер.

Кнопка создания контейнера.

Указываем параметры контейнера.

  • Имя: название латинскими буквами с нижним регистром.
  • Тип: публичный.
  • Класс хранения: стандартное хранение.
  • Адресация: Virtual-Hosted адресация позволяет использовать CORS. Если данный параметр активировать, то его больше нельзя отключить. Включается на ваше усмотрение.

И кликаем по кнопке Создать контейнер.

Форма, которую нужно заполнить при создании контейнера.

Добавляем сервисного пользователя

Сервисный пользователь — это пользователь с учетной записью для программного доступа к продукту через API и другие инструменты автоматизации.

Чтобы его создать, переходим в раздел Управление доступом, подраздел Управление пользователями. Открываем вкладку Сервисные пользователи и нажимаем на кнопку Добавить пользователя.

Кнопка добавления сервисного пользователя.

В параметрах при добавлении пользователя указываем роль Администратор объектного хранилища и проект облачной платформы, в котором находится наш контейнер. И в конце нажимаем на кнопку Добавить пользователя.

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

Выдаем S3-ключи системному пользователю

Кликаем по имени пользователя, в нашем случае user, и переходим в его карточку.

Имя пользователя.

Для выдачи S3-ключа нажимаем кнопку Добавить ключ в разделе S3 ключи.

Кнопка добавления ключа.

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

Кнопка генерации ключа.

В открывшемся окне вы увидите значения:

  • Access key — Access Key ID, идентификатор ключа;
  • Secret key — Secret Access Key, секретный ключ.

Обязательно сохраните значения созданного ключа, потому что после закрытия окна вы не сможете больше увидеть значение Secret key. В рамках панели управления будет отображаться только наименование ключа, проект, которому он принадлежит, и значение Access key.

Монтируем контейнер через утилиту s3fs

Для начала устанавливаем утилиту s3fs командой:


    sudo apt-get install s3fs

Далее создаем файл с данными для авторизации в домашней директории:


    echo "<accessKeyId>:<secretAccessKey>" > .passwd-s3fs

Замените accessKeyId и secretAccessKey на ваши данные для авторизации, которые мы получали ранее через панель управления.

Теперь необходимо убедиться, что файл имеет ограниченные права доступа, для обеспечения безопасности ваших учетных данных:


    chmod 600 ~/.passwd-s3fs

Создаем пустую директорию, которая будет использоваться для монтирования контейнера:


    mkdir ~/s3fs

Монтируем контейнер командой:


    s3fs <наименование_контейнера> <путь_к_каталогу монтирования> -o allow_other -o passwd_file=<путь_файлу_с_данными_авторизации> -o use_path_request_style -o endpoint=<регион> -o url=https://s3.ru-1.storage.selcloud.ru

Рассмотрим более подробно используемые опции инструмента s3fs.

-o allow_other — разрешает доступ другим пользователям к смонтированной файловой системе S3. По умолчанию она доступна только для пользователя, который выполнил монтирование.

-o use_path_request_style — указывает стиль запроса к контейнеру. По умолчанию s3fs использует virtual-hosted style для формирования запросов к объектам. Данный метод подразумевает URL-запроса вида: <container_name>.s3.ru-1.storage.selcloud.ru. В нашем случае мы используем стиль path-style, при котором запросы к объектам выполняются без указания наименования контейнера в начале URL.

Теперь подставим в команду наши данные:


    s3fs name ~/s3fs -o allow_other -o passwd_file=~/.passwd-s3fs -o use_path_request_style -o endpoint=ru-1 -o url=https://s3.ru-1.storage.selcloud.ru

После выполнения команды ваш контейнер будет примонтирован в папку s3fs.

Теперь в примонтированной папке вы можете работать с объектами (файлами) контейнера в формате файловой системы.

Как проверить работоспособность примонтированного контейнера

Загружаем файлы через графический интерфейс

Через панель управления загрузим в наш контейнер несколько файлов и проверим, корректно ли они отображаются на сервере, где у нас примонтирован контейнер.

Для этого переходим в ранее созданный нами контейнер и добавляем файлы по кнопке Выберите файлы для загрузки.

Кнопка загрузки файлов.

Дополнительно создаем папку по кнопке Создать папку и загружаем в нее файл, как мы это делали ранее.

Кнопка создания папки.

Переходим в консоль сервера, где у нас примонтирован контейнер, и проверяем загруженные файлы командой:


    ls <наименование_точки_ монтирования>

В выводе наблюдаем файлы и папку, которые мы создали через панель управления:

Имена файлов и папки в выводе.

Загружаем файлы через консоль

Для дополнительной проверки создаем файл file.txt в папке контейнера test командой:

touch s3fs/test/file.txt

Переходим в панель управления и проверяем содержимое папки test:

Содержимое папки test.

Отлично! Созданный файл отображается корректно.

Как автоматизировать монтирование контейнера

При перезагрузке сервера наш контейнер будет автоматически размонтирован и его придется снова монтировать вручную. Для автоматизации монтирования изменим файл fstab.

fstab (File System Table) — это файл в Linux-системах, содержащий информацию о файловых системах, которые должны быть монтированы при загрузке системы.

Каждый раздел в файле описывается с новой строки по следующему шаблону:


    <устройство>   <точка_монтирования>   <файловая_система>   <опции>   <резервная_ копия>   <порядок_проверки>

<устройство> — источник файловой системы, который нужно примонтировать. Для монтирования контейнера с помощью s3fs, формат <устройства> выглядит следующим образом: s3fs#bucket-name.

  • s3fs — это тип файловой системы, который указывает на использование s3fs для монтирования контейнера.
  • bucket-name — это наименование контейнера, который необходимо примонтировать.

<точка_монтирования> — путь к директории, где будет примонтирован контейнер.

<файловая_система> — тип файловой системы. В нашем случае мы указываем значение fuse, так как s3fs является примером FUSE-модуля.

<опции> — дополнительные параметры монтирования.

<резервная_ копия> — параметр, который указывает, требуется ли создавать резервную копию раздела: 

  • 0 — резервная копия не требуется;
  • 1 — резервная копия требуется.

<порядок_проверки> — определяет последовательность, в которой операционная система проверяет файловые системы при загрузке: 

  • 0 — файловая система не проверяется при загрузке системы;
  • 1 — файловая система будет проверена в первую очередь;
  • 2 — файловая система проверяется после файловых систем с меньшим значением pass. Значение pass определяет порядок проверки файловых систем при загрузке системы.

Мы добавляем в конфигурационный файл следующую строку:


    s3fs#<наименование_контейнера> <путь_к_каталогу монтирования> fuse allow_other,nonempty,passwd_file=<путь_к_файлу_с_данными_авторизации>,use_path_request_style,endpoint=<регион>,url=https://s3.ru-1.storage.selcloud.ru 0 0

Подставляем данные, которые использовали ранее:


    s3fs#name /root/s3fs fuse allow_other,nonempty,passwd_file=/root/.passwd-s3fs,use_path_request_style,endpoint=ru-1,url=https://s3.ru-1.storage.selcloud.ru 0 0

Теперь открываем файл fstab с помощью редактора nano:


    nano /etc/fstab

Добавляем подготовленную информацию о монтировании в файл, после выходим из редактора сочетанием клавиш Ctrl + X. Соглашаемся на сохранение файла, нажав на клавишу Y. И подтверждаем изменения в fstab клавишей Enter.

Готово! Теперь при перезагрузке системы наш контейнер будет монтироваться автоматически.