Как монтировать контейнер объектного хранилища в Linux
В инструкции мы покажем, как использовать утилиту s3fs для монтирования контейнера объектного хранилища через FUSE.
Введение
В инструкции мы покажем, как использовать утилиту s3fs для монтирования контейнера объектного хранилища через FUSE.
Данное решение позволяет получить доступ к контейнеру объектного хранилища через локальную директорию в среде Linux. Если вы используете ОС Windows, обратитесь к этой инструкции.
Решение позволит увеличить дисковое пространство сервера с помощью объектного хранилища или использовать объектное хранилище для резервного копирования (например, с помощью утилиты rsync или программного обеспечения типа Bacula).
Объектное хранилище Selectel
Масштабируемое хранилище данных с поддержкой FTP и S3 API.
В инструкции в качестве ОС мы используем Ubuntu 18.04, но она будет актуальна и для ряда других популярных дистрибутивов Linux.
Ниже — видеоинструкция. Если вам нужно подробное описание по шагам, читайте дальше.
Создаем контейнер
В панели управления Selectel переходим в раздел Облачное хранилище и нажимаем Создать контейнер. Контейнер — это сущность, которая содержит объекты — файлы и папки с файлами.

Мы реализуем инструмент для резервного копирования, поэтому создаем приватный контейнер — в нем доступ к данным нужно будет получать по логину/паролю или авторизационному токену.
Вводим имя контейнера — в данной инструкции это s3sel.
Далее выбираем класс хранения данных. Стандартное хранение — для хранения и раздачи часто запрашиваемых данных. Мы выбираем холодное хранение, так как собираемся использовать хранилище для хранения бэкапов. Это редко запрашиваемые данные, а значит, нет необходимости платить за их хранение больше.

Подробнее о том, как создать контейнер →
Создаем контейнер. Проверяем, что s3sel появился в списке.

Нажимаем на него и переходим во внутреннее меню.
Для наглядности загружаем в контейнер объекты — семплы файлов le_storage.

Переходим во вкладку Пользователи и добавляем нового — Создать пользователя.

Придумываем логин — s3selectel в данной инструкции — и генерируем пароль. Не забываем сохранить access-данные и поставить галочку на согласие использовать данные для доступа по протоколу S3.
После создания пользователя «привязываем» к нему нужный контейнер, выбрав имя контейнера из списка. Добавим пользователю права на чтение и запись данных и применим изменения.

Монтируем контейнер
Устанавливаем s3fs
Все последующие команды по инсталляции и запуску приложений необходимо выполнять от имени root (либо используя sudo).
Открываем командную строку. Собираем информацию о доступных пакетах внешних репозиториев с помощью команды:
apt update
Устанавливаем утилиту s3fs. Это клиент командной строки для Linux и MacOS, который позволяет монтировать контейнер объектного хранилища через модуль FUSE. Для установки вводим:
apt install s3fs
В корневом каталоге пользователя (в данной инструкции — /home/s3admin) создаем папку s3disk. К этой папке мы смонтируем ранее созданный контейнер s3sel из объектного хранилища Selectel. Вводим:
mkdir s3disk
Папка добавилась в список директорий, можно двигаться дальше.
Производим монтирование контейнера
Вернемся к контейнеру объектного хранилища s3sel. Копируем логин и пароль из панели управления, сохраняем эту информацию в отдельном файле ~/.passwd-s3fs. Также стоит ограничить доступ к файлу — например, открыть доступ только владельцу. Вводим следующие строки:
echo '136692_s3selectel:d5Qwiq`S7P' > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs
Используем установленную утилиту s3fs, чтобы смонтировать контейнер s3sel к созданной папке s3disk. В качестве endpoint — https://s3.storage.selcloud.ru.
Далее выполняем команду следующего вида:
s3fs <имя контейнера> <путь к каталогу> -o allow_other -o passwd_file=<путь к файлу паролей> -o use_path_request_style -o endpoint=<регион> -o url=<endpoint>
Подставим значения, актуальные для данной инструкции:
s3fs s3sel /home/s3admin/s3disk -o allow_other -o passwd_file=/home/s3admin/.passwd-s3fs -o use_path_request_style -o endpoint=ru-1 -o url=[<https://s3.storage.selcloud.ru>]
В результате в созданной нами папке s3disk должны появиться файлы, которые мы загрузили в контейнер s3sel через панель управления Selectel.
Тестируем смонтированный контейнер
Проверим, что загруженные в контейнер файлы le_storage, видны в папке s3disk. Вводим команды:
cd s3disk
ll -l
Создадим пустой файл для проверки возможности записи:
touch from_selectel_with_love.txt
Проверяем контейнер в объектном хранилище и видим, что созданный файл появился там.

Автоматизируем запуск s3fs
Чтобы не монтировать контейнер каждый раз вручную, можно настроить автоматизацию запуска s3fs. Это делается через изменение конфигурационного файла fstab.
Вводим в консоль команду:
nano /etc/fstab
Добавляем в файл строку следующего вида:
s3fs <имя контейнера> <путь к каталогу> fuse allow_other,nonempty,passwd_file=<путь к файлу паролей>,use_path_request_style,endpoint=<регион>,url=<endpoint> 0 0
Добавляем данные инструкции:
s3fs#s3sel /home/s3admin/s3disk fuse allow_other,nonempty,passwd_file=/home/s3admin/.passwd-s3fs,use_path_request_style,endpoint=ru-1,url=[<https://s3.storage.selcloud.ru>] 0 0
Убедитесь, что контейнер монтируется автоматически, перезагрузив систему.
Заключение
Итак, мы смонтировали контейнер облачного хранилища Selectel как локальную директорию в среде Linux и настроили автоматическое монтирование контейнера при перезапуске системы. Это простой в реализации способ настроить связность объектного хранилища с вашим сервером, чтобы выгружать туда бэкапы и любые другие данные,.
Контейнер может стать хранилищем любого типа файлов, но убедитесь, что это редко используемые данные. s3fs — это не высокопроизводительное решение. Утилита не обеспечит ту же производительность, что и файловая система на локальном диске. Для большей производительности можно использовать похожие по функционалу утилиты goofys или geeseFS.
Дисклеймер: Объектное хранилище имеет плоское адресное пространство и не поддерживает иерархическую структуру. Папки, созданные в хранилище, являются префиксами в имени объекта. Таким образом, любые операции с папками — создание, перемещение, переименование — будут восприниматься хранилищем как работа с объектами внутри этой папки и тарифицироваться согласно правилам тарификации объектного хранилища.