Est-il sûr de cloner un disque dur vers un fichier image dans un disque dur plus grand en utilisant dd et une taille de bloc arbitraire pour une meilleure vitesse ? L'image résultante est-elle la même en utilisant différents bs ? Qu'en est-il de la restauration de cette image sur le disque d'origine ?
Réponses
Trop de publicités?Est-il possible de cloner un disque dur vers un fichier image dans un disque dur plus grand en toute sécurité ?
dd
et une taille arbitraire de gros bloc pour une meilleure vitesse ?
Cela dépend. En général : non.
Si le disque dur que vous lisez est sain, dd
générera la même sortie, quelle que soit la taille du bloc ( bs
) utilisé (à moins qu'il soit incroyablement grand et que vous obteniez des memory exhausted
et pas de fichier de sortie du tout). Ceci n'est pas vrai pour tous les périphériques (voir cette question ) et vous avez besoin iflag=fullblock
.
Si le disque dur que vous lisez n'est pas sain, dd
s'arrêtera après avoir rencontré une erreur de lecture. Vous devez conv=noerror
pour faire face à cette situation. En outre, vous devez conv=sync
と iflag=fullblock
. C'est un mythe conv=sync,noerror
est suffisante (voir cette réponse y ce commentaire ).
Si le disque dur que vous lisez n'est pas sain, vous pouvez obtenir des images différentes même avec conv=sync,noerror iflag=fullblock
en fonction de bs
(strictement : ibs
). Imaginez un seul secteur physique erroné sur le disque dur. Ce secteur peut affecter une ou plusieurs opérations de lecture et le résultat dépendra de la taille du bloc et de la façon dont les blocs s'alignent sur les secteurs physiques. Vous pouvez obtenir un "trou de zéros" dans votre image plus grand que le secteur erroné. Si la taille du bloc correspond à la taille du secteur physique, vous obtiendrez un "trou de zéros" de cette taille exactement, ce qui est le meilleur (trou minimal) que vous puissiez obtenir.
D'autre part plus grand bs
peut améliorer le débit .
Et il y a un autre aspect. Si le disque dur que vous lisez est sain (ou du moins vous le supposez), vous pouvez le préparer de manière à ce que l'image prenne moins de place en tant que fichier épars ( cette réponse (méthode des fichiers épars). dd
essaiera de créer un fichier de sortie clairsemé avec conv=sparse
. L'efficacité de cette approche dépend de bs
; strictement : le obs
Il est donc raisonnable d'utiliser de grandes ibs
et petits obs
séparément dans cette affaire.
Toutes ces raisons font que dd
n'est pas le meilleur outil pour créer des images disque en général, surtout si vous ne connaissez pas très bien ses particularités. (Note : "pas le meilleur" peut toujours être "bon"). Utilisez GNU ddrescue
avec la taille du secteur ( -b
) correspondant à la taille du secteur physique du dispositif source et une taille de cluster relativement importante ( -c
) pour les performances. Avec -S
il tirera parti de l'éparpillement.
Il y a deux scénarios où je préfère dd
sur ddrescue
:
- (trivial) Lorsque
dd
est disponible etddrescue
ne l'est pas. - Quand j'ai besoin de flux (pipe) la sortie.
ddrescue
a besoin d'un fichier de sortie recherchable ; avecdd
Je peux envoyer la sortie versnc
,pv
,gzip
( cette réponse encore une fois, méthode du fichier compressé) ou autre.
Qu'en est-il de la restauration de cette image sur le disque d'origine ?
Le principe est que vous pouvez lire l'image sans erreur et que le disque d'origine est sain. Si c'est le cas, dd
fera l'affaire, une grande taille de bloc est acceptable.
S'il y a des erreurs de lecture pendant la lecture de l'image (qui indiquent que le périphérique et/ou le système de fichiers contenant l'image est corrompu), vous devez procéder comme pour un périphérique source non sain (voir ci-dessus) et reconnaître que les données résultantes sur le disque d'origine peuvent être (partiellement) corrompues.
Si des erreurs d'écriture se produisent lors de l'écriture sur le disque d'origine, la restauration de l'image n'a pas beaucoup de sens ; vous ne devriez pas utiliser ce disque du tout.
Oui, aucun problème avec n'importe quelle taille de bloc.
Cela dit, l'utilisation dd
vous copierez également l'espace vide/non utilisé, gaspillant ainsi de l'espace dans le fichier de destination. Ce qui est acceptable si vous utilisez netcat
a dd
à travers un réseau directement sur un disque cible, mais pas si bien si vous créez une "image maître" pour cloner un tas de machines ou à des fins de sauvegarde. Si c'est ce que vous avez l'intention de faire, je me tournerais vers un programme d'imagerie comme clonezilla
à la place.