(Fault Injection Series)
Simulate the disk IO error with dm-error:
| Term/Tool | Usage |
|---|---|
| Device Mapper (DM) | Map software devices to physical device. |
| Loop Device | Allow users to mount a regular file as a disk. |
| dmsetup | Manage DM devices. |
| losetup | Manage loop device. |
| dm-linear | Split, merge devices |
| dm-error | Return I/O errors for any read, write to an erea. |
vm$ apk add device-mapper lsblk dmesgvm$ dd if=/dev/zero of=file0.img bs=1M count=2048# find a free loop device
vm$ losetup -f
/dev/loop0
# create loop device
vm$ losetup /dev/loop0 file0.img
# list loop devices
$ losetup -a
/dev/loop0: 0 file0.img
vm$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2G 0 loop# get size of loop device, unit: 512-byte sector
vm$ blockdev --getsz /dev/loop0
4194304
# create the dm-linear device
vm$ dmsetup create dm0 --table '0 4194304 linear /dev/loop0 0'
# show dm table
vm$ dmsetup table
dm0: 0 4194304 linear 7:0 0
vm$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2G 0 loop
└─dm0 253:0 0 2G 0 dm vm$ fdisk -l
Disk /dev/dm-0: 2048 MB, 2147483648 bytes, 4194304 sectors
261 cylinders, 255 heads, 63 sectors/track
Units: sectors of 1 * 512 = 512 bytes# inject IO errors
vm$ dmsetup reload dm0 << EOF
0 3145728 linear /dev/loop0 0
3145728 1048576 error
EOF# after injected, the setting still inactive
vm$ dmsetup table --inactive
dm0: 0 3145728 linear 7:0 0
dm0: 3145728 1048576 error
# resume to activate the setting
vm$ dmsetup resume dm0
# show dm table
vm$ dmsetup table
dm0: 0 3145728 linear 7:0 0
dm0: 3145728 1048576 errorvm$ dd if=/dev/dm-0 of=/dev/null bs=512 count=1 skip=3145728
dd: /dev/dm-0: I/O error
vm$ dmesg -w
Buffer I/O error on dev dm-0, logical block 393216, async page read