2009-12-08 15 views
11

Sto cercando un modo più semplice per testare la mia applicazione su dispositivi a blocchi difettosi che generano i/o errori di lettura quando alcuni blocchi vengono letti. Cercare di utilizzare un disco rigido fisico con blocchi danneggiati noti è un problema e mi piacerebbe trovare una soluzione software se ne esiste una.Simulare un dispositivo a blocchi difettoso con errori di lettura?

Ho trovato il Linux Disk Failure Simulation Driver che consente di creare un'interfaccia che può essere configurata per generare errori quando vengono letti determinati intervalli di blocchi, ma è per il kernel Linux 2.4 e non è stato aggiornato per 2.6.

Ciò che sarebbe perfetto sarebbe un perdente e un loop driver che permettesse anche di configurarlo per restituire gli errori di lettura quando si tenta di leggere da un determinato set di blocchi.

+0

Oltre alle risposte vedere la [lista dei meccanismi di fault injection disco Linux] (https://unix.stackexchange.com/a/144200/61610) sopra su il [file speciale che causa l'errore I/O nella domanda Unix & Linux] (https://unix.stackexchange.com/questions/77492/special-file-that-causes-io-error/144200#144200). – Anon

risposta

19

Non è un dispositivo di loopback che si sta cercando, ma piuttosto un mappatore di dispositivi.

Utilizzare dmsetup per creare un dispositivo supportato dalla destinazione "errore". Si visualizzerà in /dev/mapper/<name>.

Pagina 7 del Device mapper presentation (PDF) è esattamente quello che stai cercando:

dmsetup create bad_disk << EOF 
    0 8  linear /dev/sdb1 0 
    8 1  error 
    9 204791 linear /dev/sdb1 9 
EOF 

O lasciare le sdb1 parti da e per mettere il bersaglio "errore" come dispositivo per i blocchi 0 - 8 (invece di sdb1) per creare un disco di errore puro.

Vedere anche The Device Mapper appendice da "RHEL 5 Amministrazione gestione volumi logici".

+0

ha funzionato perfettamente - proprio quello di cui avevo bisogno. Grazie! – SteveG

+0

Il PDF sopra non spiega (almeno non ho capito) la sintassi della riga di comando per "dmsetup create". La pagina man spiega: dmsetup crea dev_name dev_mapper_table. Il secondo argomento (dev_mapper_table) è un file di testo che descrive come vengono mappati i blocchi. La pagina man dmsetup è concisa e non spiega la sintassi di questa tabella. Ecco un link che lo spiega ... [link] (https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/device_mapper.html#dm-mappings) – technicalbloke

4

Il modo più semplice per giocare con i dispositivi a blocchi è utilizzare nbd.

scaricare i sorgenti dal userland git://github.com/yoe/nbd.git e modificare nbd-server.c a fallire a leggere o scrivere su qualunque aree si vuole fallire su, o di fallire in un pattern casuale in modo controllato, o fondamentalmente tutto quello che vuoi.

5

Sembra che le funzionalità di integrazione dei guasti incorporate di Linux siano una buona idea da utilizzare.

Blog: http://blog.wpkg.org/2007/11/08/using-fault-injection/
Riferimento: https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt

+0

Durante i collegamenti sono buoni per ulteriori letture, dovresti esplicitamente presentare una risposta concreta qui, immagino. –

+0

Dipende anche dal kernel che si sta utilizzando: ad esempio nel kernel SLES11 SP4 la funzione non è compilata. –