Je fais des tests sur un morceau de code et je veux remplir un disque dur avec des données. J'ai trouvé que cela dd
peut faire d'énormes fichiers en un instant, mais je ne suis df
pas d'accord. Voici ce que j'ai essayé:
dd if=/dev/zero of=filename bs=1 count=1 seek=$((10*1024*1024*1024))
ls -lh
montre un fichier 10G. Cependant, df -h
montre que la partition n'a pas diminué. Alors, que dois-je faire pour faire df
reconnaître que les données sont maintenant prises? J'espère quelque chose de rapide que je coderai dans un test unitaire.
linux
hard-drive
Utilisateur1
la source
la source
Réponses:
Le problème avec l'
seek=<big number>
astuce est que le système de fichiers est (généralement) intelligent: si une partie d'un fichier n'a jamais été écrite (et n'est donc que des zéros), cela ne prend pas la peine de lui allouer de l'espace - donc, comme vous '' Comme nous l'avons vu, vous pouvez avoir un fichier de 10 Go qui ne prend pas de place (c'est ce qu'on appelle un "fichier épars", et peut être très utile dans certains cas, par exemple certaines implémentations de base de données).Vous pouvez forcer l'allocation de l'espace avec (par exemple):
ce qui prendra beaucoup plus de temps, mais remplira en fait le disque. Je recommande de faire une taille de bloc beaucoup plus élevée que 1, car cela déterminera combien d'appels système le
dd
processus fait - plus la taille du bloc est petite, plus il y a d'appels sysys, et donc plus il s'exécutera lentement. (Bien qu'au-delà de 1 Mo environ, cela ne fera probablement pas beaucoup de différence et pourrait même ralentir les choses ...)la source
Comme autre option, vous pouvez utiliser le oui avec une seule chaîne et son environ 10 fois plus rapide que l'exécution de dd if = / dev / urandom of = largefile. Comme ça
la source
Vous avez créé ce qui est connu comme un "fichier clairsemé" - un fichier qui, parce que la plupart est vide (c'est-à-dire lu en tant que \ 0), ne prend pas d'espace sur le disque en plus de ce qui est réellement écrit (1B, après 10 Go de l'écart).
Je ne pense pas que vous puissiez créer des fichiers volumineux, en prenant l'espace disque réel en un instant - prendre de l'espace physique signifie que le système de fichiers doit allouer des blocs de disque à votre fichier.
Je pense que vous êtes coincé avec l'ancien "dd if = / dev / zero of = filename bs = 100M count = 100" qui est limité par la vitesse d'écriture séquentielle de votre lecteur.
la source
Si vous testez simplement des cas avec des systèmes de fichiers remplis, peut-être que fallocate est assez bon. Et plus vite aussi! par exemple
la source
fallocate -l 150G foo
. Néanmoins +1 pour avoir mentionné l'outil.Arrêtez d'utiliser
seek
et utilisez un très grandbs
et / oucount
. En fait, vous créez un fichier clairsemé , et vous ne devez évidemment pas le faire.la source
Si vous souhaitez remplir littéralement le disque dur, procédez comme suit:
Vous pouvez éventuellement spécifier le nombre si vous souhaitez limiter la taille, mais si vous omettez le nombre, il s'exécutera jusqu'à ce que vous soyez à court d'espace disque.
Comme psmears l'a mentionné, vous obtiendrez de meilleures performances si vous définissez la taille du bloc sur 1 Mo (bs = 1M) au lieu de 1 B (bs = 1). Cela prendra encore un certain temps, mais si vous souhaitez vérifier la progression de votre commande, ouvrez une console distincte et exécutez ces commandes:
Utilisez le PID de dd dans cette commande (remplacez PID par le PID de dd):
Ensuite, allez regarder votre terminal DD. Bien sûr, cela est d'une utilité limitée lorsque vous essayez simplement de remplir le lecteur (vous pouvez simplement utiliser df ou du pour vérifier l'espace disque libre ou la taille du fichier, respectivement). Cependant, il y a d'autres moments où il est pratique de faire en sorte que dd affiche sa progression.
Crédit supplémentaire: une utilisation pratique pour la remise à zéro de l'espace libre est que, par la suite, vous pouvez ensuite supprimer les fichiers "zéro" et dd la partition entière (ou le disque, si vous avez mis à zéro toutes les partitions) en un fichier image disque (disons , disk-backup.dd), puis compressez le fichier. L'espace libre est maintenant hautement compressible, donc votre image dd compressée sera beaucoup plus petite que le périphérique bloc d'origine dont elle contient le contenu.
Shenanigans: zippez un gros fichier de zéros et envoyez-le par e-mail à tous vos amis. Dites-leur que c'est quelque chose de vraiment cool.
la source
Vous créez un fichier 1 To non éparse avec la commande suivante:
Cela a été utile pour tester ce qui se passe lorsque les quotas sont dépassés ou lorsqu'un système de fichiers se remplit.
df -h
montre que l'espace disponible devient plus petit.la source