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

把整个Linux系统迁移到另一个硬盘,第1张

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

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

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

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

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

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

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

修改文件 /etc/default/grub :

最后更新一下:

这段时间新冠肺炎疫情又波及了好几个省,下个星期又要在家办公了,哪都不能去了。不过话说回来,在城里面本来也就没什么好玩的,也没什么地方好去的。

接着上一次的内容,要从网络加载内核和设备树,以及挂载网络根文件系统,需要在UBoot里面设置 bootcmd 和 bootargs 两个环境变量如下:

set bootcmd 'tftp 41000000 uImagetftp 42000000 exynos4412-fs4412.dtbbootm 41000000 - 42000000'

set bootargs 'console=ttySAC2,115200 root=/dev/nfs rw nfsroot=192.168.1.8:/samba/nfs/rootfs,proto=tcp clk_ignore_unused /init=/linuxrc ip=192.168.1.100:192.168.1.8:192.168.1.1:255.255.255.0'

这两个参数需要根据自己的实际情况加以调整,主要是nfs和ip的一些设置。

bootcmd 是内核启动命令,其表示使用tftp协议,从TFTP文件夹下加载uImage到41000000的内存地址。然后从TFTP文件夹下加载exynos4412-fs4412.dtb到42000000的内存地址,然后执行bootm命令,从41000000的地址启动内核。

bootargs 是内核启动的参数,比如设置控制台的串口参数,指定根文件系统(这里我们使用nfs从网络上挂载根文件系统,注意协议用tcp,如果用udp的话,很可能会因为丢包而导致挂载失败)

最后需要saveenv保存设置。

就绪之后,板子重新上电,不要回车打断UBoot,让其引导Linux内核启动,结果内核启动失败。

后来在群里问了老师,他们发了内核镜像和设备树过来,让我用他们编译的试试,我一试,还真能用。本来我还怀疑是不是根文件系统的问题,后来老师让我看看设备树,说是要注释掉下面这一段。

但是我一看,本来就是注释掉的啊。。。然后就无解了,我以为可能还是根文件系统的问题,群里问老师也没有再回,就搁置了两天,这也算是中间的一个小插曲吧。然后我刚刚又在群里问,另一个老师说这一段现在不需要注释了,就是要加进来。然后我就把注释去掉了,重新编译后,果然就可以启动了。

可以看到根文件系统已经挂载成功了,那这样我们的环境搭建部分就测试OK了,我们得到了一份可以在4412板子上运行的Linux内核源码,UBoot源码和根文件系统。

所以呢,感觉培训机构的资料管理挺乱的,各个老师之间的信息不同步,资料也不同步,视频可能是很老的,配套资料也过时了,你不问还不知道,这可能也是他们需要建立大量的群来答疑的原因吧,总之,体验不佳。当然他们觉得这些步骤你不需要做啊,直接用现成的虚拟机镜像就可以了嘛,编译工具链,各种依赖库,环境变量那些都给你搞好了,干嘛要自己搞。他们这种想法就只适合那些初学驱动的人,确实,如果你只想学习驱动,那确实用他们准备好的虚拟机镜像就可以了。但是如果我要换一个芯片,环境还得自己搭,那就不好使了,或者说我自己已经有虚拟机了,再搞一个镜像其实显得很累赘。

好了,今天就到这里了,后面就开始UBoot的移植学习。

如何把Linux系统移植到U盘或移动硬盘上,并从USB驱动器中启动并运行?下面我将教大家制作随身携带、即插即用的Linux *** 作系统。(把当前系统移植到移动硬盘上)

为什么需要这个功能呢?

硬件:

软件:

Linux发行版自带的工具 如 gparted grub cp

制作

Linux启动盘的制作分为以下几个步骤:分区、复制文件、安装grub并配置、测试。 目的是把当前系统移植到移动硬盘上。

从LiveCD启动,打开gparted分区工具, 把移动硬盘的分区表改为GPT 。我使用以下分区方案:

sdb1是UEFI+GPT模式下的引导分区,grub引导器就要装在这里。

sdb2是放数据的,为了与Winodws兼容所以采用NTFS。

sdb3是Linux系统的全部内容,如果你想把家目录单独分出来也可以。

后面留空备用,结果如下图

我原系统的文件储存在 /dev/nvme0n1p3 (根分区)和 /dev/nvme0n1p4 (家分区)上,把这两个分区挂载到 /mnt /mnt/home。每个人的分区情况不同,需要对应修改。挂载后,/mnt 目录包括原系统的所有内容。

挂载 /dev/sdb3 到 /media/backup,把 /mnt 内容全部复制到 /media/backup

cp -a /mnt/* /media/backup/

GRUB 提供一个安装程序grub-install用以安装 GRUB 到磁盘,下面是grub-install的一些常用参数及选项:

UEFI 特有参数及选项:

挂载 /dev/sdb1 到 /media/backup/boot/efi ,把grub安装到移动硬盘上

上面的 --boot-directory --efi-directory --removable 不可省略。

安装之后要修改grub配置文件,就让他自动生成好了。但要禁用os-prober功能——自动探测硬盘上的其他 *** 作系统然后生成配置。Linux To Go 不依赖于其他 *** 作系统,它的启动菜单里只有自己。注意,不要使用update-grub,因为它会修改UEFI启动项。

修改 /media/backup/etc/fstab,把UUID换成对应的值

安装grub后,还要手动修改 /media/backup/etc/fstab 。Linux To Go只需要自动挂载两个分区—— sdb1 ESP 和 sdb3 DEEPIN_ROOT,修改对应的UUID。

现在可以重启试试了。开机按下F12 UEFI启动菜单中有移动硬盘这个启动项,选择即可。

如果成功就OK;如果黑屏断电,查看/media/backup/boot/efi 下的文件 把BOOTX64.EFI删除,把 grubx64.efi 重命名为 BOOTX64.EFI 再重启。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7527102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存