删除 btrfs 子卷但不丢失其中的数据

删除 btrfs 子卷但不丢失其中的数据

我的媒体服务器上有一个 btrfs 文件系统。这是我第一次使用 btrfs 设置系统,我认为将不同类型的媒体分成不同的子卷是个好主意,这样我就可以分别为它们创建快照。有两个子卷:

/downloads
/movies`

我正在运行的一个程序(确切地说是 sonarr)会自动下载电影,并在完成后尝试在/downloads/movie和之间创建硬拷贝/media/movie。结果发现 btrfs 子卷之间无法建立硬链接,因此 sonarr 只能重新进行复制。这不必要地创建了文件的两个副本,占用了磁盘空间。

我尝试使用带外重复数据删除来解决这个问题,因为据我所知,带内重复数据删除尚不支持。使用它duperemove可以释放大约 2GB/小时的数据,但对我来说太慢了。

我认为最好转储我之前的子卷设置,并使用单个 btrfs 卷来处理所有内容。查看它的手册页,btrfs subvolume似乎删除子卷时子卷中的所有数据都会丢失。有没有办法在删除子卷之前将数据所有权从子卷“转移”到父卷,以便我可以保留数据?

答案1

我对 btrfs 还不太了解。几个小时前才开始学习!但我想我可以回答你的问题。

我不知道 sonarr,但也许你可以告诉它创建一个引用链接复制时。复制命令看起来类似于以下内容:

$ cp --reflink=always /downloads/file-to-copy /movies/

这将在另一个子卷上创建一个副本,但由于 btrfs 的“写入时复制”机制,它不会占用更多空间,直到其中一个文件被修改。如果您不修改文件(重命名是可以的),这将与硬链接解决方案一样。

要删除子卷但保留文件,您应该能够简单地将文件移动(mv)到父子卷内的另一个目录,删除子卷并重命名新目录,就像子卷的名称一样。

或者,您可以使用上面的 reflink 方法将文件克隆到父子卷上的新目录中,重命名子卷,将新目录重命名为子卷的名称并测试一切是否正常,然后删除子卷。

相关内容