我最近/home
使用 BTRFS格式化了我的分区,但由于这是我第一次接触这个 FS,我不知道子卷。
昨天我重新安装了我的 Linux Mint 并选择将我现有的主分区挂载为/home
. 现在我很惊讶,我的文件首先似乎丢失了,但后来我注意到 Linux Mint 在@home
我现有的用户主文件夹旁边创建了一个子卷。
当前情况是以下磁盘布局:250 GiB SSD -- 64 GiB / (BTRFS) -- 8 GiB swap -- ~170 GiB /home (BTRFS)
当我尝试将我的主文件夹移动到@home
子卷中时,我收到错误消息,即没有足够的剩余空间 (?!) 尽管此分区上还剩下约 50 GiB 并且我想移动,而不是复制文件。我现在没有任何其他磁盘可以重新格式化为任何非 NTFS 格式,这将需要保留任何符号链接..
现在我有一个问题:如何正确地将文件夹中的文件移动到子卷中?为什么移动文件不起作用?
您可以尝试使用cp -a --reflink=always /home/<whatever> /home/@home/
. 就 Linux VFS(虚拟文件系统)而言,这是一个真正的副本,但在 BTRFS 中,文件将共享相同的块/扩展,因此在修改文件之前不需要额外的空间。
如果复制成功,修改/etc/fstab
为挂载子卷而不是整个文件系统:
/dev/sdXn /home btrfs subvol=@home
Run Code Online (Sandbox Code Playgroud)
然后,重新启动。如果一切顺利,您可以删除原始文件:
mount /dev/sdXn /mnt
pushd /mnt
rm -fR <whatever>
popd
umount /mnt
Run Code Online (Sandbox Code Playgroud)
当然,在尝试任何这些之前,您应该有备份。
一旦一切正常,请阅读BTRFS wiki,特别是指南和使用信息下的所有文章。BTRFS 非常简洁,但它不像传统的 Linux 文件系统(extN、ReiserFS 等)那样工作。这不是人们可以跳入并在您进行时弄清楚的事情之一。要很好地使用 BTRFS,您必须知道自己在做什么。阅读文档是最好的方法。
我碰巧喜欢 BTRFS,我希望你也喜欢它。
如果其他人也尝试使用mv
在子卷之间移动数据,根据https://unix.stackexchange.com/a/152639/81744听起来它应该工作/很快(reflinks 应该是默认模式mv
自 coreutils 8.24 起):我在 linux-4.14.15-arch 上使用 coreutils-8.29 进行的实际测试表明,正在创建副本而不是文件系统内部链接(df
显示文件系统大小增加,这对于 而言显得很奇怪mv
,尤其是使用引用链接)。
因此,即使使用较新版本的 coreutils, https://unix.stackexchange.com/a/377734/81744仍然是正确的答案,它应该默认为mv
.
(我会评论当前的最佳答案来添加此信息,但我需要 50 声望,而我还没有。)