Cree rápidamente un archivo grande en un sistema Windows

Respuestas:

399
fsutil file createnew <filename> <length>

donde <length>está en bytes.

fsutil requiere privilegios administrativos sin embargo.

Patrick Cuff
fuente
66
@ZXX +1 Para mis propósitos, simplemente necesitaba que el sistema de archivos viera que el espacio no estaba disponible, pero su información es útil si alguien más lo necesita.
Leigh Riffel
22
El archivo fsutil createnew no crea un archivo disperso.
Por Mildner
77
"fsutil sparse setflag temp.txt" establece la bandera dispersa, convirtiéndola en un archivo disperso. "fsutil sparse setrange temp.txt 0 1024" establece el rango de escasez :)
Coldblackice
¿Hay alguna manera sin privilegios de administrador?
wizlog
3
@ZXX fsutil file createnewNO crea archivos dispersos:c:\>fsutil file createnew test.txt 0x100000 File c:\test.txt is created c:\>fsutil sparse queryflag test.txt This file is NOT set as sparse
ivan_pozdeev
36

Puede usar la herramienta Contig de Sysinternals . Tiene un -ninterruptor que crea un nuevo archivo de un tamaño determinado. A diferencia fsutil, no requiere privilegios administrativos.

Joey
fuente
2
¡Guauu! Muy rápido para descargar y ejecutar. La línea que utilicé es m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel
66
¿Solo quiere verificar si este es un archivo escaso o si el archivo realmente tiene datos?
slolife
2
No es un archivo escaso (que yo sepa) y el archivo está vacío.
Joey
1
Estoy confundido aquí ... si es instantáneo y no es un archivo escaso, entonces, ¿cómo usa realmente el espacio en disco?
Jason S
2
@JasonS: contigefectivamente va al último byte y escribe un solo 0allí (solo mire con Process Monitor). Windows luego llena el resto con ceros. Esto es probablemente lo más eficiente posible con archivos no dispersos y la creación de un archivo de aproximadamente 5 GiB de tamaño solo toma unos segundos incluso en mi disco duro. Supongo que en ese entonces lo intenté en un SSD o con archivos más pequeños. Pero es bastante rápido (y definitivamente más rápido que escribir todos los bytes del archivo vacío usted mismo.)
Joey
23

Estaba buscando una manera de generar archivos grandes con datos, no solo archivos dispersos. Encontré la siguiente técnica :

Si desea crear un archivo con datos reales, puede usar el siguiente script de línea de comandos.

echo "This is just a sample line appended to create a big file.. " > dummy.txt
for /L %i in (1,1,14) do type dummy.txt >> dummy.txt

(Ejecute los dos comandos anteriores uno tras otro o puede agregarlos a un archivo por lotes).

Los comandos anteriores crean un archivo dummy.txt de 1 MB en pocos segundos ...

Giri
fuente
66
Extracto del enlace anterior: si desea crear un archivo con datos reales, puede usar el siguiente script de línea de comandos. echo "This is just a sample line appended to create a big file.. " > dummy.txt for /L %i in (1,1,14) do type dummy.txt >> dummy.txt (Ejecute los dos comandos anteriores uno tras otro o puede agregarlos a un archivo por lotes). Los comandos anteriores crean un archivo dummy.txt de 1 MB en pocos segundos.
Tony Stark
Atención: primero debe copiar la primera línea, presionar Entrar y luego copiar la segunda línea. Intenté copiar todo el script en mi shell pero luego no sucedió nada.
Magiranu
15

Echa un vistazo a RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC probablemente no sea el más rápido, pero asigna bloques de datos. El más rápido tendría que usar API de nivel inferior para obtener cadenas de clúster y ponerlas en MFT sin escribir datos.

Tenga en cuenta que no hay una bala de plata aquí: si la "creación" regresa instantáneamente, eso significa que tiene un archivo disperso que simplemente falsifica un archivo grande, pero no obtendrá bloques / cadenas de datos hasta que escriba en él. Si acabas de leer, obtendrías ceros muy rápidos que podrían hacerte creer que tu disco de repente se volvió increíblemente rápido :-)

ZXX
fuente
Esta parece ser la mejor respuesta. FSUTIL crea un archivo disperso que no es un escenario de prueba válido para muchos casos. Sysinternals contig nunca parece funcionar para mí, cuando uso un comando como "contig -n largefile.bin 6000000000 crea un archivo de 1.7GB de tamaño ... Gracias por RDFC porque funcionó perfectamente el primer intento y escribe en la velocidad máxima de escritura de mi disco ATA.
Syclone0044
Como se ha dicho anteriormente, FSUTIL "createnew" NO crea archivos dispersos, simplemente asigna (en la MFT) el espacio solicitado al archivo solicitado, es decir, el espacio completo. Si luego verifica las propiedades del archivo, el tamaño asignado (llamado molestamente "tamaño en disco", ya que puede estar en cualquier dispositivo que no sea necesariamente un "disco") es similar o muy cercano al tamaño real. Un archivo disperso real totalmente lleno de ceros tendría un tamaño asignado muy pequeño. La única herramienta que encontré que puede convertir un archivo no disperso en un archivo disperso (y en realidad reducir su tamaño, no solo marcarlo) es SparseTest.
GabrielB
13

Verifique las herramientas del Kit de recursos de Windows Server 2003 . Hay una utilidad llamada Creatfil.

 CREATFIL.EXE
 -? : This message
 -FileName -- name of the new file
 -FileSize -- size of file in KBytes, default is 1024 KBytes

Es similar a mkfile en Solaris.

Byron Whitlock
fuente
1
Prefiero no tener que descargar el kit de recursos.
Leigh Riffel
solo necesitaría el 1 exe del kit de recursos, no tiene que tener todo en su sistema de producción.
Byron Whitlock
1
Lo intentaré, pero prefiero no tener la dependencia de archivo adicional.
Leigh Riffel
El archivo no se está descargando correctamente para mí ahora, pero no puedo imaginar que sea más rápido que la herramienta Contig mencionada por Johannes Rossel.
Leigh Riffel
1
¡Gracias! El paquete descargado es rktools.exe y tiene 11.7 MB y 18.2 MB cuando se expande. Ah, y eso es "creatfil.exe" y no "createfil.exe". Este archivo solo tiene un tamaño de 5.5 KB y eso es todo lo que realmente necesita. Me llevó menos de 1 minuto generar un archivo de 1 GB en una CPU Intel de cuatro núcleos a 3.0 GHz. Con la herramienta fsutil.exe como se publicó anteriormente, solo se necesita una fracción de segundo para crearla. Entonces es cierto, esa herramienta crea archivos dispersos. Es aún más grande, es 73,5 KB. Este es mejor para generar archivos grandes con fines de prueba.
Samir
11

Necesitaba un archivo normal de 10 GB para probar, por lo que no pude usarlo fsutilporque crea archivos dispersos (gracias @ZXX).

@echo off

:: Create file with 2 bytes
echo.>file-big.txt

:: Expand to 1 KB
for /L %%i in (1, 1, 9) do type file-big.txt>>file-big.txt

:: Expand to 1 MB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 1 GB
for /L %%i in (1, 1, 10) do type file-big.txt>>file-big.txt

:: Expand to 4 GB
del file-4gb.txt
for /L %%i in (1, 1, 4) do type file-big.txt>>file-4gb.txt

del file-big.txt

Quería crear un archivo de 10 GB, pero por alguna razón solo apareció como 4 GB, por lo que quería estar seguro y me detuve en 4 GB. Si realmente desea asegurarse de que su archivo será manejado adecuadamente por el sistema operativo y otras aplicaciones, deje de expandirlo a 1 GB.

f.ardeliano
fuente
Debe usar un solo carácter de porcentaje, no el doble. Además, no necesita los espacios adicionales entre paréntesis. Lo editaré por ti.
Samir
¿Qué sistema operativo usaste aquí compañero? ¿ rmEs un comando Unix / Linux, mientras que deles un comando DOS / Windows? ...
Samir
¿Se supone que esto es un archivo por lotes o se supone que debe ejecutar estos comandos directamente en cmd? El signo de porcentaje único se usa en cmd, como %ipero en un archivo por lotes se usa el signo de porcentaje doble, como %%i.
Samir
@Sammy: Comienza con @echo off, así que obviamente es un .bat. Por eso tenía signos de doble porcentaje.
f.ardelian
Muy bien, entonces podríamos querer recuperar el doble signo de porcentaje. ¿Por qué eliminas file-4gb.txtantes de crearlo? ¿No resultaría eso un error? ¿Realmente querías crear file-4gb.txten esa línea? O cambiar el nombre del file-big.txtarchivo antiguo ? Esto no está claro, incluso para un archivo por lotes. Si desea cambiar el nombre, probablemente el comando que estaba buscando es ren. Al igual ren file-big.txt file-4gb.txt. Creo que confundiste eso con rm.
Samir
7

Abra el Administrador de tareas de Windows, encuentre el proceso más grande que esté ejecutando, haga clic derecho y haga clic en Create dump file.

Esto creará un archivo relativo al tamaño del proceso en la memoria en su carpeta temporal.

Puede crear fácilmente un archivo de tamaño en gigabytes.

Ingrese la descripción de la imagen aquí

Ingrese la descripción de la imagen aquí

shenku
fuente
2
buena solución! Útil si tiene una variedad de aplicaciones en ejecución, para obtener diferentes tamaños
Don Cheadle
6

A falta de escribir una aplicación completa, los chicos de Python podemos lograr archivos de cualquier tamaño con cuatro líneas, el mismo fragmento en Windows y Linux (la os.stat()línea es solo un cheque):

>>> f = open('myfile.txt','w')
>>> f.seek(1024-1) # an example, pick any size
>>> f.write('\x00')
>>> f.close()
>>> os.stat('myfile.txt').st_size
1024L
>>>
gimel
fuente
1
Instalar Python para resolver un problema es realmente excesivo. ¿Por qué no utilizar algo integrado como Powershell o C #? Gist.github.com/nadams810/6539070 (ni siquiera necesita Visual Studio para compilar aplicaciones C #).
Natalie Adams
1
.Net, C # y Powershell no son necesariamente multiplataforma.
gimel
1
Están integrados en Windows, que es lo que solicitó el OP (suponiendo que su sistema esté completamente actualizado).
Natalie Adams
@NatalieAdams Pero esta respuesta es bastante útil si ya tiene instalado Python para resolver otros problemas. :)
criptych está con Monica
6

PowerShell one-liner para crear un archivo C:\Temppara llenar el disco C: dejando solo 10 MB:

[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close
varilla
fuente
3
¿creará un archivo con contenido real o un archivo disperso?
Samselvaprabu
6

Utilizar:

/*
Creates an empty file, which can take all of the disk
space. Just specify the desired file size on the
command line.
*/

#include <windows.h>
#include <stdlib.h>

int main (int argc, char* ARGV[])
{
    int size;
    size = atoi(ARGV[1]);
    const char* full = "fulldisk.dsk";
    HANDLE hf = CreateFile(full,
                           GENERIC_WRITE,
                           0,
                           0,
                           CREATE_ALWAYS,
                           0,
                           0);
    SetFilePointer(hf, size, 0, FILE_BEGIN);
    SetEndOfFile(hf);
    CloseHandle(hf);
    return 0;
}
lkurts
fuente
¿Qué es int? ¿Funcionará para un archivo de 5 GB? ¿Está limitado a 2 o 4 GB? Que el tercer parámetro SetFilePointer()sea ​​0 sugiere que no funcionará para un archivo de 5 GB.
Peter Mortensen
4

Estaba buscando una forma de crear un archivo ficticio grande con asignación de espacio recientemente. Todas las soluciones se ven incómodas. Finalmente, acabo de iniciar la DISKPARTutilidad en Windows (integrada desde Windows Vista):

DISKPART
CREATE VDISK FILE="C:\test.vhd" MAXIMUM=20000 TYPE=FIXED

Donde MÁXIMO es el tamaño del archivo resultante, 20 GB aquí.

chersun
fuente
La mejor solución hasta ahora.
Frank FYC
No funciona para mi Desafortunadamente no se crea ningún archivo. Lo intenté con privilegios de administrador.
Magiranu
4

Encontré una excelente utilidad que es configurable en https://github.com/acch/genfiles .

Llena el archivo de destino con datos aleatorios, por lo que no hay problemas con los archivos dispersos, y para mis propósitos (probar algoritmos de compresión) proporciona un buen nivel de ruido blanco.

MusikPolice
fuente
Esta utilidad es una aplicación Java de un solo archivo que debería funcionar en cualquier plataforma con Java.
Paul
@MusikPolice - Link está muerto
dcp
Célebre. Desafortunadamente, eso sucederá después de seis años.
MusikPolice
3

Los archivos temporales deben almacenarse en la carpeta temporal de Windows. Según la respuesta de Rod , puede usar el siguiente revestimiento para crear un archivo temporal de 5 GB que devuelve el nombre de archivo

[System.IO.Path]::GetTempFileName() | % { [System.IO.File]::Create($_).SetLength(5gb).Close;$_ } | ? { $_ }

Explicación:

  • [System.IO.Path]::GetTempFileName() genera un nombre de archivo aleatorio con extensión aleatoria en la carpeta temporal de Windows
  • La canalización se utiliza para pasar el nombre al [System.IO.File]::Create($_)que crea el archivo
  • El nombre del archivo se establece en el archivo recién creado con .SetLength(5gb). Me sorprendió un poco descubrir que PowerShell admite la conversión de bytes , lo que es realmente útil.
  • El identificador de archivo debe cerrarse .closepara permitir que otras aplicaciones accedan a él.
  • Con ;$_el nombre de archivo se devuelve y | ? { $_ }se garantiza que solo se devuelva el nombre de archivo y no la cadena vacía devuelta por[System.IO.File]::Create($_)
Florian Feldhaus
fuente
3

La forma más simple que he encontrado es esta utilidad gratuita: http://www.mynikko.com/dummy/

Crea archivos ficticios de tamaño arbitrario que se llenan con espacios o con contenido no comprimible (usted elige). Aquí hay una captura de pantalla:

ingrese la descripción de la imagen aquí

yosh m
fuente
3

Plain ol 'C ... esto se construye bajo MinGW GCC en Windows XX y debería funcionar en cualquier plataforma C' genérica '.

Genera un archivo nulo de un tamaño especificado. El archivo resultante NO es solo una entrada de directorio que ocupa el espacio, y de hecho ocupa el número especificado de bytes. Esto es rápido porque no se producen escrituras reales, excepto el byte escrito antes del cierre.

Mi instancia produce un archivo lleno de ceros; esto puede variar según la plataforma; este programa esencialmente configura la estructura de directorios para cualquier dato que esté rondando.

#include <stdio.h>
#include <stdlib.h>

FILE *file;

int main(int argc, char **argv)
{
    unsigned long  size;

    if(argc!=3)
    {
        printf("Error ... syntax: Fillerfile  size  Fname \n\n");
        exit(1);
    }

    size = atoi(&*argv[1]);

    printf("Creating %d byte file '%s'...\n", size, &*argv[2]);

    if(!(file = fopen(&*argv[2], "w+")))
    {
        printf("Error opening file %s!\n\n", &*argv[2]);
        exit(1);
    }

    fseek(file, size-1, SEEK_SET);
    fprintf(file, "%c", 0x00);
    fclose(file);
}
Bill W
fuente
Le sugiero que compruebe cómo formateé su código. Y por cierto. la pregunta ya tiene una muy buena respuesta, y fseek + fwrite ya se presentó en Pyton y WinAPI, por lo que esto es de poca ayuda. Sin embargo, es bueno que hayas proporcionado un ejemplo completo. +1 por eso. Pero trate de no responder preguntas ya resueltas, es solo una pérdida de tiempo en la que podría ayudar a alguien un poco más :)
quetzalcoatl
2

Encontré una solución usando DEBUG en http://www.scribd.com/doc/445750/Create-a-Huge-File , pero no conozco una manera fácil de escribirlo y parece que no puede para crear archivos de más de 1 GB.

Leigh Riffel
fuente
1
¿no puedes crear 5 archivos y luego agregarlos?
Créelos
No sé si podría enhebrarlo sin programar, pero sí, puedo copiar el archivo varias veces para obtener el tamaño que necesito. En mi caso, no necesito que el archivo en sí sea de 5GB, solo el espacio usado.
Leigh Riffel
2
Escribir en múltiples archivos usando subprocesos suena como una idea terrible, dada la lentitud de los discos duros ... Además, agregarlos es bastante costoso en términos de tiempo, por lo que probablemente no cumpla con los criterios "rápidos".
Joey
2

Puede usar el comando cat powershell.

Primero cree un archivo de texto simple con algunos caracteres. Cuantos más caracteres iniciales ingreses, más rápido se hará más grande. Vamos a llamarlo.txt. Luego en Powershell:

cat out.txt >> out.txt

Espere el tiempo que sea necesario para hacer el archivo lo suficientemente grande. Luego presione ctrl-c para finalizarlo.

Meghdad
fuente
1

Puedes probar este código C ++:

#include<stdlib.h>
#include<iostream>
#include<conio.h>
#include<fstream>
#using namespace std;

int main()
{
    int a;
    ofstream fcout ("big_file.txt");
    for(;;a += 1999999999){
        do{
            fcout << a;
        }
        while(!a);
    }
}

Tal vez tomará algún tiempo generarlo dependiendo de la velocidad de su CPU ...

NEt_Bomber
fuente
El cartel preguntó rápidamente. Esto requeriría instalar un compilador de C ++.
1

Respuesta simple en Python: si necesita crear un archivo de texto real grande, simplemente utilicé un whilebucle simple y pude crear un archivo de 5 GB en aproximadamente 20 segundos. Sé que es crudo, pero es lo suficientemente rápido.

outfile = open("outfile.log", "a+")

def write(outfile):
    outfile.write("hello world hello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello worldhello world"+"\n")
    return

i=0
while i < 1000000:
    write(outfile)
    i += 1
outfile.close()
jkdba
fuente
0

¿Rápido de ejecutar o rápido de escribir en un teclado? Si usa Python en Windows, puede intentar esto:

cmd /k py -3 -c "with open(r'C:\Users\LRiffel\BigFile.bin', 'wb') as file: file.truncate(5 * 1 << 30)"
Noctis Skytower
fuente
0

Otra solución GUI: WinHex.

“File” > “New” > “Desired file size” = [X]
“File” > “Save as” = [Name]

Al contrario de algunas de las soluciones ya propuestas, en realidad escribe los datos (vacíos) en el dispositivo.

También permite llenar el nuevo archivo con un patrón seleccionable o datos aleatorios:

“Edit” > “Fill file” (or “Fill block” if a block is selected)
GabrielB
fuente
-1

He hecho algunas adiciones al mismo fsutilmétodo que se menciona en la respuesta elegida. Esto es para crear archivos de muchas extensiones diferentes y / o de varios tamaños.

set file_list=avi bmp doc docm docx eps gif jpeg jpg key m4v mov mp4 mpg msg nsf odt pdf png pps ppsx ppt pptx rar rtf tif tiff txt wmv xls xlsb xlsm xlsx xps zip 7z
set file_size= 1
for %%f in (%file_list%) do (
fsutil file createnew valid_%%f.%%f %file_size%
) > xxlogs.txt

El código se puede clonar desde https://github.com/iamakidilam/bulkFileCreater.git

Alan Pallath
fuente