Как монтировать контейнер объектного хранилища в 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:
Отлично! Созданный файл отображается корректно.
Как автоматизировать монтирование контейнера
При перезагрузке сервера наш контейнер будет автоматически размонтирован и его придется снова монтировать вручную. Для автоматизации монтирования изменим файл 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.
Готово! Теперь при перезагрузке системы наш контейнер будет монтироваться автоматически.