Ubuntu 抽取系统制作便于chroot的镜像文件

前文:Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译


考虑到某些平台的编译要求持续更新, Ubuntu18.04已经不在支持后续的开发, 于是筹备制作一个基于Ubuntu20.04 的系统镜像.

Ubuntu 20.04 系统中创建一个系统镜像文件(img 文件),并确保其可以在另一台 Ubuntu 系统上通过 mountchroot 使用,需要一系列步骤来完成系统备份、镜像创建以及后续的挂载操作。


准备工作

  1. 确认目标系统环境

    • 确保当前 Ubuntu 20.04 系统运行正常,且具有管理员权限(sudo)。
    • 准备一个足够大的存储设备(如外接硬盘或分区),用于存放生成的镜像文件。
    • 确保目标 Ubuntu 系统(用于挂载和 chroot 的系统)与源系统架构相同(例如,均为 x86_64)。
  2. 安装必要的工具

    执行以下命令安装所需工具:

    bash 复制代码
    sudo apt update
    sudo apt install -y rsync
  3. 清理系统

    在创建镜像前,清理系统以减少不必要的文件:

    bash 复制代码
    sudo apt clean
    sudo rm -rf /var/log/*

创建系统镜像文件

  1. 创建空的镜像文件

    使用 dd 命令创建一个空的镜像文件,大小需足够容纳整个系统(建议比实际使用空间大 20% 以上)。例如,创建一个 30GB 的镜像文件:

    bash 复制代码
    sudo dd if=/dev/zero of=/path/to/u20.img bs=1M count=30720
    • /path/to/u20.img:指定镜像文件的存储路径(确保有足够空间)。
    • bs=1M:块大小为 1MB。
    • count=30720:生成 30GB 的镜像文件(可根据需要调整)。
  2. 格式化镜像文件

    将镜像文件格式化为文件系统(如 ext4):

    bash 复制代码
    sudo mkfs.ext4 /path/to/u20.img
  3. 挂载镜像文件

    创建一个挂载点并挂载镜像文件:

    bash 复制代码
    sudo mkdir /mnt/img_mount
    sudo mount -o loop /path/to/u20.img /mnt/img_mount
  4. 使用 rsync 复制系统

    使用 rsync 将当前系统复制到挂载的镜像文件中,排除一些动态不必要 的目录(如 /proc/sys 等):

    bash 复制代码
    sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/img_mount
    • -aAXv:保留文件权限、属性,并显示复制进度。
    • --exclude:排除不需要复制的目录。
  5. 卸载镜像

    复制完成后,卸载镜像文件:

    bash 复制代码
    sudo umount /mnt/img_mount

将镜像文件传输到目标系统

  1. 传输镜像文件
    system.img 文件传输到目标 Ubuntu 系统,例如通过 USB 驱动器或网络传输:

    bash 复制代码
    scp /path/to/u20.img user@target_system:/path/to/destination

使用镜像

参考: Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译

注意事项

  1. 硬件兼容性

    • 目标系统的硬件(如 CPU 架构)需与源系统兼容。
    • 某些硬件驱动(如显卡、网卡)可能需要重新配置。
  2. 内核和引导

    • 本方法仅复制根文件系统,未包含内核和引导加载程序(如 GRUB)。若需完整启动,需额外配置目标系统的内核和引导。
  3. 权限和安全性

    • 确保镜像文件的权限安全,防止未经授权访问。
    • 在 chroot 环境中避免执行可能破坏系统的操作。
  4. 存储空间

    • 镜像文件可能占用较大空间,建议在复制前压缩:

      bash 复制代码
      gzip /path/to/system.img

      在目标系统上解压:

      bash 复制代码
      gunzip /path/to/system.img.gz
  5. 一些问题

    1. 关于sudo: unable to resolve host ubuntu的报错提示
    2. 最好统一一个用户名, 避免出现权限问题

参考

Ubuntu 22.04: 使用chroot切换到Ubuntu18.04运行环境进行开发编译

相关推荐
郁大锤1 天前
conda虚拟环境占用空间太多,如何清理?
linux·conda
悢七1 天前
windows npm打包无问题,但linux npm打包后部分样式缺失
linux·前端·npm
The Chosen One9851 天前
【Linux】Linux下基本指令:man echo cp mv move less date grep zip tar 指令以及指令的本质
linux·运维·服务器
退役小学生呀1 天前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
Siren_dream1 天前
在Ubuntu通过命令行安装MySQL(tabby远程)
mysql·ubuntu
君以思为故1 天前
认识linux -- 编辑器vim以及编译器gcc/g++和Makefile文件
linux·编辑器·vim
王道长服务器 | 亚马逊云1 天前
AWS + Discuz!:社区站架构的现代化玩法
linux·网络·云计算·智能路由器·aws
lht6319356121 天前
部署开源漏洞扫描工具SiriusScan及问题解决
linux·安全·开源
笨蛋少年派1 天前
*清理磁盘空间
linux·运维·服务器
我搞slam1 天前
有效的括号--leetcode
linux·算法·leetcode