约莫是今年二月份的时间, 我一时冲动, 拿了一台2017年产的联想二手笔记本安装了ArchLinux, 原本只是打算装Linux只是玩一玩,
但是后来逐渐变成了主力机(真香), 随着开发和其他需求的增加, 原本的4核处理器, 8G内存和256G的磁盘空间就显得有点太憋屈了.
于是在今年暑假, 我换了一台thinkbook14, 拥有了16G/2T的配置. 接下来的工作就是把系统迁移进入新的硬件

hardware info

1. 备份操作系统

移植过程中会大量使用root权限, 因此为了避免操作失误造成不可逆的后果, 需要进行备份.

Warning
此处需要注意文件系统的一致性, 我早些时候使用的是老的ntfs移动硬盘进行备份, 最后造成硬盘损坏, 无法进行自动的挂载.
在Windows下修复无果之后只能重新格式化

1
sudo rsync -aAXHv --exclude='/dev/*' --exclude='/proc/*' --exclude='/sys/*' --exclude='/tmp/*' --exclude='/run/*' --exclude='/mnt/*' --exclude='/media/*' --exclude='/lost+found/' / /your_backup_dir

2. 制作安装盘

移植操作系统的主要思路主要有两种, 即自上而下和自下而上, 这里推荐一篇Wiki. 我这次主要采用的是自上而下的思路.
首先将操作系统和其中用户的文件一并移植进入U盘, 成为移动的启动U盘, 再将U盘中的系统移植进入新电脑的硬盘.

2.1 制作启动U盘:

  • 先准备一个移动储存介质(可以是U盘或者移动硬盘), 其容量大小需要大于旧电脑医用空间的大小.

  • 记下旧电脑文件系统信息: lsblk -f

  • 备份U盘中的文件后, sudo fdisk /dev/sda 进行重新分区:

    • m打印帮助信息

    • 首先抹除原有分区信息d指令, 一直回车, 直到输入p指令得到没有分区的结果

    • n创建新的分区, 第一分区较小, 将来会作为引导分区, 挂载 /boot目录, 另一个则是根分区. 这里两个分区的分区类型, 第一分区是EFI System, 第二分区则是默认的Linux

    现在系统的分区情况

    • w指令将分区信息写入磁盘
  • 进行格式化操作sudo mkfs.vfat /dev/sda1, 第一分区是引导分区, 于我来说是vfat文件系统, 你应当填入对应的引导分区文件系统类型.
    sudo mkfs.ext4 /dev/sda2, 为第二分区写入系统的文件系统, 这里也需要填写和你系统对应的文件系统类型

  • 这时再lsblk -f, 就会看到U盘被分为了两个分区. 记下出现的UUID!!一会要考!! sudo mount /dev/sda1 /run/media/usrname/ 首先挂载第一分区, sudo rsync -aAXHv /boot/* /run/media/usrname, 将/boot/目录下的文件拷贝到引导分区内, 修改其中的/grub/grub.cfg, 将里面所有旧的UUID替换成新的, 这保证引导程序按着UUID能正确的找到根文件系统所在的设备. 最后sudo umount /run/media/usrname, 解挂载第一分区.

  • 然后使用相同的手法完全的克隆整个根目录到第二分区, 修改/bost/grub/grub.cfg, /etc/fstab. 也是替换UUID, 后者是系统加载时负责配置目录挂载过程的配置文件. 最后要解挂载.

2.2 移植到新电脑

现在就可以插在新电脑上了. 但是在进行系统的移植之前, 需要解除电脑的security boot, 这是一种保护电脑, 不允许从外部USB设备启动的机制. 在开机上电, 快要出现品牌徽标前不断的按F2因电脑被型号而异, 值得一试的有F1, F2, F12, 进入设置, 关闭security boot, 然后重启, 用相同的手法进入选择从何设备启动的界面 于我来说是F12, 也因电脑型号而异., 选择从U盘启动, 只需要利用这个U盘里面的系统对电脑里的硬盘做相同的分区, 格式化, 拷贝和修改文件操作就行了.

Tips:

  • 这里可以尝试新的分区方式, 比如将home单独放在一个分区; 或者像我一样, 电脑里两块硬盘, 一块做根分区, 另一块作为数据盘挂在~/Data下.

  • 修改分区方式是在刚刚开始进行重新分区格式化时进行, 之后需要修改 /etc/fstab, 使之挂载到对应的位置

my_fstab_file

  • 上图就是我的/etc/fstab, 从上到下分别是根分区, 引导分区和自己划定的数据分区. 其实要挂载其他的分区很简单, 其他的参数不用管, 只需要在对应的位置填写挂在位置和UUID即可, 其他的和上面我自己的~/Data分区保持一致即可

3. 事后处理

能够走到这一步, 那么移植系统已经算成功一半了, 有时重头戏可能会是事后处理部分. 因为旧电脑的系统配置很可能不适应新电脑的硬件.

我遇到的第一个问题的分辨率问题, 我的旧电脑分辨率只有 $1360 \times 768$ , 但是新电脑却高达 $2880 \times 1800$, 导致UI过小. 由于我是KDE桌面, 可以直接通过设置>>显示和监视器>>显示器配置进行设置缩放率

resolution_settings

但是我始终没有解决的一个问题是SDDM登陆界面的UI显示过小, 虽然也尝试过按照网上的教程去修改配置文件, 但是SDDM始终没有变化(只是输个密码, 其实只是好不好看而已, 所以就没再改了)

第二个问题则是声卡, 开始时这台电脑根本发不出一点声音. 于是我检查了声卡的硬件信息 lspci -k | grep media

media_driver_info

进一步发现声卡驱动没有安装. 然后在ArchWiki上搜索, 很幸运的发现了解决方案, 把对应的驱动装上, 重启就自动好了