Linux系统制作img镜像文件的具体详细操作步骤和方法是什么?

Linux制作img镜像是一项常见操作,广泛应用于系统备份、嵌入式设备开发、虚拟磁盘创建等场景,img镜像本质上是块设备或分位的完整副本,包含分区表、文件系统和数据,可用于恢复系统或部署到其他设备,以下是几种主流的制作方法,涵盖不同需求场景。

linux如何制作img镜像

使用dd命令制作img镜像

dd命令是Linux内置的强大工具,通过直接读取块设备的原始数据并写入文件,可实现全盘或分区的镜像制作,无需额外安装,适合快速备份和简单镜像创建。

基础操作流程

(1)确认源设备
首先通过lsblkfdisk -l查看目标设备名称(如SD卡、U盘或硬盘),例如/dev/sdb(注意:不是/dev/sdb1等分区,除非仅备份分区)。

(2)执行镜像制作

  • 全盘镜像:将整个设备(含分区表)制作成img文件

    sudo dd if=/dev/sdb of=backup.img bs=4M status=progress

    参数说明:

    • if:输入文件,即源设备路径;
    • of:输出文件,即生成的img镜像;
    • bs:块大小,4MB可提升读写效率;
    • status=progress:实时显示复制进度。
  • 仅备份分区:若仅需某个分区(如/dev/sdb1),修改if为分区路径即可。

  • 制作空镜像:若需创建指定大小的空白镜像(如用于虚拟机),可使用/dev/zero作为输入源:

    dd if=/dev/zero of=empty.img bs=1G count=2  # 创建2GB空白镜像

注意事项

  • 设备确认:务必确保if参数的设备名正确,误操作可能导致数据覆盖;
  • 权限问题:dd操作需要root权限,普通用户需通过sudo执行;
  • 数据完整性:制作过程中避免中断操作,建议在稳定电源环境下进行;
  • 压缩优化:若镜像较大,可通过管道结合gzip压缩:
    sudo dd if=/dev/sdb bs=4M status=progress | gzip > backup.img.gz

使用genimage工具制作分区镜像

genimage是专为嵌入式设备设计的镜像制作工具,支持自动处理分区表、文件系统创建和文件填充,适合需要多分区(如boot、root等)的复杂场景,需提前安装。

linux如何制作img镜像

安装与配置

(1)安装genimage

  • Debian/Ubuntu:sudo apt install genimage
  • CentOS/RHEL:sudo yum install genimage(需启用EPEL源)

(2)编写配置文件
创建image.cfg文件,定义镜像名称、分区结构和源文件路径,示例:

image system.img {
  hdimage {
    gpt  # 使用GPT分区表(默认MBR)
  }
  partition boot {
    partition-type = 0xC  # FAT32分区类型
    image = "boot.uimg"   # 引导分区镜像文件
    size = 64M            # 分区大小
  }
  partition root {
    partition-type = 0x83 # Linux ext4分区类型
    image = "root.ext4"   # 根分区镜像文件
    size = 512M           # 分区大小
  }
}

执行镜像制作

(1)准备源文件
将引导文件(如boot.uimg)和根文件系统(如root.ext4)放在genimage默认搜索路径(如./output/)。

(2)生成镜像

genimage -c image.cfg

genimage会根据配置自动创建分区表、格式化分区并填充数据,最终生成system.img

优势与适用场景

  • 自动化处理:无需手动分区和格式化,简化多分区镜像制作;
  • 灵活性:支持自定义分区类型、大小和源文件;
  • 嵌入式适配:常用于ARM开发板(如树莓派、香蕉派)的系统镜像制作。

手动创建分区并制作img镜像

若需完全控制分区表类型(如MBR/GPT)或文件系统类型,可通过parted、mkfs等工具手动分区,再结合dd或ddrescue制作镜像。

操作步骤

(1)创建空镜像文件

dd if=/dev/zero of=custom.img bs=1G count=4  # 创建4GB空白镜像

(2)分区并格式化
使用parted创建分区表和分区,再通过mkfs格式化:

linux如何制作img镜像

sudo parted custom.img mklabel gpt          # 创建GPT分区表
sudo parted custom.img mkpart primary fat32 1MiB 100MiB  # 创建boot分区
sudo parted custom.img mkpart primary ext4 100MiB 100%   # 创建root分区

关联镜像文件到loop设备并格式化:

sudo losetup -fP custom.img                # 关联loop设备
sudo mkfs.vfat /dev/loop0p1               # 格式化boot分区为FAT32
sudo mkfs.ext4 /dev/loop0p2               # 格式化root分区为ext4

(3)挂载并写入数据

sudo mkdir /mnt/boot /mnt/root
sudo mount /dev/loop0p1 /mnt/boot         # 挂载boot分区
sudo mount /dev/loop0p2 /mnt/root         # 挂载root分区
# 复制文件到挂载点(如将boot文件夹和rootfs目录复制进去)
sudo cp -r boot/* /mnt/boot/
sudo cp -r rootfs/* /mnt/root/
sudo umount /mnt/boot /mnt/root           # 卸载分区
sudo losetup -d /dev/loop0                # 解除loop设备关联

适用场景

  • 需自定义分区表类型(如旧版MBR或GPT);
  • 文件系统类型特殊(如btrfs、xfs等非标准类型);
  • 嵌入式设备需手动调整分区布局(如预留空间给特定数据)。

工具对比与选择

以下为三种方法的对比,便于根据需求选择:

方法 适用场景 优点 缺点 是否需额外工具
dd 简单备份、全盘复制 无需安装、操作简单 无分区处理能力、易误操作 否(Linux内置)
genimage 多分区嵌入式系统 自动化分区、支持复杂配置 需编写配置文件、学习成本 是(需安装)
手动分区 自定义分区表/文件系统 完全控制分区细节 步骤繁琐、易出错 是(parted、mkfs等)

相关问答FAQs

问题1:制作img镜像时如何避免数据丢失?
解答:避免数据丢失需注意三点:① 确认源设备名(通过lsblk查看,避免误写/dev/sda/dev/sdb);② 备份重要数据,尤其是目标设备原有内容;③ 使用dd时添加count参数(如count=1024限制复制块数),避免全盘误写;④ 操作前检查if(输入)和of(输出)参数是否正确,建议先用dd if=/dev/zero of=test.img bs=1M count=1测试命令逻辑。

问题2:如何将img镜像烧录到SD卡?
解答:烧录img到SD卡可通过dd或图形工具实现:

  • dd命令:确保SD卡设备名(如/dev/mmcblk0),执行:
    sudo dd if=system.img of=/dev/mmcblk0 bs=4M status=progress
  • 图形工具:推荐使用BalenaEtcher(跨平台),自动识别SD卡并校验镜像,避免设备名误写。
    注意事项:烧录前需卸载SD卡所有分区,确保无数据写入中断。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16161.html

(0)
酷番叔酷番叔
上一篇 2025年8月24日 18:19
下一篇 2025年8月24日 18:36

相关推荐

  • 如何在Windows上安装Kali Linux双系统要注意什么?

    安装Kali Linux双系统是指在保留原有Windows操作系统的同时,将Kali Linux作为另一个独立系统安装在电脑硬盘上,实现开机选择进入不同系统的功能,Kali Linux作为专为渗透测试、安全研究和数字取证设计的Linux发行版,其强大的工具集和灵活的配置深受安全爱好者青睐,本文将详细介绍从准备工……

    2025年8月22日
    16500
  • 如何修改linux path变量值

    Linux系统中的PATH环境变量是一个重要的配置,它定义了系统在执行命令时会搜索可执行文件的路径列表,当用户在终端输入一个命令时,系统会按照PATH变量中指定的路径顺序依次查找对应的可执行文件,若找到则执行,否则提示“命令未找到”,合理配置PATH变量可以方便地使用自定义工具或第三方程序,提升工作效率,以下是……

    2025年9月9日
    16800
  • 如何在使用IBus时添加输入法?

    在Linux系统中添加输入法需要根据您使用的桌面环境和发行版选择合适的方法,以下是详细的操作指南,涵盖主流发行版(Ubuntu/Debian、Fedora、Arch)和输入法框架(IBus、Fcitx),确保您能高效完成配置:选择输入法框架Linux常用两种输入法框架:IBus(推荐给GNOME用户)Fcitx……

    2025年7月26日
    18300
  • Linux如何解压tar文件内容?

    在Linux系统中,tar是一种常用的文件归档工具,它能够将多个文件或目录合并成一个单独的文件,便于存储和传输,tar文件本身可能不经过压缩,也可能配合gzip、bzip2、xz等压缩工具进行压缩,因此解压时需要根据不同的压缩格式选择对应的命令选项,本文将详细介绍Linux中解压tar文件的各种方法、常用选项及……

    2025年10月7日
    15200
  • Linux如何打开Shell?有哪些方法?

    图形界面(GUI)打开方式通过应用程序菜单GNOME桌面(Ubuntu/Fedora等):点击屏幕左上角”活动” → 搜索”Terminal”或”终端” → 点击图标启动,快捷键:Ctrl+Alt+T(多数发行版默认),KDE Plasma桌面(Kubuntu/KDE Neon):点击左下角”应用菜单” → 搜……

    2025年7月10日
    17900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信