需要製作可開機的磁碟映像檔(IMG)或光碟映像檔(ISO)?本文詳細說明三種主流工具 dd、cat/cp、mkisofs 的適用場景、指令參數與實戰流程,並示範如何植入 grub4dos 實現多重開機選單。
| 工具 | 適用對象 | 特點 |
|---|---|---|
dd | 整顆磁碟/分區、軟碟、USB 隨身碟 | 區塊級複製,可指定 block size/count,功能最強 |
cat/cp | 裝置檔案 | 簡單複製,無法控制區塊大小 |
mkisofs (genisoimage) | 目錄樹 → ISO 9660 檔案系統 | 專為光碟映像設計,支援啟動載入器嵌入 |
# 1.44MB 虛擬軟碟映像 (2880 扇區 × 512B)
dd if=/dev/zero of=fdimage.img count=2880
# 或指定 block size
dd if=/dev/zero of=fdimage.img bs=1024 count=1440
mkfs.msdos fdimage.img # FAT12/16,適合 DOS/Windows 啟動
# mkfs.ext2 fdimage.img # Linux 原生
mount -o loop fdimage.img /mnt
cp -r your_boot_files/* /mnt/
umount /mnt
單一系統 (FreeDOS 範例):
# 下載 FreeDOS 啟動映像 balder10.img
dd if=balder10.img of=fdimage.img bs=512 count=1 conv=notrunc
多重開機 (grub4dos):
# 方法 A:grldr.mbr 寫入 MBR
bootlace.com --floppy --chs 0x00 fdimage.img
# 方法 B:grub.exe 做為核心載入器
# 需在映像根目錄放入 grldr、menu.lst、grub.exe
⚠ 注意:dd 從邏輯扇區 0 開始寫入。USB 隨身碟前 63 扇區含 MBR 與隱藏扇區,直接 dd 寫入 grldr.mbr 會破壞 FAT 表。軟碟映像無此問題。
cddir/
├── isolinux/
│ ├── isolinux.bin
│ ├── isolinux.cfg
│ ├── vmlinuz
│ └── initrd.img
├── LiveOS/
│ └── squashfs.img
└── grub4dos/
├── grldr
└── menu.lst
mkisofs -r -o cdimage.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
cddir
# 方式 A:grub.exe 作為無模擬啟動載入器
mkisofs -R -b grub4dos/grub.exe \
-no-emul-boot -boot-load-seg 0x1000 \
-o cdimage.iso cddir
# 方式 B:grldr 安裝到光碟 MBR (需 isolinux.bin 共存)
mkisofs -R -b grub4dos/grldr \
-no-emul-boot -boot-load-size 4 \
-o cdimage.iso cddir
| 參數 | 說明 |
|---|---|
if=FILE | 輸入檔 (預設 stdin) |
of=FILE | 輸出檔 (預設 stdout) |
bs=BYTES | 同時設定讀/寫區塊大小 |
count=BLOCKS | 僅複製指定區塊數 |
skip=BLOCKS | 輸入端跳過區塊數 |
seek=BLOCKS | 輸出端跳過區塊數 |
conv=notrunc | 不截斷輸出檔 (配合 seek 寫入 MBR 關鍵) |
conv=sync | 不足區塊以 NUL 填充 |
單位後綴:b=512, k=1024, M=1024k, G=1024M。
| 參數 | 說明 |
|---|---|
-o FILE | 輸出 ISO 檔名 |
-b FILE | 啟動映像檔 (相對路徑) |
-c FILE | 開機目錄 (El Torito 規範) |
-no-emul-boot | 無模擬模式 (直接載入二進位) |
-boot-load-size N | 載入扇區數 (通常 4) |
-boot-load-seg ADDR | 載入記憶體段位址 (0x1000=64KB) |
-boot-info-table | 修補啟動映像資訊表 |
-R / -r | Rock Ridge 擴展 (保留 Unix 權限/長檔名) |
-J | Joliet 擴展 (Windows 長檔名) |
.img 或 .iso 當作光碟/硬碟啟動。dd if=fdimage.img of=/dev/sdX bs=4M status=progress (確認裝置代號!)。