Crea rapidamente file di grandi dimensioni su un sistema Windows


Risposte:


399
fsutil file createnew <filename> <length>

dove <length>è in byte.

fsutil richiede però i privilegi di amministratore.


6
@ZXX +1 Per i miei scopi avevo semplicemente bisogno del file system per vedere lo spazio come non disponibile, ma le tue informazioni sono utili se qualcun altro ne ha bisogno.
Leigh Riffel,

22
fsutil file createnew non crea un file sparse.
Per Mildner,

7
"fsutil sparse setflag temp.txt" imposta il flag sparse, rendendolo un file sparse. "fsutil sparse setrange temp.txt 0 1024" imposta l'intervallo di scarsità :)
Coldblackice,

c'è un modo senza i privilegi di amministratore?
wizlog,

3
@ZXX fsutil file createnewNON crea file sparsi: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 il

36

È possibile utilizzare lo strumento Contig di Sysinternals . Ha un -ninterruttore che crea un nuovo file di una determinata dimensione. Diversamente fsutil, non richiede privilegi amministrativi.


2
Wow! Molto veloce da scaricare ed eseguire. La linea che ho usato è m: \ contig -n M: \ SpaceBuffer.tmp 5368709120
Leigh Riffel,

6
Vuoi solo verificare se si tratta di un file sparse o il file contiene effettivamente dei dati?
slolife,

2
Non è un file sparso (per quanto ne so) e il file è vuoto.
Joey,

1
Sono confuso qui ... se è istantaneo e non è un file sparso, come utilizza effettivamente lo spazio su disco?
Jason S,

2
@JasonS: contigva effettivamente all'ultimo byte e scrive un singolo 0lì (basta guardare con Process Monitor). Windows quindi riempie il resto con zero. Questo è probabilmente il più efficiente possibile con file non sparsi e la creazione di un file di dimensioni pari a circa 5 GiB richiede solo pochi secondi anche sul mio disco rigido. Suppongo che poi ho provato su un SSD o con file più piccoli. Ma è piuttosto veloce (e decisamente più veloce che scrivere da soli tutti i byte del file vuoto.
Joey

23

Stavo cercando un modo per generare file di grandi dimensioni con dati, non solo file sparsi. È venuto attraverso la tecnica qui sotto :

Se si desidera creare un file con dati reali, è possibile utilizzare lo script della riga di comando seguente.

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

(Esegui i due comandi precedenti uno dopo l'altro oppure puoi aggiungerli a un file batch.)

I comandi precedenti creano un file dummy.txt da 1 MB in pochi secondi ...


6
Estrai dal link sopra: Se vuoi creare un file con dati reali, puoi usare lo script della riga di comando qui sotto. 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 (Esegui i due comandi precedenti uno dopo l'altro oppure puoi aggiungerli a un file batch.) I comandi precedenti creano un file dummy.txt da 1 MB in pochi secondi.
Tony Stark,

Attenzione: devi prima copiare la prima riga, premere Invio e poi copiare la seconda riga. Ho provato a copiare l'intero script nella mia shell ma poi non è successo niente.
Magiranu,

15

Scopri RDFC http://www.bertel.de/software/rdfc/index-en.html

RDFC non è probabilmente il più veloce, ma alloca blocchi di dati. Il più veloce dovrebbe usare API di livello inferiore per ottenere solo catene di cluster e inserirle in MFT senza scrivere dati.

Attenzione che qui non c'è nessun proiettile d'argento - se la "creazione" ritorna all'istante significa che hai un file sparso che finge solo un file di grandi dimensioni, ma non otterrai blocchi / catene di dati fino a quando non ci scriverai. Se hai appena letto, otterrai zeri molto veloci che potrebbero farti credere che il tuo disco all'improvviso sia diventato incredibilmente veloce :-)


Questa sembra essere la risposta migliore. FSUTIL crea un file sparse che non è uno scenario di test valido per molti casi. Sysinternals contig non sembra mai funzionare per me, quando uso un comando come "contig -n largefile.bin 6000000000 crea un file di 1,7 GB di dimensioni ... ??? Grazie per RDFC perché ha funzionato perfettamente al primo tentativo e scrive su la massima velocità di scrittura del mio disco ATA.
Syclone0044

Come è stato detto sopra, FSUTIL "createnew" NON crea file sparsi, ma alloca (nella MFT) lo spazio richiesto al file richiesto, cioè lo spazio completo. Se poi controlli le proprietà del file, la dimensione allocata (fastidiosamente denominata "dimensione su disco" come può essere su qualsiasi dispositivo che non sia necessariamente un "disco") è simile o molto vicina alla dimensione effettiva. Un vero file sparso completamente riempito di zeri avrebbe una dimensione allocata molto piccola. L'unico strumento che ho trovato che può trasformare un file non sparse in un file sparse (e in realtà ridurne le dimensioni, non solo contrassegnarlo) è SparseTest.
GabrielB,

13

Controllare gli strumenti del Resource Kit di Windows Server 2003 . C'è un'utilità chiamata Creatfil.

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

È simile a mkfile su Solaris.


1
Preferirei non dover scaricare il kit di risorse.
Leigh Riffel,

avresti solo bisogno di 1 exe dal kit di risorse, non devi avere tutto sul tuo sistema di produzione.
Byron Whitlock,

1
Ci proverò, ma preferirei non avere la dipendenza aggiuntiva dal file.
Leigh Riffel,

Il file non viene scaricato correttamente per me ora, ma non riesco a immaginare che sia più veloce dello strumento Contig menzionato da Johannes Rossel.
Leigh Riffel,

1
Grazie! Il pacchetto scaricato è rktools.exe e, quando espanso, è di 11,7 MB e 18,2 MB. Oh, e questo è "creatfil.exe" e non "createfil.exe". Questo file da solo ha una dimensione di 5,5 KB ed è tutto ciò di cui hai veramente bisogno. Mi ci è voluto meno di 1 minuto per generare un file da 1 GB su una CPU Intel quad core da 3,0 GHz. Con lo strumento fsutil.exe come pubblicato sopra, ci vuole solo una frazione di secondo per crearlo. Quindi è vero, quello strumento crea file sparsi. È ancora più grande, è 73,5 KB. Questo è meglio per generare file di grandi dimensioni a scopo di test.
Samir,

11

Avevo bisogno di un normale file da 10 GB per il test, quindi non potevo usarlo fsutilperché crea file sparsi (grazie @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

Volevo creare un file da 10 GB, ma per qualche motivo è apparso solo come 4 GB, quindi volevo essere sicuro e fermarmi a 4 GB. Se vuoi davvero essere sicuro che il tuo file verrà gestito correttamente dal sistema operativo e da altre applicazioni, smetti di espanderlo a 1 GB.


Devi usare un singolo carattere percentuale, non doppio. Inoltre, non sono necessari gli spazi extra tra parentesi. Lo modificherò per te.
Samir,

Quale sistema operativo hai usato qui amico? Il rmè un comando Unix / Linux, mentre delè un comando DOS / Windows ...?
Samir

Dovrebbe essere un file batch o dovresti emettere questi comandi direttamente in cmd? Il segno di percentuale singolo viene utilizzato in cmd, come %ima in un file batch si usa il segno di percentuale doppio, come %%i.
Samir,

@Sammy: inizia con @echo off, quindi ovviamente è un .bat. Ecco perché aveva il doppio segno di percentuale.
f.ardelian,

Bene, allora potremmo voler riportare il doppio segno di percentuale. Perché elimini file-4gb.txtprima di crearlo? Ciò non comporterebbe un errore? Volevi davvero creare file-4gb.txtsu quella linea? O rinominare il vecchio file-big.txtfile? Questo non è chiaro, anche per un file batch. Se intendevi rinominarlo, probabilmente è il comando che stavi cercando ren. Come ren file-big.txt file-4gb.txt. Penso che tu l'abbia confuso rm.
Samir,

7

Apri Task Manager di Windows, trova il processo più grande che hai in esecuzione con il tasto destro del mouse e fai clic su Create dump file.

Ciò creerà un file relativo alla dimensione del processo in memoria nella cartella temporanea.

Puoi facilmente creare un file di dimensioni in gigabyte.

Inserisci qui la descrizione dell'immagine

Inserisci qui la descrizione dell'immagine


2
bella soluzione! Utile se hai una varietà di applicazioni in esecuzione, per ottenere dimensioni diverse
Don Cheadle,

6

A meno di scrivere un'applicazione completa, noi ragazzi di Python possiamo ottenere file di qualsiasi dimensione con quattro righe, stesso frammento su Windows e Linux (la os.stat()linea è solo un segno di spunta):

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

1
Installare Python per risolvere un problema è davvero eccessivo. Perché non usare semplicemente qualcosa di integrato come Powershell o C # - gist.github.com/nadams810/6539070 (non hai nemmeno bisogno di Visual Studio per compilare applicazioni C #).
Natalie Adams,

1
.Net, C # e Powershell non sono necessariamente multipiattaforma.
Gimel,

1
Sono integrati in Windows ed è ciò che l'OP ha richiesto (supponendo che il sistema sia completamente aggiornato).
Natalie Adams,

@NatalieAdams Ma questa risposta è abbastanza utile se hai già installato Python per risolvere altri problemi. :)
criptych sta con Monica

6

PowerShell one-liner per creare un file C:\Temp per riempire il disco C: lasciando solo 10 MB:

[io.file]::Create("C:\temp\bigblob.txt").SetLength((gwmi Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace - 10MB).Close

3
creerà file con alcuni contenuti reali o file sparsi?
Samselvaprabu,

6

Uso:

/*
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;
}

Che cosa è int? Funzionerà con un file da 5 GB? È limitato a 2 o 4 GB? Che il terzo parametro SetFilePointer()sia 0 suggerisce che non funzionerà per un file da 5 GB.
Peter Mortensen,

4

Stavo cercando un modo per creare un file fittizio di grandi dimensioni con allocazione dello spazio di recente. Tutte le soluzioni sembrano imbarazzanti. Finalmente ho appena avviato l' DISKPARTutilità in Windows (incorporato da Windows Vista):

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

Dove MAXIMUM è la dimensione del file risultante, 20 GB qui.


La migliore soluzione finora.
Frank FYC,

Non funziona per me. Purtroppo nessun file è stato creato. Ho provato con i privilegi di amministratore.
Magiranu,

4

Ho trovato un'eccellente utility configurabile su https://github.com/acch/genfiles .

Riempie il file di destinazione con dati casuali, quindi non ci sono problemi con i file sparsi e per i miei scopi (test degli algoritmi di compressione) fornisce un buon livello di rumore bianco.


Questa utility è un'applicazione Java a file singolo che dovrebbe funzionare su qualsiasi piattaforma con Java.
Paul,

@MusikPolice - Link is dead
dcp

Notato. Sfortunatamente, questo succederà dopo sei anni.
MusikPolice,

3

I file temporanei devono essere archiviati nella cartella Temp di Windows. Sulla base della risposta di Rod, è possibile utilizzare il seguente liner per creare un file temporaneo da 5 GB che restituisce il nome file

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

Spiegazione:

  • [System.IO.Path]::GetTempFileName() genera un nome file casuale con estensione casuale nella cartella Temp di Windows
  • La pipeline viene utilizzata per passare il nome a [System.IO.File]::Create($_)cui crea il file
  • Il nome del file è impostato sul file appena creato con .SetLength(5gb). Sono stato un po 'sorpreso di scoprire che PowerShell supporta la conversione di byte , il che è davvero utile.
  • È necessario chiudere l'handle del file .closeper consentire ad altre applicazioni di accedervi
  • Con ;$_il nome file viene restituito e con | ? { $_ }esso viene garantito che viene restituito solo il nome file e non la stringa vuota restituita da[System.IO.File]::Create($_)

3

Il modo più semplice che ho trovato è questa utility gratuita: http://www.mynikko.com/dummy/

Crea file fittizi di dimensioni arbitrarie che vengono riempiti con spazi o riempiti con contenuto non comprimibile (a scelta). Ecco uno screenshot:

inserisci qui la descrizione dell'immagine


3

Semplicemente vecchio ... questo si basa su GCC MinGW su Windows XX e dovrebbe funzionare su qualsiasi piattaforma C "generica".

Genera un file null di una dimensione specificata. Il file risultante NON è solo una voce di occupante dello spazio di directory e in effetti occupa il numero specificato di byte. Questo è veloce perché non si verificano scritture effettive ad eccezione del byte scritto prima della chiusura.

La mia istanza produce un file pieno di zeri - questo potrebbe variare in base alla piattaforma; questo programma fondamentalmente imposta la struttura di directory per qualsiasi dato sia in giro.

#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);
}

Ti consiglio di verificare come ho formattato il tuo codice. E BTW. la domanda ha già un'ottima risposta e fseek + fwrite è già stato presentato in Pyton e WinAPI, quindi questo non è di grande aiuto. È bello tuttavia hai fornito un esempio completo. +1 per quello. Ma cerca di non rispondere a domande già risolte, è solo una perdita di tempo in cui potresti aiutare qualcuno un po 'di più :)
quetzalcoatl

2

Ho trovato una soluzione usando DEBUG su http://www.scribd.com/doc/445750/Create-a-Huge-File , ma non conosco un modo semplice per scriverlo e non sembra essere in grado per creare file di dimensioni superiori a 1 GB.


1
non riesci a creare 5 file e poi aggiungerli?
Creali

Non so se potrei farlo senza eseguire la programmazione, ma sì, posso copiare il file alcune volte per ottenere le dimensioni di cui ho bisogno. Nel mio caso non ho bisogno che il file stesso sia di 5 GB, ma solo lo spazio esaurito.
Leigh Riffel,

2
Scrivere su più file usando il threading sembra un'idea terribile, dato quanto sono lenti i dischi rigidi ... Inoltre, aggiungerli è piuttosto costoso in termini di tempo, quindi probabilmente non soddisfa i criteri "rapidi".
Joey,


2

È possibile utilizzare il comando cat powershell.

Per prima cosa crea un semplice file di testo con pochi caratteri. Più caratteri iniziali inserisci, più velocemente diventa più grande. Chiamiamolo out.txt. Quindi in Powershell:

cat out.txt >> out.txt

Attendere il tempo necessario per rendere il file abbastanza grande. Quindi premi ctrl-c per terminarlo.


1

Puoi provare questo codice 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);
    }
}

Forse ci vorrà del tempo per generare a seconda della velocità della CPU ...


Il poster ha chiesto rapidamente. Ciò richiederebbe l'installazione di un compilatore C ++.

1

Risposta semplice in Python: se hai bisogno di creare un grande file di testo reale, ho appena usato un semplice whileciclo e sono stato in grado di creare un file da 5 GB in circa 20 secondi. So che è rozzo, ma è abbastanza veloce.

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()

0

Veloce da eseguire o veloce da digitare su una tastiera? Se usi Python su Windows, puoi provare questo:

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

0

Un'altra soluzione GUI: WinHex.

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

Contrariamente ad alcune delle soluzioni già proposte, in realtà scrive i dati (vuoti) sul dispositivo.

Inoltre, consente di riempire il nuovo file con uno schema selezionabile o dati casuali:

“Edit” > “Fill file” (or “Fill block” if a block is selected)

-1

Ho apportato alcune aggiunte allo stesso fsutilmetodo menzionato nella risposta scelta. Questo per creare file di molte estensioni diverse e / o di varie dimensioni.

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

Il codice può essere clonato da https://github.com/iamakidilam/bulkFileCreater.git

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.