web-dev-qa-db-fra.com

Pourquoi mon / dev / aléatoire est-il si lent lorsque vous utilisez dd?

J'essaie de faire une effacement semi-solide d'un groupe de disques durs. Ce qui suit fonctionne à 20-50 Mo/s

dd if=/dev/zero of=/dev/sda

Mais

dd if=/dev/random of=/dev/sda 

semble ne pas fonctionner. Aussi quand je tape

dd if=/dev/random of=stdout

Cela ne me donne que quelques octets indépendamment de ce que je le transmette pour BS = et comptez =

Suis-je en train d'utiliser/dev/aléatoire faux? Quelles autres informations devrais-je rechercher pour déplacer ce dépannage en avant? Y a-t-il une autre façon de le faire avec un script ou quelque chose comme

makeMyLifeEasy | dd if=stdin of=/dev/sda

Ou quelque chose comme ça...

32
Mikey

/dev/random est une source d'entropie véritable, d'octets vraiment aléatoires. En tant que tel, il a besoin d'une source de hasard. Vous pouvez "utiliser" le hasard en le lisant. Cela vous donnera tout le hasard qu'il a, puis bloquera jusqu'à ce qu'il atteigne plus. Vous êtes probablement juste assis là-bas en attente et la machine obtient très peu de nouveau aléatoire, et il attend juste.

/dev/random Pour une cryptographie vraiment aléatoire, aléatoire de haute qualité. En tant que tel, il s'agit d'une excédente pour un lecteur de disque écraser. Écrire de /dev/zero quelques fois c'est bien. Ou vous pouvez écrire de /dev/urandom, qui ne bloquera pas et donne des nombres pseudo-aléatoires lorsqu'il manque de véritable aléatoire.

13
Rich Homolka

Sous Linux/Dev/aléatoire est un fichier spécial qui sert des chiffres aléatoires de pseudo de haute qualité. Cette implémentation collecte l'entropie à partir des événements provenant du clavier, de la souris, des interruptions du disque et du système. (Report Ceci Document). Il n'y a pas de tels événements, le pool d'entropie est vide, lit de/dev/aléatoire bloquera jusqu'à ce que des bruits environnementaux supplémentaires soient rassemblés. Cela explique votre problème. Pour remplir le pool d'entropie, vous pouvez appuyer sur les touches sur le clavier.

Sur l'autre note, un générateur de nombres vraiment aléatoire utilise générateur de nombres aléatoires matériels qui génère des nombres aléatoires à partir de processus physiques. Ces processus comprennent des phénomènes microscopiques qui génèrent un signal "bruit" statistiquement aléatoire de bas niveau, tel que bruit thermique ou effet photoélectrique ou d'autres phénomènes physiques. Ces processus sont, en théorie, complètement imprévisibles et les affirmations de l'imprévisibilité de la théorie sont soumises à un test expérimental.

Un générateur de nombres aléatoires matériels consiste généralement en un transducteur pour convertir un aspect des phénomènes physiques à un signal électrique, un amplificateur et d'autres circuits électroniques pour augmenter l'amplitude des fluctuations aléatoires à un niveau macroscopique et un type de convertisseur analogique au numérique. Pour convertir la sortie en numéro numérique, souvent un simple chiffre binaire 0 ou 1. En échantillonnant de manière répétée le signal variable aléatoir, une série de nombres aléatoires est obtenue.

Le générateur de nombres aléatoires du matériel rassemble le bruit de l'environnement des pilotes de périphériques et d'autres sources dans un pool d'entropie. De ce pool d'entropie Les numéros aléatoires sont créés. Lors de la lecture, le périphérique/dev/aléatoire ne renvoie que des octets aléatoires dans le nombre estimé de bits de bruit dans le pool d'entropie. Cela explique votre problème.

Certaines implémentations de matériel rng sont expliquées dans Kernel Doc et Informations sur un périphérique .

Une contrepartie to/dev/aléatoire est/dev/ur urandom (source aléatoire "déverrouillée"/non bloquante) qui réduit le pool interne pour produire plus de bits pseudo-aléatoires. Cela signifie que l'appel ne bloquera pas, mais la sortie peut contenir moins d'entropie que la lecture correspondante de/dev/aléatoire.

Donc, si votre intention est de ne pas générer de CSPRNG (générateur de numéros Pseudorandandom cryptographiquement), vous devez utiliser/dev/urandom.

8
Sachin Divekar

Sans répondre à votre question - il y a déjà des réponses complètes ici - vous pouvez également consulter le démarrage de Darik et Nuke AKA DBAN qui est un essuie-glace live-cd .

2
Randy Orrison