我已经发布了这个问题以及我自己的解决方案,以便其他人可以使用。
这涉及到博格备份并发布到这个borg
github 问题:允许检查只读文件系统
当远程存储库驻留在 ZFS 快照(只读)上时,尝试访问远程 borg 存储库以执行list
、info
和mount
其他只读操作会失败。
我正在使用 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