我有 3 个映像。每个映像都是通过克隆(使用 dd)一个分区完成的(这些分区使用 ext3 文件系统格式化)。一个分区可使用 GRUB1(CentOS)启动
我如何将它们合并为一个磁盘映像?
(我可以使用 dd 命令复制分区映像,但我不知道如何创建分区表并使启动正常工作)。
答案1
创建磁盘映像。以下命令将创建一个 10G稀疏图像:
# dd if=/dev/zero of=mydisk.img bs=1 count=0 seek=10G
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.6554e-05 s, 0.0 kB/s
# ls -lh mydisk.img
-rw-r--r--. 1 root root 10G Jun 17 15:27 mydisk.img
使用 fdisk 对映像进行分区:
# fdisk mydisk.img
确保创建的分区至少与您所想象的分区一样大!在这个例子中,我创建了以下布局:
# fdisk -l mydisk.img
Disk mydisk.img: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5519250f
Device Boot Start End Blocks Id System
mydisk.img1 2048 2099199 1048576 83 Linux
mydisk.img2 2099200 4196351 1048576 83 Linux
用于kpartx
创建与每个分区对应的设备:
# kpartx -av mydisk.img
add map loop0p1 (253:3): 0 2097152 linear /dev/loop0 2048
add map loop0p2 (253:4): 0 2097152 linear /dev/loop0 2099200
这将创建以下条目/dev/mapper
:
# ls -l /dev/mapper
lrwxrwxrwx. 1 root root 7 Jun 17 15:33 loop0p1 -> ../dm-3
lrwxrwxrwx. 1 root root 7 Jun 17 15:33 loop0p2 -> ../dm-4
现在您可以将分区映像复制到您的分区上:
# dd if=image_of_partition_1.img of=/dev/mapper/loop0p1 bs=1M
# dd if=image_of_partition_2.img of=/dev/mapper/loop0p2 bs=1M
现在删除设备映射:
# kpartx -dv mydisk.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
一切就绪!
笔记
dd
您也可以通过使用和seek
参数(在磁盘映像文件中的适当偏移量处开始写入)而不是使用来完成相同的操作kpartx
,但我认为使用kpartx
不太容易出错。这不会生成可启动映像。如果您想要可启动映像,您还必须在其上安装启动加载程序。