我有一个原始 QEMU 映像 (vda.raw),我想使用包含填充有数据的原始 ext3 文件系统 (vdb.raw) 的文件中的数据来调整其大小并添加现有分区。这两个文件如下所示:
$ file vda.raw
vda.raw: x86 boot sector; partition 1: ID=0x83, active, starthead 0, startsector 16065, 20948760 sectors, code offset 0x63
$ file vdb.raw
vdb.raw: Linux rev 1.0 ext3 filesystem data, UUID=14555b9c-4837-4b43-a8e8-fe4e19194e88, volume name "ephemeral0" (large files)
有没有一种简单的方法可以通过组合这两者来创建新映像:vdb.raw 的内容在 vda.raw 中显示为新磁盘分区?我想避免:
- 调整 vda.raw 大小
- 在 vda.raw 中创建一个新分区
- 挂载 vda.raw
- 挂载vdb.raw
- 将vdb.raw的内容复制到vda.raw中
有没有一种方法可以将它们与 dd 连接起来,然后修复分区表以使其知道映像中有一个新分区?
答案1
您是否尝试过显而易见的方法——简单地将 vdb 连接到 vda 并创建一个新分区?我尝试过,似乎有效。这就是我所做的......
我从两个文件开始:
# ls -l vd*
-rw-r--r-- 1 root root 104857600 Feb 27 20:31 vda.raw
-rw-r--r-- 1 root root 104857600 Feb 27 20:31 vdb.raw
# file vd[ab].raw
vda.raw: x86 boot sector; partition 1: ID=0x83, starthead 32, startsector 2048, 202752 sectors, extended partition table (last)\011, code offset 0x0
vdb.raw: Linux rev 1.0 ext3 filesystem data, UUID=734fa0ee-0bc8-4428-a13c-3147c9c0866f
该文件vda.raw
包含带有单个分区的标准分区映射(包含 ext3 文件系统):
# fdisk -l vda.raw
Disk vda.raw: 104 MB, 104857600 bytes
191 heads, 50 sectors/track, 21 cylinders, total 204800 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: 0xad0a5dfe
Device Boot Start End Blocks Id System
vda.raw1 2048 204799 101376 83 Linux
vdb.raw
包含一个ext3
文件系统。
首先,我们将这两个文件连接在一起:
# cat vda.raw vdb.raw > combined.raw
接下来,我们创建一个覆盖新数据的新分区:
# fdisk combined.raw
这是初始分区表:
Command (m for help): p
Disk combined.raw: 209 MB, 209715200 bytes
191 heads, 50 sectors/track, 42 cylinders, total 409600 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: 0xad0a5dfe
Device Boot Start End Blocks Id System
combined.raw1 2048 204799 101376 83 Linux
现在我们创建一个新扇区,接受起始扇区和大小的默认值:
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (204800-409599, default 204800):
Using default value 204800
Last sector, +sectors or +size{K,M,G} (204800-409599, default 409599):
Using default value 409599
Command (m for help): w
The partition table has been altered!
Syncing disks.
现在让我们看看我们有什么:
# kpartx -a combined.raw
# mkdir /mnt/{1,2}
# mount /dev/mapper/loop1p1 /mnt/1
# mount /dev/mapper/loop1p2 /mnt/2
# ls /mnt/1
lost+found README.vda
# ls /mnt/2
lost+found README.vdb
#
哒哒!