1. 起因:想把移动硬盘的ubuntu系统迁移到虚拟机,这样在外出使用的时候比较方便,也省得重新搭虚拟机的环境了。
2. 迁移条件:
(1) 带有ubuntu移动硬盘一块;
(2) 虚拟机,我有一个虚拟机装了ubuntu 16.04系统。仅安装了系统,以前留下来的;
(3) ubuntu的启动盘或光盘映像(这条可以没有,是我不会操作才用了的。。)。
(4) U盘或移动硬盘。
3 备份要移动的系统。
备份系统最后是用U盘做个启动盘或用光盘映像进入使用系统再备份,如果直接在当前系统下备份的话,在备份完会提示“因上次异常而退出”,并不影响实际的使用。
我是在当前使用的系统下直接备份的,恢复完备份的系统后,提示我gnome-software 没有安装,使用apt-get很容易可以完成安装。
sudo tar -cvpzf /media/yy/YUY/ubuntubackup/ubuntu_backup@`date +%Y-%m+%d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/boot --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run --exclude=/dev /
这个是备份文档的存放路径,我的移动硬盘名字叫YUY,挂载在/media/yy目录下,ubuntu_backup@date +%Y-%m+%d.tar.gz是我备份文件的名字,这里用了一个shell命令date +%Y-%m+%d用于获取当前时间,因为备份嘛,注明时间戳还是有必要的,然后.tar.gz是说明这个文件是用tar进行打包,gzip进行压缩的。所以要根据你自己情况换为你自己的备份文件目录和文件名。
参数:
-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定备份文件的路径
–exclude: 排除指定目录,不进行备份
Note: 注意–exclude参数,可以使相应的目录不进行备份
/proc:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。
/tmp:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt:临时挂载点,你可以自己挂载一些文件系统到这里。
/run:系统从启动以来产生的一些信息文件。
/home:用户家目录,存放用户个人文件和应用程序。
/boot:和系统启动相关的文件,像grub相关文件都放在这里,这个目录很重要!
/dev : 这个目录保存系的各种设备。这个目录千万不要备份!我因为使用备份硬盘的系统时候,把这个目录备份了。还原的时候这个目录覆盖掉了虚拟机的/dev出现了找不到root目录的问题。
4. 备份虚拟机现有的文件,
备份/etc/fstab
sudo cp -a /etc/fstab /etc/fstab.old
5. 恢复备份好的系统到虚拟机。
(1)连接硬盘到虚拟机
(2) 解压备份好的数据
sudo tar -xvpzf /media/yy/YUY/ubuntubackup/ubuntu_boot_backup@2019-11-10.tar.gz -C /
(3) 使用保存好的fstab文件代替
sudo mv /etc/fstab.old /etc/fstab
6. 到此为止,系统已经完成恢复,并且可以重启,
只是目前系统使用的内核是虚拟原有的内核而不是硬盘中系统的内核。
(1) 我虚拟ubuntu安装选择的是lvm安装,硬盘中的系统则是直接装到硬盘,两个存在在差异,硬盘中的内核无法在虚拟机上启动。
直接使用硬盘中的内核启动的话,会出现找不到 根目录的情况 ubuntu--vg-root :/dev/mapper/ubuntu--vg-root does not exist
(2) 为使硬盘中的内核在虚拟机上成功启动,需要重新编译内核。重编译内核需要把虚拟机内核使用的.config文件拷贝到要编译的内核文件夹下。
(3) 安装完成新内核后使用 sudo update-grub 更新启动器。
(4) 例我把虚拟的内核有4.15改到4.4.167(不要为啥往低改,我只是瞎试试玩~)
(a) 复制.config文件 sudo cp -a /usr/src/linux-headers-4.15.0-45-generic /usr/src/linux-4.4.167/
(b) 清除内核之前的文件
sudo make mrproper /清除编译过程的所有中间文件
sudo make clean
(c) 编译 sudo make -j4 根据CPU的核心数改写数字,可以提高编译速度。
.config是拷贝过来的,编译时,系统会提示好多信息,直接回车就OK。
(d) 安装模块
sudo make modules_install
sudo make install
(e) 修改/etc/default/grub文件, 在GRUB_HIDDEN_TIMEOUT=0 前加#,注释掉该行,可以在系统启动时,通过grub界面选内核,完整grub的配置如下。
(f) 更新grub sudo update-grub
7. 到现在可以重启了! reboot。重启之后,提示系统错误。通过如下方法解决。
(g) sudo rm -rf /var/crash (官方解决方案)
(h) sudo apt-get remove apport
执行完(h),终端会提示执行(l)命令(如果系统提示的不是这条命令,就一定要按照系统提示的执行,我翻了下命令的记录,是这条),
执行(l)命令系统会弹出窗口,选择/boot所在的分区即可。lvm模式下。/boot是一个独立的分区。
(l) sudo dpkg --config -a
我的系统提示gnome-software 没有安装,所以 sudo apt-get install gnome-software 。 没有这条错误的可以忽略这步。
大功告成! 享受迁移完的系统吧!
参考:
麦田的绿: https://blog.csdn.net/qq_35523593/article/details/78545530
Mr番茄蛋: https://blog.csdn.net/qq_35203425/article/details/87807221
__Hynn01:https://blog.csdn.net/weixin_38180645/article/details/82856407
hanguoshifoujianfeng:https://blog.csdn.net/hanguoshifoujianfeng/article/details/54575582