Назад | Перейти на главную страницу

Невозможно смонтировать репозиторий резервных копий borg, хранящийся в моментальном снимке ZFS

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

Это относится к борг резервная копия и был размещен в этом borg проблема с github: Разрешить проверку файловых систем, доступных только для чтения

Попытка получить доступ к удаленному репозиторию borg для list, info, mount и другие действия только для чтения завершаются ошибкой, когда удаленный репозиторий находится в моментальном снимке ZFS (только для чтения).

Резервное копирование использую borg с ежедневной обрезкой (borg prune ...) для шифрования и удаленных снимков ZFS для хранения (и защиты резервных копий от уничтожения).

Важнейшей причиной для этого является защита данных резервного копирования на удаленном сервере резервного копирования от злоумышленника, имеющего доступ к узлу, выполняющему резервное копирование. С моментальными снимками ZFS, доступными только для чтения, злоумышленник не может удалить удаленные резервные копии.

До сих пор я пытался borg list, что не удается:

Удаленный: borg.locking.LockFailed: ('/data/backup/.zfs/snapshot/daily_2017-05-23/home/lock.exclusive', «[Errno 30] Файловая система только для чтения: '/ data / backup / .zfs / snapshot / daily_2017-05-23 / home / lock.exclusive '")

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

user@server:~/.zfs/snapshot/snapshot_name/repo/lock.exclusive

У меня есть относительно элегантный способ решения этой проблемы.

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

Ниже предполагается, что вам разрешено запускать удаленные команды ssh только как user @ server без полного доступа к оболочке.

[user@client:~]

repo='foo'
snap='daily_2017-05-23'

ssh user@server "mkdir $repo.snap"

targets=$(ssh user@server "ls .zfs/snapshot/$snap/$repo")

for t in $targets; do
    ssh user@server "ln -s ../.zfs/snapshot/$snap/$repo/$t $repo.snap/$t"
done

borg list user@server:$repo.snap