前文:Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译
考虑到某些平台的编译要求持续更新, Ubuntu18.04已经不在支持后续的开发, 于是筹备制作一个基于Ubuntu20.04 的系统镜像.
在 Ubuntu 20.04 系统中创建一个系统镜像文件(img 文件),并确保其可以在另一台 Ubuntu 系统上通过 mount
和 chroot
使用,需要一系列步骤来完成系统备份、镜像创建以及后续的挂载操作。
准备工作
确认目标系统环境:
- 确保当前 Ubuntu 20.04 系统运行正常,且具有管理员权限(
sudo
)。 - 准备一个足够大的存储设备(如外接硬盘或分区),用于存放生成的镜像文件。
- 确保目标 Ubuntu 系统(用于挂载和 chroot 的系统)与源系统架构相同(例如,均为 x86_64)。
- 确保当前 Ubuntu 20.04 系统运行正常,且具有管理员权限(
安装必要的工具:
执行以下命令安装所需工具:sudo apt update sudo apt install -y rsync
清理系统:
在创建镜像前,清理系统以减少不必要的文件:sudo apt clean sudo rm -rf /var/log/*
创建系统镜像文件
创建空的镜像文件:
使用dd
命令创建一个空的镜像文件,大小需足够容纳整个系统(建议比实际使用空间大 20% 以上)。例如,创建一个 30GB 的镜像文件:sudo dd if=/dev/zero of=/path/to/u20.img bs=1M count=30720
/path/to/u20.img
:指定镜像文件的存储路径(确保有足够空间)。bs=1M
:块大小为 1MB。count=30720
:生成 30GB 的镜像文件(可根据需要调整)。
格式化镜像文件:
将镜像文件格式化为文件系统(如 ext4):sudo mkfs.ext4 /path/to/u20.img
挂载镜像文件:
创建一个挂载点并挂载镜像文件:sudo mkdir /mnt/img_mount sudo mount -o loop /path/to/u20.img /mnt/img_mount
使用 rsync 复制系统:
使用rsync
将当前系统复制到挂载的镜像文件中,排除一些动态或不必要的目录(如/proc
、/sys
等):sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/img_mount
-aAXv
:保留文件权限、属性,并显示复制进度。--exclude
:排除不需要复制的目录。
卸载镜像:
复制完成后,卸载镜像文件:sudo umount /mnt/img_mount
将镜像文件传输到目标系统
- 传输镜像文件:
将system.img
文件传输到目标 Ubuntu 系统,例如通过 USB 驱动器或网络传输:scp /path/to/u20.img user@target_system:/path/to/destination
使用镜像
参考: Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译
注意事项
硬件兼容性:
- 目标系统的硬件(如 CPU 架构)需与源系统兼容。
- 某些硬件驱动(如显卡、网卡)可能需要重新配置。
内核和引导:
- 本方法仅复制根文件系统,未包含内核和引导加载程序(如 GRUB)。若需完整启动,需额外配置目标系统的内核和引导。
权限和安全性:
- 确保镜像文件的权限安全,防止未经授权访问。
- 在 chroot 环境中避免执行可能破坏系统的操作。
存储空间:
- 镜像文件可能占用较大空间,建议在复制前压缩:
在目标系统上解压:gzip /path/to/system.img
gunzip /path/to/system.img.gz
- 镜像文件可能占用较大空间,建议在复制前压缩:
一些问题
- 关于sudo: unable to resolve host ubuntu的报错提示
- 最好统一一个用户名, 避免出现权限问题