无法挂载位于 ZFS 快照上的 Borg 备份存储库

无法挂载位于 ZFS 快照上的 Borg 备份存储库

我已经发布了这个问题以及我自己的解决方案,以便其他人可以使用。

这涉及到博格备份并发布到这个borggithub 问题:允许检查只读文件系统

当远程存储库驻留在 ZFS 快照(只读)上时,尝试访问远程 borg 存储库以执行listinfomount其他只读操作会失败。

我正在使用 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'”)

答案1

问题是borg无法在远程存储库中创建锁定文件,因为它驻留在远程只读 ZFS 快照上:

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

对于这个问题我有一个相对优雅的解决方法。

它在可写文件系统上创建一个目录,并将快照的内容链接到其中。

下面假设您只被允许以 user@server 身份运行远程 ssh 命令,而没有完全的 shell 访问权限。

[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

相关内容