J'ai un script qui crée un système de fichiers dans un fichier sur une machine Linux. Je vois que pour créer le système de fichiers, il utilise "DD" avec bs = x option, lit de / dev / zéro et écrit à un fichier. Je pense généralement spécifier IBS / OBS / BS est utile de lire des périphériques matériels réels, car on a des contraintes de taille de bloc spécifiques. Dans ce cas cependant, comme la lecture d'un périphérique virtuel et de l'écriture dans un fichier, je ne vois aucun point derrière l'option "BS = x octets". Mon compréhension est-il faux ici? (Juste au cas où cela vous aide, ce système de fichiers est ultérieurement utilisé pour démarrer un QEMU VM) P>
4 Réponses :
pour la lecture de / dev / zéro, peu importe. IBS / OBS / BS Spécifiez combien d'octets seront lus à la fois. Il est utile de choisir un numéro basé sur la manière dont les octets sont lus / écrits dans le système d'exploitation. Par exemple, Linux se lit généralement sur un disque dur dans des morceaux de 4096 octets. Si vous avez au moins une idée de la façon dont le matériel sous-jacent lit / écrit, il serait peut-être une bonne idée de spécifier IBS / OBS / BS. Au fait, si vous spécifiez BS, il remplacera tout ce que vous spécifiez pour IBS et OBS. P>
La taille du bloc est le nombre d'octets lus et écrits à la fois. Vraisemblablement il y a une option comptent = code> et qui est spécifiée dans les unités de la taille du bloc. S'il y a un
Skip = code> ou
recherche = code> option, celles-ci seront également dans des unités de taille de bloc. Toutefois, si vous lisez et que vous écrivez un fichier régulier et qu'il n'y a pas d'erreur de disque, la taille du bloc n'a pas d'importance tant que vous pouvez réduire ces paramètres en conséquence et ils sont toujours des entiers. Cependant, certaines tailles peuvent être plus efficaces que d'autres. P>
Vous avez le bon temps dd if = / dev / zéro de = myfile BS = 1024 Nombre = 1024 SYS 0M0.020S Time DD Si = / dev / zéro de = myfile BS = 1 compte = 1048576 SYS 0M8.381S
Pour comprendre les tailles de blocs, vous devez être familier avec des lecteurs de bande. Si vous n'êtes pas intéressé par des lecteurs de bande - par exemple, vous ne pensez pas que vous allez jamais utiliser un - alors vous pouvez revenir vous coucher maintenant.
N'oubliez pas les lecteurs de la bande de films dans les années 60, 70s , peut-être même des années 80? Ceux où la bobine est-elle allée tourner autour, et ainsi de suite? Not votre cartouche exasbyte ou même qic - quart-pouce - bandes; Votre bon vieux ruban de ruban-ruban à demi-pouce de rouleaux de rouleaux? Sur ceux-ci, une taille de bloc comporte. P>
Les données sur une bande ont été écrites en blocs. Chaque bloc a été séparé de la suivante par un espace inter-enregistrement. P> en fonction du matériel de lecteur de bande et du logiciel, il y avait une variété de problèmes pouvant survenir. Par exemple, si la bande a été écrite avec une taille de bloc de 5120 octets et que vous lisez la bande avec une taille de bloc de 512 octets, le lecteur de bande peut lire le premier bloc, vous rappelez-vous 512 octets, puis jetez le reste Les données; La prochaine lecture commencerait sur le bloc suivant. Inversement, si la bande a été écrite avec une taille de bloc de 512 octets et que vous avez demandé des blocs de 5120 octets, vous obtiendrez des lectures courtes; Chaque lecture reviendrait seulement 512 octets et si votre logiciel ne faisait pas attention, vous liriez des ordures. Il y avait aussi le problème que le lecteur de bande devait se mettre à la hauteur de la vitesse pour lire le bloc, puis ralentir. L'art ASCII suggère que l'IRG était plus petit que les blocs de données; Ce n'était pas nécessairement le cas. Et il a fallu du temps pour lire un pâté de maisons, dépassant l'IRG, revenir en arrière pour aller au bloc suivant et recommencer à en avant. Et si le lecteur de bande n'a pas eu la mémoire aux données tampon - les moins chères ne l'ont pas fait - alors vous pourriez affecter sérieusement vos performances de lecteur de bande. P> Histoire de guerre: travail préparé sur une machine plus récente avec un peu plus lecteur de bande moderne. J'ai écrit une bande à l'aide de goudron sans taille de bloc sensible (il est donc défectueux de 512 octets). C'était un gros logiciel - Doit être, OH, moins de 100 Mo au total (il y a longtemps, autrement dit). Le ruban a écrit bien parce que la machine était assez moderne et il fallait juste quelques secondes à le faire. Mais, je devais obtenir le matériel de la bande sur une machine avec un lecteur de bande plus ancien, celui qui n'avait pas de tampon à bord. Donc, il a lu le matériau, 512 octets à la fois, et la bobine a basculé en avant, en train de lire un pâté de maisons, puis a reculé de tous mais peut-être peut-être un demi-pouce, puis lisez en avant pour aller au bloc suivant, puis a reculé, puis a reculé, puis a bercée, puis a reculé, puis a bercée, puis a reculé Et ... eh bien, vous pouvez le voir faire cela, et comme il a pris des portions appréciables d'une seconde pour lire chaque bloc de 512 octets, le temps total pris était horrible. Mon vol devait partir ... Et j'avais besoin de ces données aussi. (C'était il y a assez longtemps, et dans une terre suffisamment loin, que les changements de dernière minute dans les vols n'étaient pas une grande partie d'une option non plus.) Pour couper une longue histoire courte, il a été lu - mais si j'avais utilisé un Taille de bloc sensible (telle que 5120 octets au lieu de la valeur par défaut de 512), j'aurais été bien réalisée, beaucoup plus rapide et avec beaucoup moins de danger de manquer l'avion (mais je l'ai passé en réalité attrapé l'avion, avec peut-être 20 minutes à remettre, Malgré un trajet en taxi à travers Paris dans l'heure de pointe). p> avec des lecteurs de bande plus modernes, il y avait suffisamment de mémoire sur le lecteur pour faire tamponner et obtenir un lecteur de bande pour flux - écrire continuellement sans inverser - était réalisable. . C'était que j'utilise que j'utiliserais une taille de bloc de 256 Ko pour obtenir des bandes QIVE pour diffuser. Je n'ai pas beaucoup fait avec des lecteurs de bande récemment - voyons, pas ce millénaire et pas beaucoup depuis quelques années avant cela, non plus; Certainement pas beaucoup depuis CD et DVD sont devenus les mécanismes de distribution de logiciels (lorsque le téléchargement électronique n'a pas été utilisé). P> Mais la taille du bloc a vraiment comporté dans l'ancien temps. Et aussi, le paramètre code> code> est en termes de taille de bloc (entrée). Il était utile de dire ' L'importance de dd code> fourni un bon support. Vous pouvez même transférer des données d'un lecteur de bande écrite avec, disons, 4 Ko Block à un autre que vous vouliez écrire avec, dire, 16 ko blocs, en spécifiant le
IBS code> (taille du bloc d'entrée) séparément du
obs code> (taille du bloc de sortie). Courdue utile! P>
dd bs = 1024 comptage = 1024 if = / dev / zéro de = / mon / fichier / de / zéros code>' pour copier 1 Mo de zéros autour. Ou pour copier 1 Mo d'un fichier. P>
dd code> est considérablement diminuée; C'était une partie essentielle de l'arsenal de quiconque qui a travaillé avec une bande de bande une décennie ou plus il y a plus. P> P>
C'est une très belle perspective historique et une anecdote cool. "L'importance de DD est considérablement diminuée" ... Voulez-vous dire "l'importance de DD est vaste sous-estimée i>"? Ou "l'importance de DD a I> énormément diminuée" BTW, ce que vous avez dit, a du sens dans le cas de réels appareils HW où les données sont écrites dans un format doivent être lues et écrites dans une autre. Ce que je demande particulièrement consiste à lire du périphérique pseudo et à écrire dans un fichier.
Probablement à la fois sous-estimé et diminué. Je n'ai pas besoin d'utiliser dd code> sérieusement pendant une longue période. Si le fichier créé est un fichier de disque, alors si la taille globale est spécifiée de manière appropriée, la taille du bloc peut ne pas avoir d'importance - mais cela pourrait fournir une optimisation mineure à la performance. La taille de bloc par défaut dans
dd code> est probablement toujours petite (512 octets) et en spécifiant une taille plus grande, la performance globale peut être améliorée. Mais ce n'est probablement pas crucial - comme c'était pour certains lecteurs de bande dans le passé depuis longtemps.
En plus de la grande réponse de Jonathan Leffler, gardez à l'esprit que l'option Le (BS =) Définissez les tailles de bloc d'entrée et de sortie aux octets. Cela fait de la lecture et de l'écriture des octets de DD par bloc, remplace les paramètres de 'IBS' et 'OBS'. En outre, si aucune option de transformation de la transformation de données n'est spécifiée, l'entrée est copiée sur la sortie dès sa lecture, même si elle est inférieure à la taille du bloc. strong> p>
blockQuote>
Par exemple, de retour dans les jours QIC sur un ancien système Sun, si vous l'avez fait: p>
Cela fonctionnerait, mais provoquerait une énorme quantité de back et de ventilation tandis que le lecteur a écrit un petit bloc et essayé de sauvegarder et de lire pour se repositionner correctement pour la prochaine écriture. P>
Si vous avez échangé cela avec: p>
Vous obtiendrez le Drive QIC écrivant beaucoup plus grandes morceaux et ne pas battre beaucoup. p>
Cependant, si vous avez commis l'erreur de ceci: p>
Vous courriez le risque d'avoir précisément le même lancement que vous aviez avant de dépendre de la quantité de données disponible au moment de chaque lecture. P>
Spécifier les deux BS = code> n'est pas toujours un substitut à l'utilisation des deux
ibs = code> et
obs = code>, en particulier pour les anciens jours [laid] de lecteurs de bande. p>
BS = code> option se réserve le droit pour
dd code> pour écrire les données dès sa lecture. Cela peut vous empêcher de ne plus avoir de blocs de taille identique sur la sortie. Voici ce que GNU est question, mais le comportement remonte autant que je puisse me rappeler (80): p>
tar cvf / dev / rst0c / bla code> p>
tar cvf - / bla | dd ibs = 16k obs = 16k de = / dev / rst0c code> p>
tar cvf - / bla | dd bs = 16k de = / dev / rst0c code> p>
ibs = code> et
obs = code> exclut cela de se produire. p>