我正在尝试将我的根子卷移动到另一个驱动器。我已启动到实时磁盘,运行“cp -a /mnt/sdb/@ /mnt/sda”,修复我的 FSTAB,然后重新安装 grub。但是当我启动时,我可以看到两个子卷都安装在 / 上,我真的很困惑。
答案1
在启动时,内核fstab
还看不到该文件,因此更改该文件是不够的。内核在启动时获取信息的地方是 Grub(现在是 Grub 2)。但要修改 grub.cfg,您首先需要知道刚刚创建的根子卷的名称。
另一个驱动器上的根子卷的具体名称是什么?确保它已安装,然后使用以下命令检查
sudo btrfs subvolume list /
您可能想要将该子卷的名称更改为以“@”开头的名称 - 这是 Ubuntu 惯例 - 并且它安装在 btrfs 分区的“根”目录中。
现在,当您知道根子卷的名称时,请转到 /boot/grub/grub.cfg 并将所有引用从“@”更改为新名称(包括可能的路径)。
现在,如果您想将给定的子卷挂载到 btrfs 的“根”目录上,而不是现有子卷下的某个目录,您需要按照以下步骤操作:
手动挂载目标 btrfs 分区,例如使用 /mnt/btrfs
sudo 挂载 /dev/sda2 /mnt/btrfs
(假设保存 btrfs 的分区是/dev/sda2
)。这将挂载“根子卷” - 放置“@”Linux 根子卷以及“@home”和您的全新子卷的默认位置。
去那里(你会看到所有已经制作的,并通过
sudo btrfs 子卷快照@mynewroot
复制根的路径就是您复制根文件的路径。
删除最初复制但放置在非最佳位置的子卷
sudo btrfs 子卷删除
现在,最后说一句:
要在同一个 btrfs 分区上复制子卷,您只需执行以下操作sudo btrfs subvolume snapshot <path to the copied root> @mynewroot
(理想情况下,当您想要并行测试许多基于 btrfs 的 Linux 发行版,但没有自己的 1TB 硬盘时)。在这种情况下,在与 Ubuntu 相同的分区上安装下一个 Linux 操作系统(但在不同的根子卷上)后,尝试重复数据删除它。如果是类似的发行版(如Linux Mint),您将节省大量空间!
复制之间分区,使用btrfs send
和btrfs receive
- 这将自动保留所有链接和内容;它相当于dd
,但只会复制相关信息,并对子卷进行操作,而不是对整个分区进行操作。