复制 btrfs 分区到另一块硬盘
本文最后更新于 2023年11月12日 晚上
双十一来了,我入手了心心念念的致钛Ti 7100 plus。 但是迟迟没有将它换到我的笔记本上,直到这周末,才终于有时间将数据迁移到新盘上面,可惜的是,我的 $HOME
已经在周五晚上的测试打包过程中被误删了,后来回滚到了今年 7 月的快照。不过幸运的是除了我以外没有其他用户被删 $HOME
,咱不用被挂在耻辱柱上了。
基本思路
由于 btrfs 有子卷 (subvolume),无法像以前 ext4 时候一样直接用 rsync 同步数据。但是我又不想直接全盘 dd
。
在咨询了群友以及在谷歌后,决定使用 dd
来迁移数据。基本步骤是
- 缩小 btrfs 所在分区
dd
缩小后的分区到新的硬盘上。
开始操作
应某群友的要求,这一部分我尽量详细地介绍具体操作。本操作需要你的电脑具有至少两个 nvme 硬盘位。
拆机换硬盘
- 电脑关机,拔掉电源。
- 脱下毛衣等易产生静电的衣物,双手摸墙 10s 放静电
- 用螺丝刀将电脑后盖拆开。
- 断开电脑的内置电池。
- 长按电源键 15s 放电。
- 顺便清一下灰,这一步可以不做。
- 换上新的硬盘到另一个槽位。
- 合上后盖(轻轻合在一起即可,不要拧后盖螺丝)。
复制文件
- 接上电源,外接 USB, 从 livecd 启动。启动后可以拔掉 U 盘。(默认 copytoram)。
- 给新硬盘分区,分区布局与旧硬盘一样(我的是 512M EFI,其他全给 btrfs),这一步不用 mkfs。
- 用
dd
拷贝旧的 EFI 分区。 - 挂载旧硬盘的 btrfs 分区到
/mnt
1 |
|
- a. 查看 btrfs 分区的用量,注意两个地方,
Device allocated
与Free
的min
.
1 |
|
- b. 缩小分区,我们将分区缩小比
min: 548.94GiB
稍微小一点的大小,比如缩小540G
.
1 |
|
重复上述缩小分区的过程,直到不能再缩小(或者到你认为合适的大小)。
操作完毕之后将它卸载掉
1 |
|
- 开始拷贝分区。这里
/dev/nvme0n1p2
是旧硬盘,/dev/nvme1n1p2
是新硬盘。其中bs
是 block size, 需要大于一个扇区的大小(通常为4k),可以设置得大一些,这样复制得快。(比如16M
),count
是块数量,需要满足
bs * count >= Device size
,我们假设bs=16M
, 设备大小我们成功缩小到了 1T, 则count
至少应该为 65536, 实际中应该稍微再多一些为好。
1 |
|
等到跑完就拷贝完毕了。
重建 boot 分区
这一步可能不是必要的,但是保险起见还是操作下。
- 将新硬盘挂载上,然后
chroot
进去
1 |
|
- 在
chroot
里面 执行mkinitcpio -P
重新生成引导。
注意可以不用修改fstab
并重新生成grub.cfg
检查能否启动
关机,断开电源,打开后盖,双手摸墙放静电,拔掉旧硬盘,将其他的硬盘一并插回去(比如 windows 盘)。
按电源键开机,进入 BIOS, 添加启动项指向新的硬盘,EFI/GRUB/grubx64.efi
,然后将它调到第一启动项,保存重启。应当会正常进入 linux 系统。
关机,断开电源,双手摸墙放静电,长按电源键放电。然后将电池插上。按电源键开机,能正常进入系统即可。
然后继续关机,把后盖合上,卡扣也扣上,螺丝拧上,插上电源,开机。
教程完毕。
推荐阅读
复制 btrfs 分区到另一块硬盘
https://blog.askk.cc/2023/11/12/move-btrfs-to-another-disk/