Date Modified Tags Linux

Introduction

本文记录的是将我的debian9 从原来的闪迪120G SSD迁移到三星 250G SSD的过程。

1. 准备工作

做好数据备份

所有的操作均在u盘的livecd下进行的。

2. 查清楚分区号

通过在root用户下fdisk -l查清楚目前的分区号。

比如,我的闪迪是/dev/sdb,有两个分区,一个200MB的boot是sdb1,剩下的是扩展分区的根目录sdb5。而三星是空的。

使用图形化的GParted在三星的那块硬盘上新建主分区,默认为sda1。

3. 使用dd拷贝数据

在网上查到的一些资料是直接拷贝整个硬盘/dev/sdb/dev/sda,在拷贝时,包括了分区表。导致250G的硬盘,拷贝结束后,里面有110GB(原硬盘的大小)的分区是拷贝过来的数据,剩下的是没有划分的空间,然而还不能直接调整新建的110GB的分区大小,把这没有划分的空间补充过去。

而且,由于历史遗留原因,一开始划分200MB的boot实在是不太方便的做法。因此,这里只拷贝根目录分区的内容过去,boot重新拷贝并标记上。

3.1 执行的dd命令

我的根目录所在的分区是/dev/sdb5,新硬盘划分的是/dev/sda1

dd if=/dev/sdb5 of=/dev/sda1

由于dd命令没有展示中间过程,因此使用另一条命令来让他输出中间过程:

watch -n 5 killall -USR1 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分区和新系统分区

cd /root/
mkdir boot
mount /dev/sdb1 /root/boot
# 挂载新硬盘分区可以跳过,因为在文件管理器里,点击新硬盘以后,会自动挂载到/media/ubuntu/your_uuid
mkdir sda
mount /dev/sda1 /root/sda
cp -aur /root/boot/*  /root/sda/boot/

3.3 更新硬盘信息

umount /dev/sdb1         // 记得在操作之前先卸载所有挂载
e2fsck -f /dev/sdb1
resize2fs /dev/sdb1

3.4 修改uuid,添加boot标记

如果你想修改uuid,比较简单的办法是打开gparted,在分区上右键,生成新的uuid。

同时还要修改/etc/fstab中的内容,替换掉原来的uuid

右键设置标记中选中boot,表明这个分区是有启动点的。

3.5 修复grub

更新grubupdate-grub2

如果重启后,进入系统有问题,但是可以进入grub rescue,自己又不知道到底问题出哪里的话,简单的办法是使用boot-repair这个工具。

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair

然后打开bootrepair进行一键修复即可。

我的在运行前,询问我/dev/sda是可移动硬盘吗,当然不是。。在认为他的自动处理能力有问题以后,我点开了高级设置,手动选择了正确的grub位置(/dev/sda),然后等待修复完成,大概不到10mins。

完成后重启即可进入系统。

Reference

把整个Linux系统迁移到另一个硬盘

Linux下修改引导器的工具:Boot-Repair

把一块硬盘上的 Linux 系统整个复制到新硬盘上的方法.


文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://findhao.net/easycoding/2070.html

Comments