linux 远程 i o 错误,故意在Linux中导致I / O错误?
是的,這是使用設備映射器執行此操作的一種非常合理的方法.
設備映射器可以將塊設備重新組合為您選擇的新映射/順序. LVM這樣做.它還支持其他目標(有些非常新穎),比如’flakey’來模擬失敗的磁盤,而’error’來模擬磁盤的失敗區域.
可以構建一個故意在其上有IO黑洞的設備,它將在交叉時報告IO錯誤.
首先,創建一些虛擬卷以用作目標,并使其可作為塊設備進行尋址.
dd if=/dev/zero of=/var/lib/virtualblock.img bs=512 count=1048576
losetup /dev/loop0 /var/lib/virtualblock.img
所以,要開始這個創建一個512M文件,它是我們的虛擬塊設備的基礎,我們將打入一個“洞”.但是還沒有洞.如果您使用mkfs.ext4 / dev / loop0,您將獲得一個完全有效的文件系統.
所以,讓我們使用dmsetup,使用這個塊設備 – 將創建一個新的設備,其中有一些洞.
這是一個例子
dmsetup create errdev0
0 261144 linear /dev/loop0 0
261144 5 error
261149 787427 linear /dev/loop0 261139
這將創建一個名為“errdev0”的設備(通常在/ dev / mapper中).當你鍵入dmsetup create errdev0時,它將等待stdin并在^ D輸入時結束.
在上面的例子中,我們在循環設備的扇區261144處創建了一個5扇區孔(2.5kb).然后我們繼續正常循環設備.
這個腳本將嘗試生成一個表,該表將在大約16Mb左右的隨機位置放置孔(盡管它非常隨機).
#!/bin/bash
start_sector=0
good_sector_size=0
for sector in {0..1048576}; do
if [[ ${RANDOM} == 0 ]]; then
echo "${start_sector} ${good_sector_size} linear /dev/loop0 ${start_sector}"
echo "${sector} 1 error"
start_sector=$((${sector}+1))
good_sector_size=0
else
good_sector_size=$((${good_sector_size}+1))
fi
done
echo "${start_sector} $((${good_sector_size}-1)) linear /dev/loop0 ${start_sector}"
該腳本假設您還創建了一個512Mb設備,并且您的虛擬塊設備位于/ dev / loop0上.
您可以將此數據作為表輸出到文本文件,并將其傳遞到dmsetup create errdev0.
創建設備后,您可以像普通的塊設備一樣開始使用它,首先將其格式化,然后在其上放置文件.在某些時候,您應該遇到一些IO問題,在這些問題中,您會遇到虛擬設備中真正IO漏洞的扇區.
完成后使用dmsetup刪除errdev0以刪除設備.
如果您希望更容易出現IO錯誤,可以更頻繁地添加孔或更改您創建的孔的大小.注意把錯誤放在某些部分可能會導致問題從一開始,I.E在32mb進入一個設備你不能寫出一個ext通常試圖做的超級塊,所以格式不會工作..
為了增加樂趣 – 你可以實際上只是losetup然后mkfs.ext4 / dev / loop0并用數據填充它.一旦你有一個很好的工作文件系統,只需卸載文件系統并使用dmsetup添加一些漏洞并重新安裝!
總結
以上是生活随笔為你收集整理的linux 远程 i o 错误,故意在Linux中导致I / O错误?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux修改时间指令,Linux 修改
- 下一篇: linux ping结果中mdev,Li