Apakah ada, dengan Linux, yang sengaja menyebabkan perangkat blok melaporkan kesalahan I / O, atau mungkin mensimulasikannya untuk tujuan pengujian?
42
Apakah ada, dengan Linux, yang sengaja menyebabkan perangkat blok melaporkan kesalahan I / O, atau mungkin mensimulasikannya untuk tujuan pengujian?
modprobe
, berperilaku seperti perangkat blok, dan kemudian program kecil lain yang dikirimkanioctl()'s
ke driver untuk membuatnya mengembalikan nilai yang Anda inginkan.Jawaban:
Ya, ada cara yang sangat masuk akal untuk melakukan ini dengan perangkat mapper.
Mapper perangkat dapat menggabungkan kembali perangkat blok ke dalam pemetaan / urutan baru pilihan Anda. LVM melakukan ini. Ini juga mendukung target lain, (beberapa yang cukup baru) seperti 'flakey' untuk mensimulasikan disk yang gagal dan 'kesalahan' untuk mensimulasikan daerah disk yang gagal.
Seseorang dapat membuat perangkat yang sengaja memiliki lubang hitam IO di atasnya yang akan melaporkan kesalahan IO ketika menyeberang.
Pertama, buat beberapa volume virtual untuk digunakan sebagai target dan buat itu bisa dialamatkan sebagai perangkat blok.
Jadi, untuk memulai ini buatlah file 512M yang merupakan dasar dari perangkat blok virtual kami yang akan kami buat 'lubang'. Namun belum ada lubang. Jika Anda ke sana,
mkfs.ext4 /dev/loop0
Anda akan mendapatkan sistem file yang benar-benar valid.Jadi, mari kita gunakan dmsetup yang, menggunakan perangkat blok ini - akan membuat perangkat baru yang memiliki beberapa lubang di dalamnya. Berikut ini contohnya
Ini akan membuat perangkat yang disebut 'errdev0' (biasanya di / dev / mapper). Ketika Anda mengetiknya
dmsetup create errdev0
akan menunggu stdin dan akan selesai pada ^ D menjadi input.Pada contoh di atas, kami telah membuat lubang 5 sektor (2.5kb) di sektor 261144 dari perangkat loop. Kami kemudian melanjutkan melalui perangkat loop seperti biasa.
Script ini akan mencoba membuatkan Anda sebuah tabel yang akan menempatkan lubang di lokasi acak yang tersebar di sekitar 16MB (meskipun cukup acak).
Script mengasumsikan Anda juga telah membuat perangkat 512Mb dan perangkat blok virtual Anda aktif
/dev/loop0
.Anda bisa menampilkan data ini ke file teks sebagai tabel dan memasukkannya ke dalam file
dmsetup create errdev0
.Setelah Anda membuat perangkat, Anda dapat mulai menggunakannya seperti perangkat blok biasa, pertama dengan memformatnya dan kemudian dengan menempatkan file di atasnya. Pada titik tertentu Anda harus menemukan beberapa masalah IO di mana Anda menekan sektor yang benar-benar lubang IO di perangkat virtual.
Setelah Anda selesai menggunakan
dmsetup remove errdev0
untuk menghapus perangkat.Jika Anda ingin membuatnya lebih mungkin untuk mendapatkan kesalahan IO Anda dapat menambahkan lubang lebih sering atau mengubah ukuran lubang yang Anda buat. Catatan menempatkan kesalahan di bagian-bagian tertentu cenderung menyebabkan masalah saat bepergian, yaitu pada 32MB ke perangkat yang Anda tidak dapat menulis superblock yang biasanya dilakukan oleh ext, sehingga format tidak akan berfungsi.
Untuk menambahkan menyenangkan - Anda dapat benar-benar hanya
losetup
kemudianmkfs.ext4 /dev/loop0
dan mengisinya dengan data. Setelah Anda mendapatkan filesystem yang berfungsi dengan baik di sana, cukup unmount sistem file dan tambahkan beberapa lubang menggunakan dmsetup dan remount itu!sumber
Untuk memeriksa ketahanan program jika outputnya gagal, Anda dapat menggunakan pseudodevice
/dev/full
, yang selalu mengembalikan "ENOSPACE" saat ditulis.sumber
Tergantung pada apa yang ingin Anda uji. Menggunakan
LD_PRELOAD
perpustakaan ed, Anda dapat mengelabui aplikasi agar memikirkan hal-hal seperti 'semua penulisan gagalENOSPC
atauEIO
' misalnya.sumber
Anda dapat melakukannya dengan banyak cara menarik. Lihat https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt
sumber
fail_make_request
)? Juga bagus untuk mencegah pembusukan tautan.Mungkin Anda bisa mengubah tabel partisi dan membuat partisi lebih besar dari yang sebenarnya. Itu mungkin akan menyebabkan kesalahan i / o. Atau jika cakram Anda hot pluggable, Anda bisa menariknya.
sumber