ITPub博客

首页 > 数据库 > Oracle > [20250907]使用dmsetup建立模拟慢速设备.txt

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

原创 Oracle 作者:lfree 时间:2025-10-10 20:35:40 0 删除 编辑

[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模式启动数据库,或者延迟设置不要这么大,不然真
的很慢。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3097326/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969207