将已填充的现有磁盘设备添加到 QEMU 原始映像

将已填充的现有磁盘设备添加到 QEMU 原始映像

我有一个原始 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 中显示为新磁盘分区?我想避免:

  1. 调整 vda.raw 大小
  2. 在 vda.raw 中创建一个新分区
  3. 挂载 vda.raw
  4. 挂载vdb.raw
  5. 将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
# 

哒哒!

相关内容