Pour créer un fichier de 10Mo, on peut le faire de la façon suivante :
dd if=/dev/zero of=fichier-10M count=1 bs=10MB
ou encore
dd if=/dev/urandom of=fichier-10M count=1 bs=10MB

L'option bs permet de donner la taille du fichier.
10MB=10*1000*1000 -> génère un fichier de 10000000 octets
10M=10*1024*1024 -> génère un fichier de 10485760 octets

On peut aussi créer un fichier d'une taille de 4Go, mais ne contenant réellement que quelques blocks :
dd if=/dev/zero of=/tmp/4gbfile bs=1024 seek=4194304 count=1
La réponse est alors instantanée. Les logiciels lisant les fichiers (rsync sans l'option --sparse...) utiliseront le fichier de 4Go et pas le fichier de quelques octets.
On peut vérifier la taille réelle du fichier en lui demandant le nombre de blocks occupés : ls -s /tmp/4gbfile (un block fait 1ko par défaut) et la taille totale dans ls -l /tmp/4gbfile. Il est possible de cumuler les deux paramètres : ls -ls1 /tmp/image.vdi :
2035572 -rw-r--r-- 1 root root 10737418240 26-03-2012 15:53:24 /tmp/image.vdi
Dans ce cas, le fichier occupe 2035572 blocks (soit 2Go) et a une taille complète de 10737418240 octets (soit 10Go).