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

相关推荐

  • Linux如何清理cache缓存?内存释放操作方法详解?

    在Linux系统中,缓存(Cache)是内核为了提升系统性能而设计的内存管理机制,主要分为Page Cache(页面缓存,用于缓存文件数据)、dentry cache(目录项缓存,用于缓存文件名到inode的映射)和inode cache(索引节点缓存,用于存储文件元数据),这些缓存能有效减少磁盘I/O操作,提……

    2025年9月16日
    3400
  • 如何在Linux上轻松安装和使用坚果云?

    在 Linux 上高效使用坚果云:通过官方提供的 .deb/.rpm 包或第三方工具(如 Rclone/Davfs2)安装客户端或挂载 WebDAV,配置同步文件夹时,注意选择性同步、排除规则和冲突处理,结合坚果云网页版进行文件管理和分享,实现跨平台无缝协作。

    2025年7月28日
    4200
  • Linux如何查看在线用户?

    who 命令:基础登录信息作用:显示当前登录系统的用户信息(用户名、终端、登录时间及来源IP),命令示例:who输出解析:root pts/0 2024-06-15 09:30 (192.168.1.10)alice tty2 2024-06-15 10:15 (:0)pts/0:伪终端(远程登录如SSH)tt……

    2025年7月28日
    4200
  • Linux中如何获取文件夹?具体操作方法有哪些?

    在Linux系统中,“获取文件夹”通常涉及多种操作场景,如查看文件夹基本信息、列出内容、获取权限属性、统计大小,或从远程服务器下载文件夹等,本文将详细讲解不同场景下的具体命令和用法,帮助用户高效完成文件夹信息的获取与管理,本地文件夹信息获取查看文件夹基本属性要获取文件夹本身的元数据(如权限、所有者、大小、修改时……

    2025年9月27日
    1500
  • 如何掌握网络钩子提升开发效率?

    网络钩子点是软件或网络系统中预设的特定位置,允许开发者插入自定义代码或处理逻辑,用于拦截、修改或扩展系统在运行时的默认行为和数据流。

    2025年7月8日
    7000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信