Comment puis-je créer rapidement un gros fichier?


26

Quel est un moyen rapide et facile de créer un fichier d'une taille de, disons, 2 Go?

Réponses:


36

La méthode de remplissage nul (modifiée ici pour éviter les goulots d'étranglement potentiels de la mémoire ) a pris 17 secondes pour créer un fichier de 10 Go sur un SSD et a causé que l'interface graphique d'Ubuntu ne répondait plus.

$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s

real    0m17.642s
user    0m0.008s
sys     0m9.404s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

fallocate crée des fichiers volumineux instantanément en manipulant directement l'espace disque alloué au fichier:

$ time sh -c 'fallocate -l 10G large; sync'

real    0m0.038s
user    0m0.000s
sys     0m0.016s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

truncate fonctionne également instantanément et crée des fichiers clairsemés qui n'utilisent pas l'espace disque réel jusqu'à ce que les données soient écrites plus tard:

$ time sh -c 'truncate -s 10G large; sync'

real    0m0.014s
user    0m0.000s
sys     0m0.004s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
0       large

dd ... bs=2G count=1lit 2 Go en mémoire (en un seul read(2)appel). Si vous avez une pression sur la mémoire, ce n'est probablement pas la voie à suivre. De plus, des blocs plus petits peuvent être plus rapides si cela signifie moins de pagination.
— claymation

19

Un moyen simple serait d'utiliser la ddcommande pour écrire un fichier plein de zéros.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = fichier d'entrée
  • of = fichier de sortie
  • bs = octets

Utilisez G dans l'argument taille si vous voulez des gigaoctets d'ordinateur (1024 * 1024 * 1024), ou Go si vous voulez des gigaoctets humains (1000 * 1000 * 1000).


1
je vais juste ajouter que si vous ne voulez pas tous les zéros, vous pouvez choisir if = / dev / random
— Denwerko

Bien que / dev / random prendra plus de temps.
— con-f-use

10
En utilisant / dev / random prendra un terrible beaucoup de temps. À utiliser /dev/urandomdans ce cas (c'est non bloquant, mais il n'est pas garanti d'avoir le même niveau de caractère aléatoire). Dessiner 2 Go à partir de l'un ou l'autre épuisera presque certainement complètement l'entropie de votre système, alors ne faites rien de cryptographique pendant un certain temps après.
— un CVn du

1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

ou Seek est la taille du fichier souhaité en octets - 1.

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.