BTRFS 分区迁移记录

我的系统之前装在一个512G的硬盘里,随着使用空间逐渐变得捉禁见肘,正好手头有块空闲的1T硬盘,就打算迁移过去,以下步骤是在 ChatGPT 的帮助下完成的,我只是做个简单记录。

我使用的是 BTRFS(B-tree文件系统),它提供了高级快照、克隆和高效的数据存储等功能。当涉及到克隆BTRFS根文件系统时,传统工具如Clonezilla可能不适用,因为它们无法有效地传输UUID或范围(extents)。为了解决这个问题,BTRFS提供了自己的克隆工具,并且也有第三方工具可供使用。

BTRFS提供的一个常用克隆工具是btrfs-replace

btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

以下是我的源设备和目标设备的磁盘信息:

源设备
设备                起点       末尾      扇区    大小 类型
/dev/nvme1n1p1      2048    2095797   2093750 1022.3M EFI 系统
/dev/nvme1n1p2 991825920 1000214527   8388608      4G Linux swap
/dev/nvme1n1p3   2097152  991825919 989728768  471.9G Linux 文件系统


目标设备
设备            起点       末尾       扇区   大小 类型
/dev/sdb1       2048    2099199    2097152     1G Linux 文件系统
/dev/sdb2    2099200  136316927  134217728    64G Linux swap
/dev/sdb3  136316928 2000408575 1864091648 888.9G Linux 文件系统

克隆 EFI 分区

首先,将源设备 /dev/nvme1n1p1 中的 EFI 分区内容克隆到目标设备 /dev/sdb1 上:

sudo dd if=/dev/nvme1n1p1 of=/dev/sdb1 bs=4M

创建 Btrfs 文件系统

如果目标设备的 /dev/sdb3 分区尚未格式化为 Btrfs 文件系统,请使用以下命令进行格式化:

sudo mkfs.btrfs /dev/sdb3

挂载目标设备

创建一个临时目录作为挂载点,并将目标设备的 Btrfs 分区挂载到该目录:

sudo mkdir /mnt/target
sudo mount /dev/sdb3 /mnt/target

使用 btrfs replace 替换分区

使用 btrfs replace 命令将源设备的 Btrfs 分区替换到目标设备的 Btrfs 分区上:

sudo btrfs replace start -f /dev/nvme1n1p3 /dev/sdb3 /mnt/target

此命令将启动替换过程,并将源设备的 Btrfs 分区数据复制到目标设备的 Btrfs 分区中。

替换过程可能需要一段时间,具体时间取决于数据量的大小。

等待替换完成

等待替换过程完成。您可以使用 btrfs replace status 命令来查看替换进度:

sudo btrfs replace status /mnt/target

重启计算机

重新启动计算机,并选择从新的 Btrfs 分区引导,这时会发现可以进入系统了,但新的 1T 盘却只有 512G 的磁盘空间,这时使用 Live CD 进入实时镜像,使用 GParted 检查一下这个新分区,它会自动修复磁盘空间。

修复完重启即可正常使用。

Comments

添加新评论

注意:评论会以邮件形式发送给我

Comment Atom Feed