我正在尝试执行到外部硬盘的备份。本机驱动器和外部驱动器都使用 BTRFS 文件系统。为此,我首先创建主目录的只读快照:
# btrfs subvolume snapshot -r /home /.snapshots/home/BACKUP
接下来是发送/接收到备份驱动器:
# btrfs send /.snapshots/home/BACKUP | btrfs receive /.backup/home
我得到这个输出:
At subvol /.snapshots/home/BACKUP
At subvol BACKUP
ERROR: failed to clone extents to matt/.local/share/Anki2/Matt/collection.anki2: Invalid argument
一分钟左右后发生错误。我尝试了几个不同的快照,但每个快照都出现相同的错误。此外,我在任何快照中都找不到该文件。我认为这可能是某种磁盘损坏错误,因此我启动到 USB 操作系统映像并运行
# btrfs check --repair /dev/mapper/...
在已卸载的文件系统上。这个没有报错。重新启动到文件系统后,我再次尝试备份并得到相同的错误。有什么想法可能导致这种情况吗?
编辑
根据伊曼纽尔·罗莎的评论,我尝试过
# btrfs scrub start -B /
退出时没有错误。刷机后问题依然存在。
编辑2
我无法弄清楚这有什么问题。我最终只是删除了本地文件,然后它又工作了。
编辑3
虽然删除文件可以暂时解决该问题,但通常会创建新文件来产生相同的错误,因此这实际上并没有得到解决。 sqlite 文件似乎特别有问题。
答案1
这显然是 Linux 内核中的一个错误,已修复这次提交。我通过发帖发现了这个关于 btrfs 邮件列表的问题。升级内核解决了这个问题。