Bonjour,
Je me posais la question, je ne trouve pas de réponse en cherchant sur google, peut-être que ce n'est pas possible, mais je voulais en avoir le cœur net.
J'aimerais savoir s'il existait un outils permettant de créer rapidement un gros fichier (plusieurs giga octets) mais sans écrire de données à l'intérieur, donc sans utiliser dd if=/dev/zero par exemple ?
Le but de cette manœuvre est de créer rapidement des conteneurs sur un disque usb dans lesquelles mettre des partitions virtuels.
Merci d'avance.
# Sparse file
Posté par chaispaquichui . Évalué à 9.
Est-ce ceci que tu cherches ?
http://en.wikipedia.org/wiki/Sparse_file
[^] # Re: Sparse file
Posté par Anonyme . Évalué à 1.
Oui, c'est exactement de ça dont il s'agissait, merci beaucoup :)
[^] # Re: Sparse file
Posté par JJD . Évalué à 1.
Attention tout de même : la commande indiquée dans la page Wikipedia (dd if=/dev/null of=sparse-file bs=1k seek=5120) crée bien un fichier ayant une taille apparente de 5MO, mais au final la place effectivement occupée sur le disque sera nulle (au moins tant que l'on écrit rien dedans).
On peut comme ça créer des fichiers de plusieurs dizaines de GO sur des systèmes ne faisant que quelques centaines de MO… Ce n'est que lorsque les fichiers vont se "remplir" que ça risque de poser problème.
On peut voir la taille effective occupée par un fichier avec un "ls -ls" ou avec "du".
[^] # Re: Sparse file
Posté par ElectronLibre63 . Évalué à -3.
Mais à la place de /dev/null, on peut utiliser /dev/zero, /dev/random ou /dev/urandom.
[^] # Re: Sparse file
Posté par Ambroise . Évalué à 1.
Si on lit la demande initiale :
> donc sans utiliser dd if=/dev/zero par exemple ?
Donc non, cela ne lui ira pas…
[^] # Re: Sparse file
Posté par teoB . Évalué à -1.
Il reste donc /dev/random ou /dev/urandom ;)
[^] # Re: Sparse file
Posté par JJD . Évalué à 2.
Je pense que dans la demande initiale, l'important est aussi le «rapidement», et ce doit être la raison pour laquelle Christophe ne voualit pas utiliser "dd if=/dev/zero".
Remplacer /dev/zero par /dev/urandom, ou pire par /dev/random/, ne fera qu'augmenter le temps de création du fichier.
Je pense que l'utilisation de /dev/null avec seek= répond vraisemblablement à la question. Ma remarque était essentiellement un avertissement sur le fait que le fichier n'occupe alors pas réellement l'espace disque correspondant à sa taille apparente.
[^] # Re: Sparse file
Posté par teoB . Évalué à 2.
Merci, j'avais vu. Electronlibre63 fait trois propositions, earendil_fr en élimine une, il en reste donc deux, c'était juste de l'humour, javais mis un smiley pour l'indiquer.
Christophe indique :
Ce qu'il ne précise pas, c'est s'il veut créer un fichier vide qui réserve juste une inode (dans ce cas, dd if=/dev/null… suffit) ou créer un fichier sans écrire dedans car le contenu n'a pas d'importance, mais qui en plus de l'inode, réserve aussi les blocs pour avoir un fichier qui occupe réellement la taille demandée. Or avec /dev/null, il n'y a pas de bloc réservé comme tu le soulignes, donc si c'est le second cas alors /dev/zero (ou /dev(u)random) fonctionne, mais il y a une écriture inutile de zéro (ou de nombres plus ou moins aléatoires), d'où alors le besoin d'un programme particulier (j'ignore s'il existe) qui réserve les blocs sans avoir à écrire dedans.
[^] # Re: Sparse file
Posté par B16F4RV4RD1N . Évalué à 2.
autre solution : VirtualBox permet de créer des containers de partitions virtuelles (c'est justement ce que veut l'auteur d'ailleurs), soit dynamiquement allouées (donc place occupée nulle), soit remplissant tout de suite la place.
J'imagine qu'il doit y avoir une ligne de commande (via VirtualBox je veux dire) pour créer cela sans passer par l'interface graphique
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: Sparse file
Posté par Anonyme . Évalué à 1.
Dans le cas présent, ça m'allait. De toute façon, il me semble qu'utiliser /dev/null ou /dev/zero était similaire d'un point de vu résultat, on a un fichier de la taille demandé mais qui ne prends effectivement pas de place sur le disque tant que l'on écrit pas dedans. J'aurais aussi été curieux de voir s'il existait un moyen d'avoir cet espace alloué sur le disque pour éviter tout problème, mais je n'ai pas trouvé.
[^] # Re: Sparse file
Posté par NeoX . Évalué à 0. Dernière modification le 28 juillet 2012 à 07:50.
on l'a deja dit
dd if=/dev/(u)random of=/path/vers/ton/fichier bs=une valeur count=une autre valeur
dans l'exemple de ymorin dans le post ci-dessous, il cree un fichier de 100Mo
100Mo vu par ls et par du, donc l'espace doit deja etre alloué
[^] # Re: Sparse file
Posté par Anonyme . Évalué à 2.
Oui, mais cette commande prends du temps à être exécutée vu qu'il y a une écriture de données sur le disque. Ma prérogative était que cela se fasse rapidement, sans que des données ne soient écrites sur le disque, en gros que le contenu du fichier soit ce que contient l'espace libre du disque, ça ne me semble pas totalement farfelu de penser que cela soit possible.
[^] # Re: Sparse file
Posté par netsurfeur . Évalué à 2.
fallocate(1) le fait mais dépend du système de fichiers. Apparemment, seuls btrfs, ext4, ocfs2, et xfs le supportent.
[^] # Re: Sparse file
Posté par Anonyme . Évalué à 2.
Effectivement, dans le cas présent c'était sur un disque formaté en ntfs, donc ça n'aurait pas été possible, mais c'est utile de savoir que cela existe.
[^] # Re: Sparse file
Posté par ymorin . Évalué à 2.
D´où l´utilisation de l´option
skip
dedd
.-->
man dd
Avec l´option
skip
, c´est même mieux : les blocs ne sont pas alloués sur le disque, donc un fichiersparse
occupe physiquement zéro octet sur le disque, tant que tu n´as pas écrit dedans, et la lecture renvoie quedes 0x00
(sauf là où tu as écrit autre chose, bien sûr). Les blocs sur le disque sont alloués sur le disque uniquement lors d´une écriture dans le fichier.Hop,
Moi.
[^] # Re: Sparse file
Posté par NeoX . Évalué à 2.
en meme temps vouloir reserver de l'espace disque, sans l'occuper, tu veux qu'il sache comment ton systeme que c'est reserve si tu n'as pas ecrit dans la table d'allocation que la zone est occupée (vu que tu ne veux pas ecrire de données sur le disque)
bon apparemment les nouveaux systemes de fichiers permettraient ce genre de chose, il faut peut-etre voir de ce coté,
ou bien accepté le temps que ca prend (j'espere que tu ne le fais pas tous les jours non plus)
ou bien changé de techno pour tes disques (SSD sur Sata 6Gbps, voire SSD sur PCI-e)
[^] # Re: Sparse file
Posté par Ambroise . Évalué à 1.
D’ailleurs, je me demande bien le temps que cela peut prendre de faire un fichier de plusieurs Giga avec /dev/random…
Déjà que je le trouve long pour faire un fichier de quelque kilo.
[^] # Re: Sparse file
Posté par Kerro . Évalué à 2.
C'est bien pour ça qu'on utiliser /dev/urandom
# dd
Posté par ymorin . Évalué à 1.
Pour un fichier de 100MiB :
NB. 1048576 == 1MiB
Hop,
Moi.
[^] # Re: dd
Posté par djibb (site web personnel) . Évalué à 2.
---------------->[]
[^] # Re: dd
Posté par ymorin . Évalué à 3.
En fait, j´ai interprété sa question comme :
En effet, s´il ne connait pas l´option
skip
dedd
, alors je comprends qu´il ne veuille pas utiliserdd if=/dev/zero
. Mais franchement, avecskip
, c´est la bonne réponse (ou/dev/null
, si tu veux).Hop,
Moi.
# ftruncate
Posté par benja . Évalué à 2.
Bon aller, sans utiliser dd il suffit d'utiliser l'appel système ftruncate (ou ftruncate64 si gros fichiers). Je n'ai pas trouvé d'utilitaire servant de surcouche mais bon créer une implémentation en C est simple, voir triviale en python, cf.: http://www.tutorialspoint.com/python/os_ftruncate.htm
De la man page : « If the file previously was larger than this size, the extra data is lost. If the file previously was shorter, it is extended, and the extended part reads as null bytes ('\0').»
[^] # Re: ftruncate
Posté par gouttegd . Évalué à 1.
Il existe : truncate(1), non-standard mais présent au moins dans les GNU coreutils et sur FreeBSD.
[^] # Re: ftruncate
Posté par benja . Évalué à 1.
ah ben merci :-) /me se sent un peu con d'être passé à côté du coup…
Donc une solution pour créer un sparse file est `truncate -s 100M fichier', avec les problèmes associés de fragmentation et d'exhaustion possible de l'espace disque à posteriori.
Maintenant ce dont Christophe a vraiment besoin et qui est mentioné par netsurfer est bien fallocate. Chez moi il y a un utilitaire qui fait partie du paquet util-linux et il s'utilise comme suit : `fallocate -l $((1024*1024*100)) fichier'.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.