编辑 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 驱动器不属于生产。