如何快速创建空映像文件?

在Linux系统中制作.img文件(磁盘映像文件)是备份数据、创建可启动介质或构建虚拟磁盘的常见需求,以下是详细的操作方法,涵盖多种场景:


基础概念

  • IMG文件:本质是磁盘的二进制镜像,可包含分区表、文件系统及数据。
  • 常见用途:系统备份、创建虚拟磁盘、制作可启动设备(如树莓派镜像)。
  • 核心工具dd, fdisk, mkfs, losetup, genisoimage(用于ISO,但可转IMG)。

制作空白IMG文件(未格式化)

方法1:使用 dd 创建空文件

dd if=/dev/zero of=output.img bs=1M count=1024
  • 参数说明
    • if=/dev/zero:输入源(零填充)。
    • of=output.img:输出文件名。
    • bs=1M:块大小(1MB)。
    • count=1024:块数量(总大小 = 1M × 1024 = 1GB)。

方法2:使用 fallocate(更高效)

fallocate -l 1G output.img  # 直接分配1GB空间

制作带文件系统的IMG文件

步骤1:创建空白IMG文件

fallocate -l 1G disk.img

步骤2:分区并格式化

  1. 分区

    fdisk disk.img
    • n 创建新分区(默认参数)。
    • w 保存并退出。
  2. 关联为虚拟设备

    sudo losetup -fP disk.img  # 自动分配回环设备(如/dev/loop0)
    sudo partprobe /dev/loop0  # 更新分区表
  3. 格式化分区(以EXT4为例):

    sudo mkfs.ext4 /dev/loop0p1  # 格式化第一个分区

步骤3:挂载并复制文件

  1. 挂载分区:

    sudo mount /dev/loop0p1 /mnt
  2. 复制文件到挂载点:

    sudo cp -r /path/to/files/* /mnt/
  3. 卸载并释放资源:

    sudo umount /mnt
    sudo losetup -d /dev/loop0  # 删除回环设备

从目录创建IMG文件(无需分区)

适用于单分区映像(如引导镜像):

# 格式化为FAT32(常见于UEFI启动)
sudo mkfs.vfat boot.img
# 挂载并复制文件
sudo mount boot.img /mnt
sudo cp -r /boot/efi/* /mnt/  # 复制UEFI启动文件
sudo umount /mnt

备份现有磁盘为IMG文件

sudo dd if=/dev/sdX of=backup.img bs=4M status=progress
  • 警告
    • if=/dev/sdX 必须是物理磁盘(如 /dev/sda),误操作会覆盖数据
    • 添加 conv=sync,noerror 可忽略读取错误(适用于损坏磁盘)。

转换其他格式为IMG

ISO 转 IMG

cp input.iso output.img  # 直接重命名(因ISO本质是IMG)

或精确转换:

dd if=input.iso of=output.img bs=4M

压缩与解压

  • 压缩
    gzip -9 disk.img    # 生成 disk.img.gz
  • 解压
    gzip -d disk.img.gz

验证与检查

  • 检查文件系统
    sudo fsck /dev/loop0p1
  • sudo mount -o loop disk.img /mnt  # 直接挂载IMG文件
    ls /mnt

注意事项

  1. 权限问题:操作需 sudo,避免因权限失败。
  2. 空间充足:确保磁盘空间大于目标IMG文件。
  3. 安全备份:使用 dd 时务必确认输入/输出路径,防止数据丢失。
  4. 文件系统选择
    • Windows兼容:用 mkfs.vfat(FAT32)或 mkfs.ntfs
    • Linux系统:用 mkfs.ext4

典型应用场景

  • 树莓派镜像:将官方OS写入IMG后刷入SD卡。
  • 虚拟机磁盘:直接挂载IMG作为虚拟硬盘(QEMU/VirtualBox)。
  • 系统恢复:备份整个磁盘到IMG,故障时还原。

通过上述方法,可灵活创建符合需求的IMG文件,操作前务必理解命令含义,关键步骤建议先在测试环境验证。

引用说明基于 GNU Coreutils、util-linux 及 Linux 内核文档中的工具手册(如 dd(1), fdisk(8), mkfs(8)),具体参数请通过 man [命令] 查阅官方说明。

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

(0)
酷番叔酷番叔
上一篇 2025年7月24日 11:19
下一篇 2025年7月24日 11:35

相关推荐

  • Linux如何扩展磁盘空间?分区、扩容、挂载操作步骤有哪些?

    Linux扩展磁盘空间是系统运维中常见的操作,无论是虚拟机磁盘扩容、物理硬盘添加,还是现有分区调整,都需要结合具体场景和文件系统类型进行操作,本文将从虚拟机环境、物理环境及不同文件系统扩展等角度,详细说明Linux扩展磁盘空间的步骤与注意事项,虚拟机环境磁盘扩展(以VMware为例)虚拟机磁盘扩展是日常运维中的……

    2025年9月21日
    9500
  • 如何把Linux安装成主系统?新手详细安装步骤与注意事项有哪些?

    将Linux作为主系统使用,能带来更稳定、安全且高度可定制的操作体验,尤其适合开发者、技术爱好者或追求高效办公的用户,不过从Windows/macOS切换到Linux需要经历安装、配置和适应的过程,以下是详细步骤和注意事项,帮助你顺利完成系统迁移,安装前的准备工作在动手安装前,充分的准备能避免后续操作中的多数问……

    2025年9月16日
    9800
  • Linux文件权限怎么查看?

    使用 ls -l 命令(最常用)命令示例:ls -l 文件名 # 查看单个文件ls -l # 查看当前目录所有文件权限ls -ld 目录名 # 查看目录本身权限(而非内容)输出示例:-rwxr-xr– 1 user group 4096 Jan 10 15:30 example.txt权限字段解析(共10个字……

    2025年7月9日
    11100
  • Linux配置JDK环境变量?一步搞定!

    配置前的准备工作确认系统架构uname -m # 输出x86_64表示64位,i686表示32位下载合适JDK版本推荐从Oracle官网或OpenJDK下载对应版本的tar.gz包(如jdk-17_linux-x64_bin.tar.gz)解压JDK到目标目录sudo tar -zxvf jdk-17_linu……

    2025年7月12日
    11300
  • Linux中如何查询已安装软件包的详细信息与方法?

    Linux系统中,由于发行版的不同(如Debian/Ubuntu、RedHat/CentOS、Arch Linux等),管理软件包的工具和命令也存在差异,查安装包是系统管理和日常运维中的常见需求,本文将详细介绍主流发行版中查询安装包的方法,包括已安装包列表、包详细信息、包文件归属及可用包查询等场景,并辅以示例说……

    2025年9月17日
    9900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信