J'écrase mon disque dur avec des données aléatoires en utilisant le bon vieux dd
:
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512
C'est un tableau de 2 To et mon MacBook (fonctionnant sous Linux, ok?) Ne peut écrire que des données à environ 3,7 Mo / s, ce qui est assez pathétique car j'ai vu mon bureau à la maison faire 20 Mo / s. Quand je rentre chez moi ce soir, j'aimerais arrêter la dd
course ici, le ramener à la maison et voir quel genre de progrès peut être fait du jour au lendemain avec une machine plus puissante.
J'ai suivi les progrès à l'aide d'une simple boucle:
while true; do kill -USR1 $PID ; sleep 10 ; done
La sortie ressemble à ceci:
464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s
Si je devais reprendre le dd
pass à la maison, comment le redémarrer? Je connais le seek
paramètre, mais à quoi dois-je faire référence, le numéro d'enregistrement ou le nombre d'octets?
seek=464938960
Réponses:
Comme l'a déjà commenté @don_crissti, utilisez simplement
seek=
pour reprendre.GNU dd
prend également en charge la recherche en octets, afin que vous puissiez reprendre exactement, quelle que soit la taille du bloc:Une taille de bloc plus grande devrait aider avec des vitesses même pour un appareil lent comme
/dev/urandom
.Si vous cherchez des alternatives plus rapides, vous pourriez
cryptsetup plainOpen
avec une clé aléatoire et zéro, elle devrait battre/dev/urandom
par un ordre de grandeur (sans AES-NI) ou même fonctionner à pleine vitesse (avec AES-NI).Vous pouvez également utiliser
shred -n 1
si les données pseudo-aléatoires sont suffisantes pour votre cas d'utilisation.shred
devrait pouvoir utiliser la vitesse totale du disque, même sur une machine très lente.la source
plainOpen
jusqu'à maintenant. Génial! Fini mon brouillage d'un disque de 2 To en environ 4 heures, contre 256 Go en plus de 12/dev/urandom
.Juste un rappel pour les personnes qui souhaitent copier plutôt que de simplement randomiser des disques (ce qui n'est pas si courant): vous pouvez utiliser
skip=BLOCKS
pour commencer à lire à la bonne position etseek=BLOCKS
commencer à écrire à la bonne position. Les deux options utilisent des blocs, pas des octets. Lors de l'arrêt / redémarrage, il est conseillé de supprimer un tas de blocs au cas où. Il vaut généralement la peine d'augmenter labs
valeur au-dessus de 512, car vous pouvez obtenir de meilleures performances si vous lisez beaucoup de données d'affilée.Dans votre cas, c'est en effet une valeur de bloc à laquelle vous devez passer
seek
. Vous devriez peut-être essayer de vous ajusterbs
pour voir si vous pouvez améliorer la vitesse, comme cela/dev/random
devrait aller vite (pseudo-aléatoire et non bloquant quand il n'y a pas d'entropie disponible)la source
dd
avec une taille de bloc minuscule comme 512 octets est susceptible d'être beaucoup plus lent que le débit maximal de votre disque. Utilisez une taille de bloc plus élevée (sur une intuition, je dirais quelques Mo) pour de bonnes performances. Ou utilisezcat
- sur Linux, j'ai trouvécat
que c'était aussi rapidedd
qu'avec la taille de bloc optimale quand un seul disque était impliqué (je ne sais pas si cela vaut aussi pour OSX).Pour savoir jusqu'où
cat
a été atteint, exécutezlsof -p1234
où 1234 est l'ID decat
processus du processus.Pour reprendre à partir d'une position, utilisez
où 123456 est le décalage en octets.
la source
Clonage d'un disque:
En développant cette réponse à partir de ce fil, voici comment on pourrait procéder pour cloner un disque entier et reprendre:
Cet exemple est optimisé pour la copie d'un lecteur rotatif à 5400 tr / min vers un SSD sur un système spécifique.
gdd
représenteGNU dd
:Je peux reprendre cela de deux manières:
Ou:
Dans le premier exemple, la raison pour laquelle nous utilisons
59011
et non59012
, c'est parce59011
que le nombre d'enregistrements de taille de bloc a été entièrement copié avant d'être interrompu. (enregistre).la source