在Linux 下制作光盘镜像文件,cp 和 mkisofs 是两种常用但用途完全不同的命令。下面我们来分别介绍它们的使用方法和适用场景。
一、使用 cp 命令直接从光盘制作镜像
如果你想将一张现有的光盘(如 CD、DVD)完整地保存为一个 ISO 文件,可以直接使用 cp 命令复制光盘设备。
原理
在 Linux 中,光驱设备(如 /dev/cdrom 或 /dev/sr0)被视为一个特殊的块设备文件。cp 命令可以像复制普通文件一样读取该设备的内容,并将数据写入到一个 ISO 文件中,这样就得到了光盘的逐字节镜像。
操作步骤
1. 插入光盘,然后找到光驱的设备名(通常为 /dev/cdrom 或 /dev/sr0)。
2. 使用 cp 命令复制设备文件到目标 ISO 文件:
sudo cp /dev/cdrom /path/to/image.iso
· 因为需要读取设备文件,所以一般需要 sudo 权限。
· 可以添加 --sparse=never 选项避免稀疏文件处理,但通常不需要。
3. 等待命令执行完成,ISO 文件即生成。
注意事项
· cp 与 dd 的比较:虽然 cp 可以完成复制,但更推荐使用 dd,因为 dd 提供了更精细的控制(如块大小、错误处理、进度显示)。例如:
sudo dd if=/dev/cdrom of=/path/to/image.iso bs=4M status=progress
dd 在处理坏道或读取错误时更有优势,而且能显示复制进度。
· cp 的局限性:如果光盘有划痕或读取错误,cp 可能会直接失败,而 dd 可以设置忽略错误的选项。另外,cp 默认不显示进度,对于大光盘可能不够友好。
· 权限:确保有读取光驱设备的权限,通常需要 sudo。
二、使用 mkisofs 命令从文件系统制作镜像
如果你想将硬盘上的一组文件和文件夹制作成 ISO 镜像(例如打包一个软件合集、创建可启动系统镜像等),则需要使用 mkisofs(或其现代替代品 genisoimage)。
安装
· Debian/Ubuntu:sudo apt install genisoimage
· CentOS/RHEL:sudo yum install mkisofs
基本用法
mkisofs -r -o /path/to/output.iso /path/to/source/folder
· -r:使用 Rock Ridge 扩展,保留 Linux 下的文件权限、所有者和长文件名(推荐)。
· -o:指定输出的 ISO 文件路径。
· 最后一个参数是要打包的源文件夹路径。
常用选项
· -J:生成 Joliet 扩展,使 ISO 在 Windows 下也能正确显示长文件名。
· -V "卷标":设置光盘卷标(最多 32 个字符)。
· -b boot/grub/stage2_eltorito:制作可启动光盘时指定引导映像(通常配合 -c boot.catalog 使用)。
例如,制作一个同时兼容 Linux 和 Windows 的数据光盘:
mkisofs -r -J -o mydata.iso ~/myfiles/
验证镜像
制作完成后,可以挂载检查:
mkdir /tmp/mountpoint
sudo mount -o loop mydata.iso /tmp/mountpoint
ls /tmp/mountpoint
sudo umount /tmp/mountpoint
总结对比
cp:将现有光盘直接复制成 ISO 简单直接,但缺少进度显示和错误处理;可用于设备文件,但推荐用 dd。
mkisofs:将硬盘上的文件和目录打包成 ISO 灵活,可设置文件系统属性、卷标、可启动特性等,是最常用的构建工具。
· 如果你想复制一张光盘,可以用 cp(或更推荐 dd);
· 如果你想从零制作一个 ISO,则必须用 mkisofs(或 genisoimage)。