GeeseFS
GeeseFS
Функциональность
Производительность
По сравнению с goofys и s3fs GeeseFS работает с большими количествами малых файлов (размером до 1 МБ) на порядки быстрее, а с большими файлами — на аналогичной скорости или быстрее. Подробнее о тестах производительности см. в репозитории GeeseFS на GitHub
Чтобы GeeseFS работала быстрее, в ней реализованы:
- Параллельное опережающее чтение (parallel readahead).
- Эвристическое опережающее чтение при случайном доступе: если размер нескольких запрошенных подряд блоков ниже порога, для следующих запросов GeeseFS будет скачивать из хранилища меньшие блоки.
- Параллельная составная загрузка объектов в хранилище (parallel multipart upload).
- Оптимизированное изменение объектов: клиент и хранилище обмениваются только измененными частями объекта.
- Фоновая загрузка малых деревьев объектов и папок: при запросе папки GeeseFS скачает все дерево за одно обращение к хранилищу.
- Асинхронная запись, переименование и удаление объектов.
- Использование дискового кеша для чтения и записи.
POSIX-совместимость
Помимо базовых функций из стандартов POSIX (open
, read
, write
, close
и т. д.), GeeseFS поддерживает следующие возможности:
- Корректное чтение объектов сразу после записи в них (read-after-write consistency).
- Частичная запись (обратите внимание: в версионируемых бакетах при частичной записи могут появляться промежуточные версии объекта).
fsync
— синхронизация содержимого объекта или папки между памятью машины и хранилищем.truncate
— произвольное изменение размера объекта.- Символические (мягкие) ссылки.
xattr
— расширенные атрибуты файлов.- Переименование папок.
readdir
— чтение метаинформации о папках.
Частичное изменение и дозапись объектов
В GeeseFS поддерживается частичное изменение и дозапись объектов в бакеты Object Storage.
Чтобы включить частичное изменение объектов, используйте опцию --enable-patch
.
Подробнее в репозитории GeeseFS на GitHub:
- Partial object updates
— описание частичного изменения и дозаписи объектов. - Concurrent Updates
— описание частичного изменения объекта одновременно несколькими запросами.
Ограничения
В GeeseFS не поддерживаются:
-
Работа с правами доступа к файлам и папкам, в том числе команды
chmod
иchown
.При монтировании файловой системы вы можете указать:
- Права доступа ко всем файлам или папкам в значениях опций
--file-mode
и--dir-mode
соответственно. - Идентификатор пользователя — владельца всех файлов и папок в значении опции
--uid
. - Идентификатор группы, к которой относятся все файлы и папки, в значении опции
--gid
.
Например:
geesefs \ --file-mode=0666 \ --dir-mode=0777 \ --uid=1000 \ <имя_бакета> <точка_монтирования>
- Права доступа ко всем файлам или папкам в значениях опций
-
Жесткие ссылки.
-
Блокировка файлов.
-
Корректное время последнего доступа к файлу (
atime
) и последнего изменения атрибутов файла (ctime
). В обоих полях всегда содержится время последнего изменения файла — то же, что и в полеmtime
. -
Создание файлов размером больше 1 ТБ.
Подготовка к работе
- Создайте сервисный аккаунт.
- Назначьте сервисному аккаунту роли, необходимые для вашего проекта. Подробнее о ролях см. в документации Identity and Access Management.
- Создайте статический ключ доступа.
Примечание
Сервисный аккаунт может просматривать список бакетов только в том каталоге, в котором он был создан.
Сервисный аккаунт может выполнять действия с объектами в бакетах, которые созданы в каталогах, отличных от каталога сервисного аккаунта. Для этого назначьте сервисному аккаунту роли на нужный каталог или бакет в нем.
Установка
-
Установите утилиты для работы FUSE. Например:
-
Debian, Ubuntu:
sudo apt-get install fuse
-
CentOS:
sudo yum install fuse
-
-
Скачайте и установите GeeseFS:
wget https://github.com/yandex-cloud/geesefs/releases/latest/download/geesefs-linux-amd64 chmod a+x geesefs-linux-amd64 sudo cp geesefs-linux-amd64 /usr/bin/geesefs
-
Установите пакет macFUSE
. Подробнее см. в инструкции по установке в репозитории macFUSE на GitHub. -
Скачайте и установите GeeseFS:
platform='arm64' if [[ $(uname -m) == 'x86_64' ]]; then platform='amd64'; fi wget https://github.com/yandex-cloud/geesefs/releases/latest/download/geesefs-mac-$platform chmod a+x geesefs-mac-$platform sudo cp geesefs-mac-$platform /usr/bin/geesefs
Также вы можете самостоятельно собрать GeeseFS из исходного кода. Подробнее см. в инструкции
Аутентификация
GeeseFS использует статический ключ доступа к Object Storage. Он задается несколькими способами:
-
С помощью файла
credentials
, который нужно поместить в директорию~/.aws/
:[default] aws_access_key_id = <идентификатор_ключа> aws_secret_access_key = <секретный_ключ>
Если файл с ключом находится в другом месте, передайте путь к нему в параметре
--shared-config
при монтировании бакета:geesefs \ --shared-config <путь_к_файлу_с_ключом> \ <имя_бакета> <точка_монтирования>
-
С помощью переменных окружения:
export AWS_ACCESS_KEY_ID=<идентификатор_ключа> export AWS_SECRET_ACCESS_KEY=<секретный_ключ>
Примечание
Вы можете использовать команду geesefs
с правами суперпользователя (sudo
). В этом случае обязательно передавайте информацию о ключе либо в параметре --shared-config
, либо с помощью переменных окружения.
-
С помощью файла
credentials
, который нужно поместить в папкуusers/<текущий_пользователь>/.aws/
:[default] aws_access_key_id = <идентификатор_ключа> aws_secret_access_key = <секретный_ключ>
Если файл с ключом находится в другом месте, передайте путь к нему в параметре
--shared-config
при монтировании бакета:geesefs <имя_бакета> <точка_монтирования> ^ --shared-config <путь_к_файлу_с_ключом>
-
С помощью переменных окружения:
set AWS_ACCESS_KEY_ID=<идентификатор_ключа> set AWS_SECRET_ACCESS_KEY=<секретный_ключ>
При работе с GeeseFS на виртуальной машине Compute Cloud, к которой привязан сервисный аккаунт, вы можете включить упрощенную аутентификацию, без статического ключа доступа. Для этого при монтировании бакета используйте опцию --iam
.
Монтирование бакета
Выберите каталог или диск для монтирования бакета. Убедитесь, что у вас достаточно прав для этой операции.
При монтировании бакета также можно задать настройки GeeseFS связанные с производительностью и правами доступа к объектам. Чтобы посмотреть список опций и их описания, выполните команду geesefs --help
.
-
Для разового монтирования бакета выполните команду:
geesefs <имя_бакета> <точка_монтирования>
-
Для автоматического монтирования бакета при запуске системы:
Linux/macOSWindows-
Добавьте в файл
/etc/fuse.conf
строку:user_allow_other
-
Добавьте в файл
/etc/fstab
строку вида:<имя_бакета> <точка_монтирования> fuse.geesefs _netdev,allow_other,--file-mode=0666,--dir-mode=0777 0 0
Примечание
Чтобы бакет монтировался корректно, указывайте полный абсолютный путь к точке монтирования без
~
. Например:/home/user/mountpoint
.Создайте службу Windows, которая будет запускаться вместе с ОС:
-
Запустите командную строку
CMD
от имени администратора. -
Выполните команду:
sc create <имя_службы> ^ binPath="<команда_для_монтирования>" ^ DisplayName= "<имя_службы>" ^ type=own ^ start=auto
Где
binPath
— путь к файлуgeesefs.exe
с необходимыми параметрами монтирования. Например:C:\geesefs\geesefs.exe <имя_бакета> <точка_монтирования>
.Результат:
[SC] CreateService: успех
-
Нажмите кнопку Пуск и в строке поиска Windows введите
Службы
. Запустите от имени администратора приложение Службы. -
В открывшемся окне найдите созданную ранее службу, нажмите на нее правой кнопкой мыши и выберите Свойства.
-
На вкладке Вход в систему выберите опцию С учетной записью и укажите имя и пароль от вашей учетной записи Windows.
При необходимости нажмите кнопку Обзор → Дополнительно → Поиск, чтобы найти нужного пользователя на компьютере.
-
Нажмите кнопку OK.
Чтобы удалить созданную службу, запустите командную строку
CMD
от имени администратора и выполните команду:sc delete <имя_службы>
Результат:
[SC] DeleteService: успех
-