2009-11-30 19 views
3

Mon os et le lecteur estComment créer un fichier super-énorme avec des commandes c ou linux-shell ou dos-pure?

OS: Windows XP sp2 or Linux SUSE 9 or Cygwin 
Compiler: Visual C++ 2003 or Gcc or Cygwin 
PC and os are both 32 bits 

Alors, comment puis-je créer un fichier super-énorme dans secondes

m'a dit d'utiliser les fonctions MappingFile. Je ne ai pas créer des fichiers sur 2G Alors ... Vos réponses chaudes sera tout apprécié grâce

+0

Le contenu est-il important? – cdonner

+0

Je veux dire, qu'est-ce que vous essayez de faire? Juste bloquer l'espace sur le disque? – cdonner

+0

Pouvez-vous s'il vous plaît être un peu plus précis sur super-énorme, et aussi décrire le contenu! – Alphaneo

Répondre

10

En utilisant dd sous Linux pour créer un 1 fichier gb prend du temps d'horloge murale '57 secondes sur une boîte un peu chargé avec un disque lent, et environ 17 secondes le temps du système:

$ time dd if=/dev/zero of=bigfile bs=G count=1 
1+0 records in 
1+0 records out 
1073741824 bytes (1.1 GB) copied, 53.9903 s, 19.9 MB/s 

real 0m56.685s 
user 0m0.008s 
sys  0m17.113s 
$ 
4

vous pouvez utiliser dd

dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100 

ou tout simplement les scripts shell et le contenu n'a pas d'importance

1) create a dummy file with a few lines, eg 10 lines 
2) use cat dummy >> bigfile in a while loop 

eg 

    while true 
    do 
     cat dummy >> bigfile.txt 
     #check for number of lines more than 10000 for example and break out of loop 
    done 

Effectuer une autre fois

while true 
do 
    cat bigfile >> bigfile2.txt   
    # check for size and break out.. 
done 
rm -f dummy bigfile 
+0

'/ dev/zero' est susceptible d'être plus rapide que'/dev/random', et plus facile pour tout ce qui est consommé par le fichier. –

+1

D'accord,/dev/random peut bloquer, si le contenu aléatoire de psuedo est nécessaire, il vaut mieux utiliser/dev/urandom. –

2

Est-ce que le fichier a prendre de l'espace disque réel? Sinon, vous pouvez toujours (dans Cygwin, ou Linux):

dd if=/dev/zero of=bigfile seek=7T bs=1 count=1 

Cela va créer un vide 7 fichier TB en une fraction de seconde. Bien sûr, il n'attribuera pas beaucoup d'espace disque réel: vous aurez un gros sparse file.

L'écriture d'un programme sous Cygwin ou Linux, vous pouvez faire la même chose dans un programme C avec un appel à ftruncate.

+0

Impossible de trouver rapidement une grande page de manuel. Sous Linux, l'appel de ftruncate avec une taille plus grande que le fichier étend toujours la taille du fichier. Assez sûr que Cygwin adhère à cela. – Managu

+0

Même si ce n'est pas le cas, il est assez facile d'utiliser une paire de 'fseek (HUGE)' et 'fwrite (un octet)' pour obtenir la même chose. –

+0

Vous devez vous assurer que cygwin a d'abord installé le système de fichiers avec un support parcimonieux - https://cygwin.com/cygwin-ug-net/using.html#mount-table –

2

En fonction de vos limites du système, vous pouvez créer un largefile en une fraction de seconde ...

FILE *fp = fopen("largefile" ,"w"); 
for(int i = 0; i < 102400; i++) 
{ 
    fseek(fp, 10240000, SEEK_CUR); 
} 
fprintf(fp, "%c", 'x'); 
fclose(fp); 

Jouez avec cela.

+0

cela prend-il un peu de temps? –

2

cat/dev/urandom >>/home/mybigfile

Il erreur lorsque l'espace disque a manqué.

Ceci est pour linux/bsd/éventuellement cgywin

1

En suse dans une machine virtuelle, je l'ai fait dd if=/dev/zero of=file;rm file qui a rempli le disque, et quand il était plein supprimé le fichier. Cela m'a permis de compresser l'image un peu plus pour une raison quelconque, et j'ai lu à propos de le faire sur un forum quelque part.

0

Si vous voulez un fichier sparse, vous pouvez le faire aussi sous Windows (sur des volumes NTFS), en utilisant CreateFile, DeviceIOFunction avec FSCTL_SET_SPARSE et FSCTL_SET_ZERO_DATA; pour plus d'informations, voir here.

1

Vous pouvez utiliser "fsutil" commande pour Win2000/XP/7:

c:>fsutil fichier createnew Utilisation: fsutil file createnew Par exemple: fsutil fichier createnew C: \ toto.txt 1000

Reagrds