原文在这里:https://www.findhao.net/easycoding/2070
Introduction
老师评上了学校的青年学者重点培养计划,每年多了好多资金。实验室机器的配置也在逐步升高。上一批加ssd的时候,我们没分到,这次补上。
本文记录的是将我的debian9 从原来的闪迪120G SSD迁移到三星 250G SSD的过程。
1. 准备工作
做好数据备份!
所有的操作均在u盘的livecd下进行的。
2. 查清楚分区号
通过在root用户下fdisk -l
查清楚目前的分区号。
比如,我的闪迪是/dev/sdb
,有两个分区,一个200MB的boot是sdb1,剩下的是扩展分区的根目录sdb5。而三星是空的。
使用图形化的GPrated在三星的那块硬盘上新建主分区,默认为sda1。
3. 使用dd拷贝数据
在网上查到的一些资料是直接拷贝整个硬盘/dev/sdb
到/dev/sda
,在拷贝时,包括了分区表。导致250G的硬盘,拷贝结束后,里面有110GB(原硬盘的大小)的分区是拷贝过来的数据,剩下的是没有划分的空间,然而还不能直接调整新建的110GB的分区大小,把这没有划分的空间补充过去。
而且,由于历史遗留原因,一开始划分200MB的boot实在是不太方便的做法。因此,这里只拷贝根目录分区的内容过去,boot重新拷贝并标记上。
3.1 执行的dd命令
我的根目录所在的分区是/dev/sdb5
,新硬盘划分的是/dev/sda1
。
由于dd命令没有展示中间过程,因此使用另一条命令来让他输出中间过程:
注意dd命令也会拷贝uuid过去,意味着,/dev/sda1
的uuid和/dev/sdb5
的uuid是一样的。
uuid是一个唯一的标识符,因为类似/dev/sda
这样的映射点,在新设备加入的时候,可能会生成新的映射点,比如原来系统里是/dev/sda
现在变成了/dev/sdb
等等,所以一般情况下,在/etc/fstab
里写自己规则的时候,都是用uuid而非映射点。
可以不修改新硬盘分区的uuid,也就省去了修改/etc/fstab
或者/boot/grub/grub.conf
的麻烦。
3.2 拷贝boot分区内容
我的原系统boot分区在/dev/sdb1
,准备将其内容拷贝到新硬盘的默认根目录下的boot
文件夹。
先挂载boot分区和新系统分区
3.3 更新硬盘信息
3.4 修改uuid,添加boot标记
如果你想修改uuid,比较简单的办法是打开gparted,在分区上右键,生成新的uuid。
同时还要修改/etc/fstab
中的内容,替换掉原来的uuid
右键设置标记中选中boot,表明这个分区是有启动点的。
3.5 修复grub
更新grubupdate-grub2
。
如果重启后,进入系统有问题,但是可以进入grub rescue,自己又不知道到底问题出哪里的话,简单的办法是使用boot-repair这个工具。
然后打开bootrepair进行一键修复即可。
我的在运行前,询问我/dev/sda
是可移动硬盘吗,当然不是。。在认为他的自动处理能力有问题以后,我点开了高级设置,手动选择了正确的grub位置(/dev/sda
),然后等待修复完成,大概不到10mins。
完成后重启即可进入系统。