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

0.096字数 311阅读 9566

买了个固态,不想重装,所以鼓捣着直接把旧硬盘数据迁移到新硬盘中。遂有此文。


原来机械硬盘是msdos分区表,新固态硬盘是gpt分区表,数据大小在100GB以内,所以使用 dd 命令迁移。

我系统都是只装在一个分区中,所以直接在 root 模式下执行迁移:

# dd if=/dev/sda1 of=/dev/sdb1

大概一个小时就迁移完成了。

这里要注意的是拷贝的源和目标分别是 /dev/sda1 和 /dev/sdb1 这两个分区,而不是 /dev/sda 和 /dev/sdb 这两个硬盘名称。

最后更新一下硬盘信息(不然显示的大小信息等还是旧硬盘的信息):

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

dd 工具会将 uuid 也一起拷贝,所以拷贝完成之后,只要将旧的硬盘拆卸下来,替换上新的硬盘,不用修改 /etc/fstab 文件,就能按照你以前的设置自动挂载。

重新启动电脑,顺便修改下Grub,因为莫名其妙出现了一个error问题(具体忘了,上午的事)。
修改文件 /etc/default/grub

# 设定默认启动项,推荐使用数字
GRUB_DEFAULT=0

# 注释掉下面这行将会显示引导菜单
#GRUB_HIDDEN_TIMEOUT=0

# 黑屏,并且不显示GRUB_HIDDEN_TIMEOUT过程中的倒计时
GRUB_HIDDEN_TIMEOUT_QUIET=true

# 设定超时时间,默认为10秒
# 设定为-1取消倒计时
GRUB_TIMEOUT=10

# 获得发行版名称(比如Ubuntu, Debian)
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

# 将会导入到每个启动项(包括recovery mode启动项)的'linux'命令行
GRUB_CMDLINE_LINUX=""

# 同上,但是只会添加到 normal mode 的启动项
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

# 取消注释以允许图形终端(只适合grub-pc)
#GRUB_TERMINAL=console

# 分辨率设定,否则采用默认值
#GRUB_GFXMODE=640x480

# 取消注释以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux
#GRUB_DISABLE_LINUX_UUID=true

# 取消启动菜单中的“Recovery Mode”选项
#GRUB_DISABLE_LINUX_RECOVERY="true"

# 当GRUB菜单出现时发出鸣音提醒
#GRUB_INIT_TUNE="480 440 1"

最后更新一下:

sudo update-grub2

推荐阅读更多精彩内容