1

记一次将Gentoo系统从HD迁移至SSD

公司办公的主力电脑,是一块1T的机械硬盘,最近领导开心,给大家每人配了块256G的固态硬盘,于是我今天把机械硬盘里的Gentoo,迁移到了固态中。

磁盘分区

插入SSD后,旧的HD由原来的sda变成了sdb,新SSD成了sda。

原来HD的分区内容如下:

sdb1,EFI分区,原来挂载至/boot/efi下。
sdb2,swap分区,
sdb3,/home分区,
sdb4,/分区,

加入SSD后,准备新旧硬盘混用,新分区规划如下:

sda1,/分区
sdb1,EFI分区,挂至/boot/efi下。
sdb2,swap分区
sdb3,/home
sdb4,/var

/var放至HD下,以避免对SSD的频繁读写。

现对固态硬盘进行分区:

root # parted /dev/sda

(parted) mklabel gpt

# 为了对齐,以1作为起始,使用整个SSD的95%
(parted) mkpart primary ext4 1 95%

# 检查是否对齐
(parted) align-check optimal 1
1 aligned

(parted) quit

格式化分区

root # mkfs.ext4 -E stride=128,stripe-width=128 /dev/sda1

拷贝文件

清理系统垃圾

eclean distfiles
rm -rf /usr/portage/distfiles/*

挂载SSD

mkdir /mnt/gentoo
mount -o discard /dev/sda1 /mnt/gentoo

使用cp -av命令,将/下,除/dev/mnt/proc/run/tmp/var/sys以外所有目录,拷贝至/mnt/gentoo下。此处也可以使用dd命令。

然后手动创建/mnt/gentoo/run目录

mkdir -v /mnt/gentoo/run

将原/var下目录拷贝至/根下:

cp -av /var /

配置系统

挂载所需的目录,然后chroot

mount -t proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

使用blkid命令,查看硬盘的UUID。

编辑/etc/fstab文件,按硬盘分区规划,完善文件。

#/dev/sda1
UUID=XXX / ext4 defaults,relatime,discard 0 1

/tmp分区,放到HD上:

mkdir -pv /var/tmp
ln -s /var/tmp /tmp

/etc/portage/make.conf下缓存文件的路径,也设置到HD中。

安装Grub引导

安装,并配置grub

grub-install --target=x86_64-efi --efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg

重启系统

取消挂载,重启系统,享受新系统。

exit

umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot

问题排查

刚安装SSD后,系统无法启动,显示无法找到sda4。
原因是原来HD变成了sdb,所以grub应该寻找的是sdb4才对。

解决方法:
重启计算机,在grub选择菜单,近e进入编辑模式,将hd0修改为hd1,将sda4修改为sdb4,按F10从HD启动系统。


小郭
14 声望0 粉丝

嵌入式工程师