本文最后更新于 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
|
/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
需要确认一下。