Резервное копирование в Yandex Object Storage с помощью GeeseFS
В этом практическом руководстве вы настроите резервное копирование файлов из локальной системы в облачное хранилище Yandex Object Storage с помощью GeeseFS.
GeeseFS позволяет монтировать бакет как обычную папку. Это дает возможность использовать привычные инструменты копирования и синхронизации. Резервное копирование выполняется путем копирования и синхронизации данных между локальным каталогом и бакетом. Это выглядит как работа с двумя папками, одна из которых находится в облаке. Для оптимизации процесса применяются инструменты синхронизации, которые передают только новые и измененные файлы — например, rsync или robocopy.
Чтобы настроить резервное копирование с помощью GeeseFS:
- Подготовьте облако к работе.
- Создайте бакет.
- Создайте сервисный аккаунт.
- Создайте статический ключ доступа.
- Подготовьте окружение.
- Смонтируйте бакет.
- Синхронизируйте локальный каталог с бакетом.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки бакета входит плата за хранение данных в бакете и операции с ними (см. тарифы Yandex Object Storage).
Создайте бакет
Примечание
Чтобы защитить резервные копии от случайного удаления файлов, включите версионирование S3-бакета. В этом случае удаленные или перезаписанные файлы будут сохраняться в виде предыдущих версий, которые можно восстановить при необходимости. Подробнее о версионировании S3-бакетов можно прочитать в документации.
Без версионирования восстановить удаленные из S3 файлы невозможно, даже если они раньше копировались.
- В консоли управления
перейдите в нужный каталог. - Выберите сервис Object Storage.
- Нажмите Создать бакет.
- Укажите имя бакета в соответствии с правилами именования.
- В полях Чтение объектов, Чтение списка объектов и Чтение настроек выберите
С авторизацией. - Нажмите Создать бакет.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Создайте бакет, указав имя бакета в соответствии с правилами именования:
aws --endpoint-url=https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>Результат:
make_bucket: backup-bucket
Воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.
Создайте сервисный аккаунт
Создайте сервисный аккаунт, от имени которого будет выполняться резервное копирование.
- В консоли управления
выберите сервис Identity and Access Management. - Нажмите Создать сервисный аккаунт.
- В поле Имя укажите
sa-backup-to-s3. - Нажмите
Добавить роль и выберите рольstorage.editor. - Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте сервисный аккаунт:
yc iam service-account create --name sa-backup-to-s3 \ --folder-name <имя_каталога>Результат:
id: ajeab0cnib1p******** folder_id: b0g12ga82bcv******** created_at: "2025-10-03T09:44:35.989446Z" name: sa-backup-to-s3 -
Назначьте сервисному аккаунту роль
storage.editorна каталог:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name sa-backup-to-s3 \ --role storage.editor \ --folder-name <имя_каталога>Результат:
effective_deltas: - action: ADD access_binding: role_id: storage.editor subject: id: ajeab0cnib1p******** type: serviceAccount
- Создайте сервисный аккаунт
sa-backup-to-s3. Для этого воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create. - Назначьте сервисному аккаунту в текущем каталоге роль
storage.editor. Для этого воспользуйтесь методом REST API setAccessBindings для ресурса Folder или вызовом gRPC API FolderService/SetAccessBindings.
Примечание
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:
kms.keys.encrypter— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter— включает разрешения, предоставляемые ролямиkms.keys.encrypterиkms.keys.decrypter.
Подробнее см. Сервисные роли Yandex Key Management Service.
Создайте статический ключ доступа
-
В консоли управления
выберите сервис Identity and Access Management. -
На панели слева выберите
Сервисные аккаунты. -
Выберите сервисный аккаунт
sa-backup-to-s3. -
На панели сверху нажмите
Создать новый ключ и выберите Создать статический ключ доступа. -
Задайте описание ключа и нажмите Создать.
-
Сохраните полученные идентификатор и секретный ключ — они понадобятся позднее при монтировании бакета.
Внимание
После закрытия диалога значение ключа будет недоступно.
-
Выполните команду:
yc iam access-key create \ --service-account-name sa-backup-to-s3Где
--service-account-name— имя сервисного аккаунта, для которого создается ключ.Результат:
access_key: id: aje726ab18go******** service_account_id: ajecikmc374i******** created_at: "2024-11-28T14:16:44.936656476Z" key_id: YCAJEOmgIxyYa54LY******** secret: YCMiEYFqczmjJQ2XCHMOenrp1s1-yva1******** -
Сохраните идентификатор (
key_id) и секретный ключ (secret) — они понадобятся позднее при монтировании бакета.
Чтобы создать ключ доступа, воспользуйтесь методом REST API create для ресурса AccessKey или вызовом gRPC API AccessKeyService/Create.
Сохраните идентификатор (key_id) и секретный ключ (secret) — они понадобятся позднее при монтировании бакета.
Подготовьте окружение
Установите GeeseFS
-
Проверьте, что в дистрибутиве установлены утилиты для работы с FUSE:
apt list --installed | grep fuseВажно
Во многих дистрибутивах Linux утилиты для работы с FUSE уже установлены по умолчанию. Их переустановка или удаление могут привести к нарушению работы операционной системы.
-
Если утилиты для работы с FUSE не установлены, то выполните команду:
sudo apt-get 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
-
Проверьте, что в дистрибутиве установлены утилиты для работы с FUSE:
yum list installed | grep fuseВажно
Во многих дистрибутивах Linux утилиты для работы с FUSE уже установлены по умолчанию. Их переустановка или удаление могут привести к нарушению работы операционной системы.
-
Если утилиты для работы с FUSE не установлены, то выполните команду:
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 на Apple Silicon Mac. -
Разрешите
загрузку расширения ядра MacFUSE (Apple Silicon и Intel Mac).Подробнее об установке 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/local/bin/geesefs
-
Скачайте
и установите WinFSP. -
Скачайте
файлgeesefs-win-x64.exe. -
Для удобства работы переименуйте файл
geesefs-win-x64.exeвgeesefs.exe. -
Создайте папку
geesefsи перенесите в нее файлgeesefs.exe. -
Добавьте папку
geesefsв переменнуюPATH:- Нажмите кнопку Пуск и в строке поиска Windows введите Изменение системных переменных среды.
- Справа снизу нажмите кнопку Переменные среды....
- В открывшемся окне найдите параметр
PATHи нажмите Изменить. - Добавьте путь к папке в список.
- Нажмите кнопку ОК.
Также вы можете самостоятельно собрать GeeseFS из исходного кода. Подробнее см. в инструкции
Аутентифицируйте GeeseFS
GeeseFS использует статический ключ доступа к Object Storage, полученный ранее. Он задается несколькими способами:
-
С помощью файла
credentials, который нужно поместить в директорию~/.aws/:-
Создайте директорию:
mkdir ~/.aws -
Создайте файл
credentialsсо следующим содержимым:[default] aws_access_key_id = <идентификатор_ключа> aws_secret_access_key = <секретный_ключ>Если файл с ключом находится в другом месте, передайте путь к нему в параметре
--shared-configпри монтировании бакета:geesefs \ --shared-config <путь_к_файлу_с_ключом> \ <имя_бакета> <точка_монтирования>Структура файла с ключом должна быть аналогична
~/.aws/credentials.
-
-
С помощью переменных окружения:
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 <путь_к_файлу_с_ключом> ^ <имя_бакета> <точка_монтирования>Структура файла с ключом должна быть аналогична
~/.aws/credentials.В качестве точки монтирования укажите существующую папку.
-
С помощью переменных окружения:
set AWS_ACCESS_KEY_ID=<идентификатор_ключа> set AWS_SECRET_ACCESS_KEY=<секретный_ключ>
При работе с GeeseFS на виртуальной машине Compute Cloud, к которой привязан сервисный аккаунт, вы можете включить упрощенную аутентификацию, без статического ключа доступа. Для этого при монтировании бакета используйте параметр --iam.
Смонтируйте бакет
Выберите каталог или диск для монтирования бакета. Убедитесь, что у вас достаточно прав для этой операции.
При монтировании бакета также можно задать настройки GeeseFS, связанные с производительностью и правами доступа к объектам. Чтобы посмотреть список опций и их описания, выполните команду geesefs --help.
-
Для разового монтирования бакета:
Linux/macOSWindows-
Создайте папку для монтирования:
mkdir <точка_монтирования> -
Смонтируйте бакет:
geesefs <имя_бакета> <точка_монтирования>В качестве точки монтирования укажите существующую папку.
Смонтируйте бакет:
geesefs <имя_бакета> <точка_монтирования>В качестве точки монтирования укажите имя новой папки, которая будет создана при монтировании бакета. Нельзя указывать имя существующей папки.
Результат:
2025/10/06 21:14:27.488504 main.INFO File system has been successfully mounted. The service geesefs has been started. -
-
Для автоматического монтирования бакета при запуске системы:
LinuxmacOSWindows-
Создайте папку для автоматического монтирования:
mkdir <точка_монтирования> -
Откройте файл
/etc/fuse.conf:sudo nano /etc/fuse.conf -
Добавьте в него строку:
user_allow_other -
Откройте файл
/etc/fstab:sudo nano /etc/fstab -
Добавьте в файл
/etc/fstabстроку вида:<имя_бакета> /home/<имя_пользователя>/<точка_монтирования> fuse.geesefs _netdev,allow_other,--file-mode=0666,--dir-mode=0777,--shared-config=/home/<имя_пользователя>/.aws/credentials 0 0Если вы создавали файл
.aws/credentialsдля пользователяroot, то указывать параметр--shared-configне требуется.Примечание
Чтобы бакет монтировался корректно, указывайте полный абсолютный путь к точке монтирования и файлу с ключом без
~. Например:/home/user/. -
Перезагрузите компьютер и проверьте, что бакет смонтирован в указанную папку.
Чтобы отключить автоматическое монтирование, удалите из файла
/etc/fstabстроку с именем бакета.-
Создайте папку для автоматического монтирования:
mkdir <точка_монтирования> -
Создайте файл
com.geesefs.automount.plistс конфигурацией агента автозапуска:nano /Users/<имя_пользователя>/Library/LaunchAgents/com.geesefs.automount.plist -
Задайте конфигурацию агента, указав имя бакета и абсолютный путь к точке монтирования:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.geesefs.automount</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/geesefs</string> <string><имя_бакета></string> <string><абсолютный_путь_к_точке_монтирования></string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <dict> <key>NetworkState</key> <true/> </dict> </dict> </plist>Примечание
В качестве точки монтирования укажите существующую пустую папку.
Чтобы бакет монтировался корректно, указывайте полный абсолютный путь к точке монтирования и файлу с ключом без
~. Например:/home/user/. -
Включите созданный агент:
launchctl load /Users/<имя_пользователя>/Library/LaunchAgents/com.geesefs.automount.plist -
Перезагрузите компьютер и проверьте, что бакет смонтирован в указанную папку.
Чтобы отключить автозапуск агента, используйте команду:
launchctl unload /Users/<имя_пользователя>/Library/LaunchAgents/com.geesefs.automount.plistСоздайте службу 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: успех -
Синхронизируйте локальный каталог с бакетом
Чтобы завершить настройку резервного копирования, настройте ручную или автоматическую синхронизацию локального каталога с бакетом.
Ручная синхронизация
Для разовой синхронизации выполните команду:
rsync -av \
--no-owner \
--no-group \
--no-perms \
--no-times \
--delete \
<путь_к_локальному_каталогу>/ \
<путь_к_каталогу_монтирования>/
Где --delete — флаг для удаления файлов из бакета при их удалении из локального каталога.
Примечание
Указывайте полный абсолютный путь к каталогам без ~. Например: /home/user/.
Данная команда копирует все содержимое из локального каталога в бакет через каталог, смонтированный с помощью GeeseFS. При этом переносит только новые и измененные файлы.
Каталог GeeseFS не является полноценной POSIX-совместимой файловой системой, поэтому не переносятся владелец, права доступа и временные метки.
Для разовой синхронизации выполните в командной строке (CMD):
robocopy "<путь_к_локальному_каталогу>" "<путь_к_каталогу_монтирования>" /MIR
Где /MIR — параметр для полной синхронизации каталогов, включая удаление отсутствующих файлов.
Примечание
Указывайте полный абсолютный путь к каталогам без ~. Например: /home/user/.
Результат:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Начало : 6 октября 2025 г. 21:16:36
Источник : C:\Users\username\geesefs\local\
Назначение : C:\Users\username\geesefs\mount\
Файлы: *.*
Параметры: *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\Users\username\geesefs\local\
100% Новый файл 13793 image.PNG
------------------------------------------------------------------------------
ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
Каталогов : 1 0 1 0 0 0
Файлов : 1 1 0 0 0 0
Байт : 13.4 k 13.4 k 0 0 0 0
Время : 0:00:00 0:00:00 0:00:00 0:00:00
Скорость : 13793000 Байт/сек.
Скорость : 789.241 МБ/мин.
Окончание: 6 октября 2025 г. 21:16:36
Совет
Чтобы каждый раз не запускать команду, можно создать BAT-файл:
-
Откройте Блокнот (Notepad) и добавьте следующее содержимое:
@echo off robocopy "<путь_к_локальному_каталогу>" "<путь_к_каталогу_монтирования>" /MIR -
Сохраните файл, например, как
sync_to_s3.bat. -
Чтобы синхронизировать каталоги, запустите BAT-файл.
Автоматическая синхронизация
Для автоматической синхронизации локального каталога с каталогом GeeseFS:
-
Убедитесь, что у пользователя, от имени которого будет ставиться задание в
cron, есть доступ к обоим каталогам. -
Откройте файл планировщика текущего пользователя, выполнив команду:
crontab -e -
Добавьте в файл строку для автоматической синхронизации, например, каждые 10 минут:
*/10 * * * * rsync -av --no-owner --no-group --no-perms --no-times --delete <путь_к_локальному_каталогу>/ <путь_к_каталогу_монтирования>/ --log-file=<путь_к_файлу_логов>Где:
--delete— флаг для удаления файлов из бакета при их удалении из локального каталога.--log-file— опциональный параметр для записи логов. Указывайте полный путь.
Примечание
Указывайте полный абсолютный путь к каталогам без
~. Например:/home/user/.
Задание будет запускаться с заданной периодичностью и выполнять синхронизацию каталогов.
Команда в задании cron копирует все содержимое из локального каталога в бакет через каталог, смонтированный с помощью GeeseFS. При этом переносит только новые и измененные файлы.
Каталог GeeseFS не является полноценной POSIX-совместимой файловой системой, поэтому не переносятся владелец, права доступа и временные метки.
Для автоматической синхронизации настройте задачу в Планировщике задач:
-
Откройте Планировщик задач Windows:
- Пуск → Планировщик задач.
- Или выполните в Выполнить →
taskschd.msc.
-
Нажмите Создать задачу... (Create Task…)
-
Во вкладке Действия (Actions) добавьте новое действие, указав абсолютный путь до исполняемого скрипта (например, BAT-файла) в поле Программа или сценарий.
-
Во вкладке Триггеры добавьте расписание.
-
Нажмите OK.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите объекты из бакета.
- Удалите бакет.