web-dev-qa-db-fra.com

Utilisation de la taille de bloc dans dd et ddrescue

J'ai vu des exemples d'utilisation des commandes dd et ddrescue, et je vois qu'au lieu de demander à l'utilisateur la taille du bloc sur son appareil, il recommande d'utiliser bs=1M et je ne comprends pas pourquoi.

Que se passe-t-il si la taille du secteur du disque est 512 octets et 1MB est affecté à bs?

Une valeur peut-elle être utilisée indépendamment de la taille du secteur de disque?

Dans le cas de disques de format avancé et d'une capacité de 1 To, que recommandez-vous d'utiliser?

2
MarianoM

Qu'est-ce que l'option bs et pourquoi est-elle utilisée?

Il a été expliqué dans dd produit un fichier aléatoire de 32 Mo au lieu de 1 Go (que je recommande de lire, btw) cette option bs fait référence à la quantité de read() syscall lit et stocke en mémoire (si la taille de la mémoire et le périphérique à partir duquel vous lisez permettent une telle taille). Ceci est également référencé dans le manuel :

bs = BYTES lit et écrit en octets BYTES à la fois (par défaut: 512);

Ainsi, cela n'a rien à voir avec le nombre de blocs/secteurs sur le disque, mais avec les performances de dd - stocker plus de choses en mémoire pour un traitement plus rapide. Pour en citer un réponse ServerFault :

Je sais que lorsque je copie des disques durs, j'obtiens un débit plus rapide en spécifiant bs = 1M qu'en utilisant bs = 4k ou la valeur par défaut. Je parle d'améliorations de vitesse de 30 à 300 pour cent. Il n'est pas nécessaire de le régler au mieux, à moins que ce soit tout ce que vous faites tous les jours. mais choisir quelque chose de mieux que la valeur par défaut peut réduire le temps d'exécution.

Le choix de la valeur bs a également été discuté sur un autre post stackoverflow :

La taille de bloc optimale dépend de divers facteurs, y compris le système d'exploitation (et sa version), et les différents bus et disques matériels impliqués. Plusieurs systèmes de type Unix (y compris Linux et au moins certaines versions de BSD) définissent le membre st_blksize dans la structure stat qui donne ce que le noyau pense être la taille de bloc optimale

Quant à savoir pourquoi 1M, c'est potentiellement parce que les gens ont trouvé que c'était une valeur optimale. Rappelez-vous que RAM était auparavant de 512 Mo. Donc, utiliser 1M serait suffisamment petit pour maintenir RAM utilisation faible, mais avoir une vitesse de dd décente) .


Concernant votre question:

Que se passe-t-il si la taille du secteur du disque est de 512 octets et 1 Mo est affecté à bs?

Rien. dd lira les données en morceaux de 1 Mo. Cela ne change en rien les données. Il peut améliorer la vitesse de dd comme par rapport à une taille de bloc plus petite, mais n'a aucun effet sur les données elles-mêmes.

Une histoire différente se produirait si vous lisez des morceaux plus petits que la taille de secteur du disque: les disques doivent servir la taille de secteur complète et le noyau met en cache ces informations. Voir réponse de Matthew Ife sur le même message Serverfault. Mais encore une fois, aucun effet sur les données elles-mêmes.

Dans le cas de disques de format avancé et d'une capacité de 1 To, que recommandez-vous d'utiliser?

Format avancé tel que quoi? En ce qui concerne dd lui-même, il ne devrait se soucier d'aucun format de disque - tout ce qu'il sait, c'est lire et écrire depuis et bloquer les périphériques; peu importe si vous écrivez sur une clé USB ou un lecteur SCSI - la syntaxe est la même, c'est le noyau qui gère les moindres détails et dispose de pilotes pour que ces périphériques transmettent correctement les données.

Et encore une fois, la capacité n'a pas d'importance. Le disque SATA de 1 To est toujours un disque SATA.

3