Я разместил вопрос и свое решение этой проблемы, чтобы сделать его доступным для других.
Это относится к борг резервная копия и был размещен в этом 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