2009-02-09 7 views
17

Devo scrivere uno script bat per uno scenario di test in cui il software che stiamo testando non riesce a scrivere su file a causa di un errore pieno del disco. Lo script di test deve essere automatizzato, in modo che possiamo eseguirlo su test notturni, per esempio. Lo script di test deve funzionare anche su computer diversi, quindi installare un software come una macchina virtuale non sarebbe la soluzione migliore in questo caso.Come posso simulare un errore completo del disco in un ambiente Windows?

Come posso simulare quell'errore in un ambiente Windows?

+0

Le persone sembrano ignorare che hai scritto "scenario di prova". Ciò significa per me che cerchi una soluzione che funzioni indipendentemente dall'ambiente (test eseguito su un altro computer). – Leonidas

+0

Leonidas: Grazie per i commenti. Ho aggiornato la domanda. –

+0

Correlati: [Il modo più semplice per simulare la mancanza di spazio libero su disco?] (Http://stackoverflow.com/q/2043999) – tchrist

risposta

11

Si potrebbe provare a scrivere su un disco floppy completo.

Edit:

Alla luce della tua domanda modificato, è possibile impostare una condivisione di rete senza quote di spazio su disco e scrivere a questo. L'errore verrà quindi prodotto indipendentemente dall'utente o dalla macchina che ha effettuato l'accesso.

+5

Oppure, da questo secolo, un disco USB completo. Ripartirlo, se necessario. – gregmac

+1

+1 per il disco USB/stick/qualunque. Chi passerebbe ore e ore ad aspettare che un floppy reagisca nel 2009? –

+4

Chi ha ancora i dischetti? Le intenzioni erano buone, scuse per aver vissuto nel 1990! :) –

6

Potrebbe sembrare un po 'troppo, ma una cosa che posso pensare è di usare una macchina virtuale, e impostare il suo disco virtuale in modo che sia abbastanza grande da adattarlo al sistema operativo. Riempilo con alcuni file spazzatura per rovesciarlo oltre il bordo, quindi esegui il tuo programma.

5

Creare una partizione secondaria, riempirla con la posta indesiderata e quindi eseguire il programma lì.

+0

C'è un modo per scrivere uno script che automatizza la creazione di una partizione di una configurazione? –

+0

Alceu: molte versioni di fdisk accettano i parametri della riga di comando. –

2

La cosa migliore che funziona su ogni computer (dato che il test non è necessariamente eseguito su una macchina dedicata) sarebbe una ramdrive/ramdisk che potrebbe essere configurata al volo.

Trovato solo un disco virtuale SDK fino ad ora see here che potrebbe essere incluso nel processo buzild.

Idea diversa: forse i computer di prova potrebbero essere impostati per scrivere su una cartella di rete condivisa (cioè piena) montata come unità?

2

Creare un nuovo utente, impostarne una quota e utilizzare runas per eseguire l'app come tale utente. (non esattamente uguale al disco pieno, ma dovrebbe avere conseguenze simili.)

10

Scaricare e installare TrueCrypt. È quindi possibile creare una partizione virtuale di qualsiasi dimensione desiderata (un paio di megabyte), montarla e quindi riempirla con un paio di documenti.

2

Il sistema operativo risponderà in modo diverso al riempimento dell'unità di sistema piuttosto che al riempimento di altre unità e, come tale, anche l'applicazione lo farà, sicuramente? Il semplice riempimento di un'unità indipendentemente da ciò che viene utilizzato dal supporto fisico non sarà un test accurato.

Non si può prendere in giro l'evento del file system per un disco completo? Perché dovresti aspettare fino a quando il disco è pieno? Non vorresti monitorare periodicamente lo spazio del disco e avvisare l'utente quando il disco ha un margine percentuale di riempimento? Anziché aspettare che lo spazio su disco sia terminale, basta impedire che la tua applicazione funzioni fino a quando il problema non viene risolto, in caso contrario non si potrebbero verificare dati I/O ed essere irrecuperabili!

Se il test ha un test di integrazione rigido, è possibile eseguire l'automazione di una macchina virtuale, distribuire l'applicazione e quindi riempire lo spazio rimanente con uno script ricorsivo.

4

È possibile impostare un ramdisk piccolo e scrivere su quello. Vedi questa pagina per alcuni free ramdisk products.

10

Per Windows XP o versioni successive:

Questo comando può ottenere la quantità di spazio libero per il c: \ drive:

for /f "usebackq tokens=1-5" %%A in (`dir c:\ ^| find "bytes free"`) do (
    set FREE_SPACE=%%C 
) 

sostituire C: \ con l'unità, se necessario.

si può quindi prendere qualche spazio lontano da questo valore in modo da avere un po 'di spazio per lavorare con:

set /a FREE_SPACE=FREE_SPACE-1024 

o comunque molto spazio si desidera mantenere libera.

È possibile utilizzare il comando fsutil per creare un file per riempire lo spazio libero sul disco:

fsutil file createnew c:\spacehog.dat %FREE_SPACE% 

Esegui il test, la scrittura sul disco. Dopo aver scritto 1024 byte, si dovrebbe esaurire lo spazio.

+0

Questo è quello che ho usato, e ha funzionato alla grande. La mia installazione XP è una VM, quindi ho fatto uno snapshot prima, fsutil, ed ho eseguito il mio test. –

+0

Questo sarà solo wok se lo spazio libero è inferiore a 2 GiB, però. L'aritmetica di 'cmd' è limitata agli interi con segno a 32 bit. Credo che nell'ultimo decennio sarebbe stato piuttosto difficile trovare quel poco spazio libero per far funzionare tutto questo. – Joey

1

usare un piccolo target iSCSI

2

Ho fatto una modifica allo script di cui sopra per renderlo compatiable con Windows 7 ... In sostanza aggiungendo il parametro "/ c" per l'istruzione for. Questo rimuove il separatore di migliaia come fsutil non piace nella dichiarazione.

for /f "usebackq tokens=1-5" %%A in (`dir /-c d:\ ^| find "bytes free"`) do (set FREE_SPACE=%%C) 
fsutil file createnew d:\largefile.txt %FREE_SPACE% 
6

opzione migliore: Microsoft consumano programma

Motivi:

  • E test del disco di sistema (vs un disco separato)
  • E 'veloce - eseguire il programma per riempire il disco all'istante, fermarsi quando non è più necessario
  • È facile: non è necessario creare ed eliminare file. Nessuna partizione di test extra in giro. L'installazione è richiesta, ma in seguito è possibile utilizzare un semplice comando.
  • E 'script

Passi:

  1. Installare il Windows Server 2003 Resource Kit Tools (funziona bene su Windows 7)
  2. cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools" (o dovunque è installato)
  3. consume.exe -disk-space

Command uscita:

C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe 
Universal Resource Consumer - Just an innocent stress program, v 0.1.0 
Copyright (c) 1998, 1999, Microsoft Corporation 

    consume RESOURCE [-time SECONDS] 

RESOURCE can be one of the following: 

    -physical-memory 
    -page-file 
    -disk-space 
    -cpu-time 
    -kernel-pool 


C:\Program Files (x86)\Windows Resource Kits\Tools>consume.exe -disk-space 
Consume: Message: Total disk space:   96049 Mb 
Consume: Message: Free disk space:   14705 Mb 
Consume: Message: Free per user space:  14705 Mb 
Consume: Message: Attempting to use:  14705 Mb 
Consume: Message: Reattempting to use:  14705 Mb 
Consume: Message: Sleeping ... 

Altre opzioni:

  • Windows 7 ha un virtual hard drive feature.Fondamentalmente fai quanto segue: Gestione computer> Gestione disco> Menu Azione> Crea VHD> Fai clic destro su disco e Inizializza> Fai clic destro
  • Genera file di grandi dimensioni (dovrebbe essere istantaneo) finché il disco non è pieno utilizzando un comando shell o il programma Dummy File Generator. Un altro prorgramma: SpaceHog.
+1

La funzionalità del disco rigido virtuale in Windows 7 ha fatto il trucco per me. Ho solo bisogno di testare l'errore per creare la logica del gestore appropriato. Ho creato un VHD da 10 MB. La contabilità di Windows occupa circa 7 MB sul VHD, quindi quando provo a scrivere qualcosa di più grande di 3 MB sul disco, sputa l'errore. – Snapman