即使转换为原始设备后,vmdk 作为循环设备安装时性能仍然不佳

即使转换为原始设备后,vmdk 作为循环设备安装时性能仍然不佳

编辑 13/12/12 — 在这个阶段,它似乎与西部数据(可能还有其他公司)的高级格式 4K 块大小有关。

该链接在某种程度上描述了该问题,但是我的磁盘报告有 512 个逻辑块和 4096 个物理块(而不是 512/512)。

http://johannes-bauer.com/linux/wdc/?menuid=3

我会继续测试,如果找到解决方案,我一定会发布。


我需要将大量数据写入位于连接到 Debian Linux 服务器的 USB3 磁盘的 vmdk 磁盘。我正在使用 kpartx 创建分区映射,然后安装创建的循环设备,例如

USB 磁盘是 /dev/sdb4,挂载在 /mnt/backup。

> kpartx -av /mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk
add map loop2p1 (254:3): 0 273042 linear /dev/loop2 63
add map loop2p2 (254:4): 0 16787925 linear /dev/loop2 273105
add map loop2p3 (254:5): 0 8401995 linear /dev/loop2 17061030
add map loop2p4 (254:6): 0 184219648 linear /dev/loop2 25495552
add map loop2p5 : 0 227328 linear 254:6 2048
add map loop2p6 : 0 15998976 linear 254:6 231424
add map loop2p7 : 0 3059712 linear 254:6 16232448
add map loop2p8 : 0 2942976 linear 254:6 19294208
add map loop2p9 : 0 161978368 linear 254:6 22239232

然后我挂载其中一个分区。

> mkdir /mnt/loop2p2
> mount /dev/mapper/loop2p2 /mnt/loop2p2

并运行将数据写入挂载点(即 vmdk 中的第二个分区)的测试。

> dd if=/dev/zero of=/mnt/loop2p2/zerofile.tst bs=1k count=1700000
1700000+0 records in
1700000+0 records out
1740800000 bytes (1.7 GB) copied, 135.871 s, 12.8 MB/s

对USB3磁盘本身的测试运行良好。

> dd if=/dev/zero of=/mnt/backup/zerofile.tst bs=1k count=1700000
1700000+0 records in
1700000+0 records out
1740800000 bytes (1.7 GB) copied, 19.5485 s, 89.1 MB/s

作为比较,我创建了一个原始图像文件并运行了相同的测试。

> qemu-img create -f raw /mnt/backup/raw.img 4G

在 raw.img 上创建 ext3 分区后,我将其挂载并对其进行了测试。

> kpartx -av /mnt/backup/raw.img
add map loop2p1 (254:3): 0 8386560 linear /dev/loop2 2048
> mkdir /mnt/loop2p1
> mount /dev/mapper/loop2p1 /mnt/loop2p1
> dd if=/dev/zero of=/mnt/loop2p1/zerofile.tst bs=1k count=1700000
1700000+0 records in
1700000+0 records out
1740800000 bytes (1.7 GB) copied, 23.3126 s, 74.7 MB/s

好的结果!比直接写入磁盘稍微慢一点,但这是可以预料的。

因此我决定使用 qemu-img 将 vmdk 转换为原始图像作为另一个比较。

> qemu-img convert /mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk -O raw /mnt/backup/3MSYDDP01/3MSYDDP01_3.raw

> kpartx -av /mnt/backup/3MSYDDP01/3MSYDDP01_3.raw
add map loop2p1 (254:3): 0 273042 linear /dev/loop2 63
add map loop2p2 (254:4): 0 16787925 linear /dev/loop2 273105
add map loop2p3 (254:5): 0 8401995 linear /dev/loop2 17061030
add map loop2p4 (254:6): 0 184219648 linear /dev/loop2 25495552
add map loop2p5 : 0 227328 linear 254:6 2048
add map loop2p6 : 0 15998976 linear 254:6 231424
add map loop2p7 : 0 3059712 linear 254:6 16232448
add map loop2p8 : 0 2942976 linear 254:6 19294208
add map loop2p9 : 0 161978368 linear 254:6 22239232
> mount /dev/mapper/loop2p2 /mnt/loop2p2
dd if=/dev/zero of=/mnt/loop2p2/zerofile.tst bs=1k count=1700000
1700000+0 records in
1700000+0 records out
1740800000 bytes (1.7 GB) copied, 129.653 s, 13.4 MB/s

转换后的磁盘性能同样不佳。

各个磁盘的fdisk如下:

> fdisk -l /dev/sdb
Note: sector size is 4096 (not 512)

Disk /dev/sdb: 3000.6 GB, 3000558944256 bytes
255 heads, 63 sectors/track, 45599 cylinders, total 732558336 sectors
Units = sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000246c6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1             256      131327      524288   83  Linux
/dev/sdb2          131328     2228479     8388608   83  Linux
/dev/sdb3         2228480     2490623     1048576   82  Linux swap / Solaris
/dev/sdb4         2490624   732558335  2920270848   83  Linux

原始图像

> fdisk -l /mnt/backup/raw.img

Disk /mnt/backup/raw.img: 4294 MB, 4294967296 bytes
43 heads, 32 sectors/track, 6096 cylinders, total 8388608 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: 0xd48075ee

              Device Boot      Start         End      Blocks   Id  System
/mnt/backup/raw.img1            2048     8388607     4193280   83  Linux

3MSYDDP01_3-扁平.vmdk

> fdisk -l /mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk

Disk /mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders, total 209715200 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: 0x0005cbed

                                      Device Boot      Start         End      Blocks   Id  System
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk1   *          63      273104      136521   83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk2          273105    17061029     8393962+  83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk3        17061030    25463024     4200997+  82  Linux swap / Solaris
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk4        25495552   209715199    92109824    5  Extended
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk5        25497600    25724927      113664   83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk6        25726976    41725951     7999488   83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk7        41728000    44787711     1529856   83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk8        44789760    47732735     1471488   83  Linux
/mnt/backup/3MSYDDP01/3MSYDDP01_3-flat.vmdk9        47734784   209713151    80989184   83  Linux

编辑:vmdk 中分区的块大小为:

> dumpe2fs /dev/mapper/loop2p1 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               1024
> dumpe2fs /dev/mapper/loop2p2 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               4096
> dumpe2fs /dev/mapper/loop2p5 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               1024
> dumpe2fs /dev/mapper/loop2p6 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               4096
> dumpe2fs /dev/mapper/loop2p7 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               4096
> dumpe2fs /dev/mapper/loop2p8 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               4096
> dumpe2fs /dev/mapper/loop2p9 | grep -i 'block size'
dumpe2fs 1.42.5 (29-Jul-2012)
Block size:               4096

/dev/mapper/loop2p3 是交换。

/dev/mapper/loop2p4 是一个扩展分区。

USB 磁盘的扇区大小会产生影响吗?如果会,为什么原始图像会没问题?我将使用扇区大小为 512 的 USB 磁盘进行测试,但这需要时间,因为我必须复制数据、格式化并复制回来。

答案1

不要备份整个虚拟机。根据应用程序的不同,您应该能够进行一些应用程序级复制。此外,仅通过 rsync 填充 VMDK 文件与备份虚拟机不同。有些无形的东西,如正在使用的锁定文件、数据库(如果适用)和配置文件,可能需要单独复制。

总的来说,这是一个糟糕的想法,可能不会提供雇主所期望的恢复计划。此外,外部 USB 驱动器不属于生产。

相关内容