前言
之前一直在用老旧的联想笔记本来安装 ArchLinux 和 Windows,但是最近要研究源码了,需要一个 IDE 来跟踪代码。因为开源代码存在着大量的 bash 脚本,不方便用 Windows 调试,所以需要 Linux 中安装 IDEA 来调试。目前台式电脑装虚拟机麻烦还会废性能。WSL2 性能又差。Win 笔记本不合适拿来开虚拟机和 WSL。最终只能是老旧的电脑,开着 ArchLinux 安装 IDEA 来调试代码。但目前 Liunx 是装在 USB 的外置移动硬盘。读写性能非常差,根本跑不起来 IDEA。所以想格式化掉硬盘中的 Windows,把 ArchLinux 迁移到电脑硬盘。(因为不想重新装环境和系统)
计划
大概搜了下方案,有两种:
- 借助工具,打包系统,然后还原(大多数是给 win 用的,看起来就不靠谱)
- tar 命令打包系统文件,再解压到系统盘。(压缩过程慢,还可能打包不好)
- 进入
Live CD环境,挂载磁盘,然后dd直接拷贝分区信息。(自己想的,但有挂载 UUID问题,后面会提到)
根据原理,想了下,还是方法3靠谱。就算是搞崩了,不会影响移动硬盘的 ArchLinux 。搞不好大不了再格式化一次硬盘重来。接下来就开始。
步骤1:备份和分区
- 启动
Windows把资料备份一下。然后关机。 - 插入 U 盘,插入移动硬盘,
F12进入ArchLinux Live CD环境。此时,sda是电脑硬盘,sdb是移动硬盘(ArchLinux),sdc是 U 盘(ArchLinux Live CD) - 直接格式化
sda。在其中分区。
1 | fdisk -l |
分区完成后,就可以开始复制数据了。
步骤2:复制系统
最简单就是无脑 dd。我自用没用到其他分区,所以只需要复制 / 和 /boot。swap 分区就直接分区就好。
分区 /boot 和 SWAP
1 | dd if=/dev/sdb1 of=/dev/sda1 |
/boot 因为只有 512MB 所以很快。
分区 /
这里可以无脑 dd 和上面 /boot 分区一样。但问题是它是拷贝整个移动硬盘。(512 GB),而我的整个系统文件目录就加起来才 68 GB。整个拷贝下来不划算。我能不能只复制这 68 个 GB 呢?
于是这里我想了个办法,既然目前是在 Live CD 环境,我先格式化了它,然后同时挂载了两个盘,然后用 cp 把整个系统文件拷贝过去。
注意:两个分区的文件系统格式要一样。否则,迁移完成后,boot引导最终找到硬盘,尝试挂载会报错(unknown filesystem type ‘xfs’)、
1 | # dd (copy 6+ hours) |
修复 grub 引导和 fstab 挂载
复制好的系统文件,还不能直接重启打开。电脑启动后,先运行 bios,选择加载盘后,先进入 /boot 分区。由于是直接 dd 过来的,所以会根据 UUID 引导加载移动硬盘的系统。所以需要修改 UUID 让他找到硬盘中的 / 分区。
1 | # 查看 uuid |
重启
这里要在关机完成后,拔出 U 盘和移动硬盘。理论上能开机和正常使用了。使用测速软件,发现 U 盘连接的移动硬盘会比电脑硬盘慢 3倍。
但是桌面环境流畅了,虽然打开 IDEA 还是卡,但是至少能 index 完成。能够看代码了。至于能不能跑代码,那另说了。说不定要买固态 SATA 硬盘来才行。
后面
检查挂载情况,可以开启 swap 了,格式化掉移动硬盘的系统了,删掉备份配置
1 | # check |