[20250907]使用dmsetup建立模拟慢速设备.txt

来源:这里教程网 时间:2026-03-03 22:45:07 作者:

[20250907]使用dmsetup建立模拟慢速设备.txt --//测试需要有时候需要建立模拟慢速设备,以前测试我使用usb盘,实际上效果也不是很好。实际上通过dmsetup的low level logical --//volume management功能建立一个delay的磁盘设备来模拟慢速设备。 --//自己做一些尝试并做一个记录。 1.建立文件: # mkdir /home/oracle/slowdisk # cd /home/oracle/slowdisk # dd if=/dev/zero of=sd0.dd bs=1M count=20 # losetup -f --show /home/oracle/slowdisk/sd0.dd /dev/loop0 # losetup -l NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0         0      0         0  0 /home/oracle/slowdisk/sd0.dd --//这样文件/home/oracle/slowdisk/sd0.dd关联设备/dev/loop0. --//建立ext2文件系统。 # mkfs -t ext2 /dev/loop0 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 5136 inodes, 20480 blocks 1024 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=20971520 3 block groups 8192 blocks per group, 8192 fragments per group 1712 inodes per group Superblock backups stored on blocks:         8193 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done --//注我没有分区,感觉没有必要,直接使用整个设备。 --//尝试mount看看。 # mkdir -p /mnt/slowdisk/ # mount /dev/loop0 /mnt/slowdisk/ # umount /dev/loop0 --//OK没有任何问题。 2.使用dmsetup: --//先尝试linear方式。 # echo "0 40960 linear /dev/loop0  0" | dmsetup create dm0 -- 0 40960:映射的起始扇区和长度(单位是扇区,512 字节)。 # blockdev --getsz /dev/loop0 40960 --//可以通过blockdev --getsz 获得。 -- linear :Device Mapper 的目标类型,表示线性映射。 -- /dev/loop0 0:底层设备及其起始扇区。 -- 0 是源设备的偏移量 -- dm0:你创建的设备映射名称,之后可通过 /dev/mapper/dm0 访问。 # dmsetup table dm0 0 40960 linear 7:0 0 # dmsetup info dm0 Name:              dm0 State:             ACTIVE Read Ahead:        256 Tables present:    LIVE Open count:        0 Event number:      0 Major, minor:      253, 0 Number of targets: 1 # dmsetup status dm0 0 40960 linear # mount /dev/mapper/dm0 /mnt/slowdisk/ # umount /dev/mapper/dm0 # dmsetup remove dm0 3.使用dmsetup使用延迟模式。 # echo "0 40960 delay /dev/loop0 0 1000" | dmsetup create dm0 --//最后的参数1000表示延迟1000ms即1秒。注意执行时很慢,有点耐心,也许需要将近1分钟才能完成。 # dmsetup table dm0 0 40960 delay 7:0 0 1000 # dmsetup status dm0 0 40960 delay 0 0 --//简单验证: # time tune2fs -l /dev/mapper/dm0 > /dev/null real    0m1.022s user    0m0.001s sys     0m0.003s --//执行需要1秒才完成。 # time dd if=/dev/mapper/dm0 of=/dev/null bs=1k count=4 status=none real    0m1.005s user    0m0.000s sys     0m0.001s # time dd if=/dev/mapper/dm0 of=/dev/null bs=1k count=5 status=none real    0m2.041s user    0m0.001s sys     0m0.001s --//读4K需要1秒,而5K需要2秒。说明1次读取的IO大小4K。 # time mount /dev/mapper/dm0 /mnt/slowdisk/ real    0m30.186s user    0m0.000s sys     0m0.005s --//mount需要30秒完成。 # time umount /dev/mapper/dm0 real    0m2.047s user    0m0.000s sys     0m0.013s 4.取消关联: # dmsetup remove dm0 # losetup -d /dev/loop0 # losetup -l 5.使用测试前可以先采用linear模式建立相关数据文件再关闭数据库,在设置dealy模式启动数据库,或者延迟设置不要这么大,不然真 的很慢。

相关推荐