SSD 迁移记

本文最后更新于 2024年3月20日 凌晨

由于某些需求,决定上SSD,提高一下硬盘读写速度。上二手东买了三星(SAMSUNG) 860 EVO 最初的想法是作为数据盘使用,即操作系统还是跑在机械硬盘上,仔细一思考,还是折腾一下,要不实在是有些浪费,事实证明,折腾是值得的,感觉就像飞一样。

首先查看一下磁盘原始的情况:

1
2
3
4
$ mount

/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,stripe=4)
/dev/mapper/fedora-root on / type ext4 (rw,relatime,seclabel)

当然首先要把 SSD 处理一下,安装一下 gparted 图形化界面很好用。

1
sudo dnf install gparted

建个分区表,选择 gpt,分个区,/dev/mapper/fedora-root 大小为50G,先分个50G的分区,剩下的全部给 另外一个分区,格式化为 ext4。操作完成后,用fdisk 查看一下:

1
2
3
4
5
6
7
8
9
10
11
12
$ fdisk -l

Disk /dev/sdb:232.9 GiB,250059350016 字节,488397168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:

设备 起点 末尾 扇区 大小 类型
/dev/sdb1 2048 104859647 104857600 50G Linux 文件系统
/dev/sdb2 104859648 488396799 383537152 182.9G Linux 文件系统

将原来系统的 / dd 到新的SSD 的 /dev/sdb1

1
dd if=/dev/mapper/fedora-root of=/dev/sdb1 bs=1M

用新的 root 把系统启动起来,reboot 后进入引导界面,按e 编译,找到 root=/dev/fedora/root 改为 root=/dev/sdb1 按 ctrl+x 启动,一会儿就进系统了,速度提升很大。现在需要把 grub.cfg 更新一下,因为我们是手动修改进入了新的根,如果重启的话,还是会使用老的根,因为grub.cfg 里就是这么写的。

要生成新的grub.cfg 需要使用grub2-mkconfig, 命令很简单

$ grub2-mkconfig -o /boot/grub2/grub.cfg

执行命令后重启,md 怎么又进到老根去了。

这里折腾了好久,第一个问题Fedora 的内核出bug 了,每次重启都要等待非常久的时间,所以正确的顺序应该是先升级系统再 dd 。解决了Fedora 内核的问题后,发现还是进不到新根。认真地查看 grub.cfg 内容, grub2 改动挺大,不太熟悉了。

1
2
3
4
#
# DO NOT EDIT THIS FILE
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub

启动有两个信息,确实是使用 grub2-mkconfig 生成,/etc/default/grub 里有默认配置

1
2
3
4
5
6
7
8
9
10
$ cat /etc/default/grub


GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

grub2-mkconfig 里查找根用这句

1
GRUB_DEVICE="`${grub_probe} --target=device /`"  

执行查看结果, 发现正确

1
2
3
$ grub2-probe --target=device /

/dev/sdb1

可是为什么不能正确启动呢,看看生成的 grub.cfg 文件

1
linux16 /vmlinuz-4.17.2-200.fc28.x86_64 root=UUID=290a98e3-7937-49db-a971-4d0e49567cf0

使用的是 UUID,并不是 /dev, 执行 sudo blkid 查看一下各分区的 uuid

1
2
3
4
# blkid

/dev/sdb1: UUID="290a98e3-7937-49db-a971-4d0e49567cf0" TYPE="ext4" PARTUUID="fe64f395-7520-42c3-939b-b17eb7064cec"
/dev/mapper/fedora-root: UUID="290a98e3-7937-49db-a971-4d0e49567cf0" TYPE="ext4"

由于dd 的原因,/dev/sdb1 和 /dev/mapper/fedora-root 的 UUID 居然是相同的。首先想到的是把/dev/sdb1 的 UUID 给改了。放狗搜发现有下面的方法

1
2
3
4
$ uuidgen 
8e4c27b2-c63e-4d1d-8ac4-5ddd90669eb0

tune2fs /dev/{device} -U {uuid}

可是tune2fs 时报错,死活改不过来。

lzx 提示可以看看如何是grub.cfg 不使用uuid, 发现有个参数 GRUB_DISABLE_UUID=true, 在 /etc/default/grub 加上这行,重新生成 grub.cfg 。
$ grub2-mkconfig -o /boot/grub2/grub.cfg

重启,成功进入到SSD 的新 root 。

有的系统上的参数可能不太一样,ubuntu 系统里这个参数好像的是 GRUB_DISABLE_LINUX_UUID=true 需要确认一下。

  • EOF

SSD 迁移记
https://usmacd.com/cn/ssd/
作者
henices
发布于
2022年6月20日
许可协议