Ubuntu 14.04的迁移和grub 修复
最近需要在Ubuntu上干活,但是台式机的电脑上没有安装Ubuntu,决定将一个安装在移动硬盘上的Ubuntu系统迁移到台式机的硬盘上。目标操作系统 : Ubuntu 14.04
步骤如下所示。
磁盘分区
首先,在台式机的硬盘上创建一个空白的磁盘分区,作为Ubuntu的根分区。这里作者采用单独的根分区。首先在台式机硬盘上切下来一块100G的磁盘,可以利用Windows 自带的磁盘管理工具或者在Linux下用gparted工具都可以,具体方法自行百度。需要注意的是,一块硬盘上只能有4个分区,如果原磁盘上已经存在4个主分区,则需要将其中的一个主分区变成逻辑分区。查阅资料显示不存在一种方式可以在不损坏数据的情况下将主分区变成逻辑分区。所以如果需要进行上述操作,请现行备份该主分区上的数据。操作结果:
在台式机上新建了一个100G的空白分区,文件格式为ext4。下文称该分区为目标分区。
系统复制
下述操作在移动硬盘上的Ubuntu操作系统上完成。在移动硬盘的Ubuntu系统下,将Ubuntu的根目录下的所有文件(除/mnt和/media目录外)拷贝到台式机的Ubuntu分区上。在此之前,需要先挂载台式机硬盘上的Ubuntu分区,假设挂载点在/mnt/Ubuntu上。
sudo cp -ax / /mnt/Ubuntu/
注意:
- 移动硬盘上的Ubuntu系统仅有一个单独的根分区,(boot、home等没有单独分区),而在台式机上也是一个单独的根分区。所以需求不一样的同学需要自行考虑。
修改工作
拷贝完成后,需要做一些修改工作。系统在启动时会默认挂载一些磁盘,一般是根据UUID进行操作。如果迁移了系统,磁盘的UUID发生变化,而配置文件不变,将会出现错误。下面就是修改启动时默认挂载的磁盘。修改目标分区中/etc/fstab中的uuid ,uuid的查看命令是sudo blkid 。例如,对于/mnt/Ubuntu目录下的etc/fstab文件# / was on /dev/sdb5 during installation
UUID=d2275827-0270-433a-9f4d-c31793d3af6f / ext4 errors=remount-ro 0 1
将上面的UUID换成目标分区的UUID即可。
安装grub
需要修复grub,比较复杂的方式是手动修改目标分区下的/boot/grub/grub.cfg文件,修改其中的UUID值和磁盘分区,其中磁盘分区的格式大概为(hd0, msdos5),其中hd0表示第0块硬盘,msdos5表示硬盘上的第5块分区。grub下的磁盘分区的表示方式,具体请自行百度。然后执行命令
grub-install /dev/sda
其中,上述命令中的/dev/sda对应目标分区所在的磁盘。如有不同,请自行修改。
另外一种方式相对比较简单(推荐):
sudo grub-install --boot-directory=/mnt/Ubuntu /dev/sda
同样的,按照自己的需求修改/dev/sda为其他可能的结果。
重启系统/修复grub
完成上述操作后,理论上就可以从台式机硬盘上的Ubuntu启动了。但是,不排除可能上述操作出现一点点问题,电脑无法正常开机。出现启动失败情况,系统将会进入grub rescue模式,电脑上出现如下提示符:
grub rescue>
首先,执行命令 ls,查看当前硬盘。可能出现的结果如下:
(hd0,1),(hd0,5),(hd0,3),(hd0,2)
然后查找上面的所有分区,找到boot文件夹所在的位置,具体操作方式:依次执行命令
grub rescue>ls (hd0,X)/
其中,X代表上述命令中的1,2,3,5。将会列出每种分区下的文件和目录。
如果其中分区X存在boot目录,则进行如下操作
grub rescue>set root=(hd0, X) # 设置根目录
grub rescue>set prefix=(hd0, X)/boot/grub #设置grub目录,如果是boot单独分区,上述命令应该变成set prefix=(hd0, X)/grub
grub rescue>set vmlinuz=/vmlinuz ># 设置vmlinuz
grub rescue>set initrd=/initrd # 设置initrd
grub rescue>insmod normal
grub rescue>normal # 进入正常的启动界面
应该就可以进入熟悉的图形化启动界面了~
需要注意的是,有的介绍上说grub rescue的方式如下:
grub rescue>set root=(hd0,5)
grub rescue>set prefix=(hd0,5)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
grub rescue>normal
但是在作者的操作过程中,上述命令
grub rescue>insmod /boot/grub/normal.mod
不可行。参考连接:
http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=348503
在迁移后的Ubuntu下重装Grub
进入Ubuntu,在Ubuntu系统下执行操作sudo update-grub
sudo grub-install /dev/sda
观察到输出结果正常,没有错误后,理论上系统的迁移就算彻底完成了~
经过一番折腾,原来移动硬盘上的数据、软件和配置完整的复制到了新的电脑上,还是熟悉的配方和味道~
如果有什么问题,可以联系houqi1993@gmail.com