2009-02-09 27 views
17

Tengo que escribir un script bat para un escenario de prueba donde el software que estamos probando no puede escribir en el archivo debido a un error de disco lleno. El script de prueba debe estar automatizado, de modo que podamos ejecutarlo en pruebas durante la noche, por ejemplo. El script de prueba también debe funcionar en diferentes computadoras, por lo que la instalación de un software como una máquina virtual no sería la mejor solución en este caso.¿Cómo puedo simular un error de disco lleno en un entorno de Windows?

¿Cómo puedo simular ese error en un entorno de Windows?

+0

La gente parece pasar por alto que escribió "escenario de prueba". Eso significa para mí que busca una solución que funcione independientemente del entorno (pruebas realizadas en una computadora diferente). – Leonidas

+0

Leonidas: Gracias por los comentarios. He actualizado la pregunta. –

+0

Relacionados: [¿La forma más fácil de simular sin espacio libre en el disco?] (Http://stackoverflow.com/q/2043999) – tchrist

Respuesta

11

Puede intentar escribir en un disquete completo.

Editar:

A la luz de su pregunta editada, podría configurar una red compartida con ninguna cuota de espacio en disco y escribir a eso. El error se producirá independientemente del usuario o la máquina que haya iniciado sesión.

+5

O, desde este siglo, un disco USB completo. Repartición, si es necesario. – gregmac

+1

+1 para el disco USB/stick/lo que sea. ¿Quién pasaría horas y horas esperando que un disquete reaccione en 2009? –

+4

¿Quién incluso tiene disquetes? Las intenciones eran buenas, ¡disculpas por vivir en 1990! :) –

6

Puede parecer un poco demasiado, pero una cosa que se me ocurre es usar una máquina virtual y configurar su disco virtual lo suficientemente grande como para caber en el sistema operativo. Llénelo con algunos archivos de basura para inclinarlo sobre el borde, luego ejecute su programa.

5

Crea una partición secundaria, llénalo con basura y luego ejecuta tu programa allí.

+0

¿Hay alguna manera de escribir una secuencia de comandos que automatice la creación de una configuración? –

+0

Alceu: muchas versiones de fdisk aceptan parámetros de línea de comandos. –

2

Lo mejor que funciona en todas las computadoras (ya que las pruebas no se realizan necesariamente en una máquina dedicada) sería un ramdrisk/ramdisk que se podría configurar sobre la marcha.

Solo encontré un disco virtual SDK hasta el momento see here que tal vez podría incluirse en su proceso buzild.

Idea diferente: quizás sus computadoras de prueba podrían configurarse para escribir en una carpeta de red compartida (que está llena) montar como una unidad?

2

Crea una nueva cuenta de usuario, establece una cuota para ella y usa runas para ejecutar tu aplicación como ese usuario. (No es exactamente lo mismo que un disco lleno, pero debería tener consecuencias similares.)

10

Descargue e instale TrueCrypt. Luego puede crear una partición virtual de cualquier tamaño que desee (un par de megabytes), montarla y luego llenarla con un par de documentos.

2

El sistema operativo responderá de manera diferente a su sistema de llenado de unidades que a otras unidades de llenado y, como tal, su aplicación también lo hará, ¿no? Simplemente llenar una unidad independientemente de los medios físicos que se utilicen no será una prueba precisa.

¿No puede burlarse del evento del sistema de archivos por un disco completo? ¿Por qué querrías esperar hasta que el disco esté lleno? ¿No le gustaría monitorear el espacio de disco periódicamente y advertir al usuario cuando el disco tiene un margen de porcentaje de llenado? En lugar de esperar hasta que el espacio en disco sea terminal, simplemente evite que su aplicación funcione hasta que se resuelva el problema, ¡si no lo hace, podría afectar cualquier IO de datos y no podría recuperarse!

Si la prueba tiene como una prueba de integración difícil, automatizar una máquina virtual, desplegar la aplicación y luego llenar el espacio restante con un script recursivo es factible.

10

Para Windows XP o posterior:

Este comando se puede obtener la cantidad de espacio libre para la unidad c: \:

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

reemplace C: \ por la unidad, según sea necesario.

, entonces puede tomar un poco de espacio lejos de este valor por lo que tiene un poco de espacio para trabajar con:

set /a FREE_SPACE=FREE_SPACE-1024 

o por mucho espacio que desea mantener libre.

Puede utilizar el comando fsutil para crear un archivo para llenar el espacio libre en el disco:

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

ejecutar su prueba, escritura en la unidad. Después de escribir 1024 bytes o menos, debería quedarse sin espacio.

+0

Esto es lo que usé, y funcionó muy bien. Mi instalación de XP es una VM, así que hice una instantánea antes, fsutil, y ejecuté mi prueba. –

+0

Esto solo funcionará si el espacio libre es menor a 2 GiB, sin embargo. La aritmética de 'cmd' está restringida a enteros con signo de 32 bits. Supongo que en la última década sería un poco difícil encontrar ese pequeño espacio libre para que esto funcione. – Joey

1

usan una pequeña destino iSCSI

2

he hecho una modificación en la secuencia de comandos para que sea compatiable con Windows 7 ... Esencialmente añadiendo el modificador "/ c" a la instrucción for. Esto elimina los miles de separadores ya que a fsutil no le gusta en la declaración.

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

mejor opción: Microsoft consumamos programa

Razones:

  • Se pruebas el disco del sistema (vs una unidad separada)
  • Es rápido - ejecutar el programa de llene el disco instantáneamente, pare cuando ya no sea necesario
  • Es fácil: sin crear y eliminar archivos. No hay partición de prueba extra dando vueltas. Se requiere instalación, pero puede usar un comando simple después.
  • ¡Es scripts

Pasos:

  1. instalar el Windows Server 2003 Resource Kit Tools (funciona bien en Windows 7)
  2. cd "%ProgramFiles(x86)%\Windows Resource Kits\Tools" (o dondequiera que esté instalado)
  3. consume.exe -disk-space

Comando salida:

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 ... 

Otras opciones:

  • Windows 7 tiene un virtual hard drive feature.Básicamente haga lo siguiente: Computer Management> Disk Management> Action Menu> Create VHD> Haga clic derecho en el disco e Inicialice> Haga clic con el botón secundario
  • Genere archivos grandes (debe ser instantáneo) hasta que el disco esté lleno usando un comando shell o el programa Dummy File Generator. Otro prorgram: SpaceHog.
+1

La función de disco duro virtual en Windows 7 me ayudó. Solo necesitaba probar el error para crear la lógica de controlador adecuada. Creé un VHD de 10 MB. La contabilidad de Windows ocupa alrededor de 7 MB en el VHD, por lo que cuando intento escribir algo más grande que 3 MB en el disco, se escupe el error. – Snapman

Cuestiones relacionadas