Existe-t-il des alternatives pour `dd`?

14

Quels autres outils dois-je utiliser pour lire et écrire des fichiers avec troncature, rechercher et ignorer. Les options de la ligne de commande de dd semblent incommodes et étrangères et je n'aime pas choisir entre le mode de recherche lent mais précis ( bs=1) et le mode rapide mais rigide ( bs=4kou autre).

Existe-t-il des outils plus modernes pour lire 555 octets d'un fichier (ou pipe ou socket ou dev) à partir de la position 31337 et les écrire dans l'autre fichier à la position 128205 (en utilisant les blocs 512 + 43), avec ou sans troncature?

Vi.
la source
2
Je ne vois toujours pas ce qui ne va pas dd. Vous pouvez toujours mettre un wrapper de script shell autour de lui si vous n'aimez pas l'interface. ddest dans la norme POSIX , ce qui est un énorme avantage.
jw013
2
Le principal problème est l'incapacité de rechercher ou d'ignorer des blocs fractionnaires. Deuxième mauvaise chose qui status=noxfern'est pas par défaut et qui est cassée et dont j'ai besoin iflag=fullblock(omettre dans certains scripts => données cassées).
Vi.
4
1. bs=1=> l'ensemble du pipeline est lent. Par exemple, je peux vouloir vider un fichier vidéo à partir d'une image exacte. 2. "Il faut de l'arithmétique" => ne convient pas très bien aux oneliners et aux commandes de shell de routine.
Vi.
1
PSA: dd conv=seek_bytesfera seekfonctionner avec une précision d'octet.
i336_
1
@ i336_ Je pense que cela signifie simplement que l'option la plus sûre pour nous serait d'éviter d'utiliser un script shell et d'écrire un exécutable autonome lié statiquement. Je cherchais simplement des alternatives parce que de temps en temps j'entends dire que des trucs fous sont possibles directement dans bash, et je me demandais si l'accès direct aux fichiers pouvait être une de ces choses folles.
Trejkaz

Réponses:

4

Il y a l'outil ddrescue(attention, il y a aussi dd_rescueun programme différent avec presque les mêmes fonctionnalités). Il utilise la syntaxe la plus familière avec le tiret simple pour le tiret court ou double pour les options longues. Depuis la page de manuel:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]
Marco
la source
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Mauvais début de l'histoire ...
Vi.
J'ai juste essayé avec dd_rescue. Il émet un avertissement indiquant que le fichier (stdin) n'est pas accessible, mais se poursuit. Vous pouvez l'essayer. Cependant, ddrescuese sent plus complet et mature.
Marco
1
@Vi .: Ne tirez pas sur le messager. ddrescuea raison, les tuyaux ne sont pas recherchés. Si vous souhaitez commencer la lecture à un point spécifique d'un fichier, vous devez lui donner accès au fichier en question, et non aux données provenant d'un autre programme. Méfiez-vous également que l'utilisation de tuyaux lutte contre ce souhait pour la vitesse ultime, car la seule façon d'émuler la recherche dans un tuyau est de lire et de jeter les pièces que vous ne souhaitez pas traiter. La recherche dans un fichier réel est beaucoup plus efficace.
Warren Young
En effet, puisque l'outil est conçu pour récupérer des données cassées, il n'y a pas de capacité de tuyau. C'est un peu dommage quand vous voulez la flexibilité de rechercher à travers un fichier d'entrée mais que vous voulez simplement diriger le résultat vers stdout. Pour sa destination, cependant, c'est génial.
Courses de légèreté avec Monica
2

dcfldd est une autre alternative à dd. Il ne répond pas à la question du PO sur la flexibilité de recherche d'entrée / sortie, mais peut être utile à d'autres personnes arrivant ici via la recherche Google.

Il est basé sur gnu dd, avec les fonctionnalités supplémentaires suivantes:

  • Hachage à la volée - dcfldd peut hacher les données d'entrée lors de leur transfert, ce qui contribue à garantir l'intégrité des données.
  • Sortie d'état - dcfldd peut mettre à jour l'utilisateur de sa progression en termes de quantité de données transférées et de la durée de l'opération.
  • Effacement des disques flexible - dcfldd peut être utilisé pour effacer les disques rapidement et avec un motif connu si vous le souhaitez.
  • Vérification d'image / effacement - dcfldd peut vérifier qu'un lecteur cible est une correspondance bit à bit du fichier ou du modèle d'entrée spécifié.
  • Sorties multiples - dcfldd peut sortir sur plusieurs fichiers ou disques en même temps.
  • Diviser la sortie - dcfldd peut diviser la sortie en plusieurs fichiers avec plus de configurabilité que la commande de division.
  • Sortie canalisée et journaux - dcfldd peut envoyer toutes ses données de journal et sa sortie aux commandes ainsi qu'aux fichiers nativement.
Dan Pritts
la source
2

Une bonne alternative est pv. Non seulement il calcule automatiquement la taille de bloc la plus efficace, accélérant essentiellement les choses, mais il fournit également des progrès, entre autres. Son utilisation est simple:

pv < /dev/sda > sda.img

Il joue bien aussi avec la compression. Un moyen rapide de sauvegarder et de compresser un disque en un seul mouvement est le suivant:

pv < /dev/sdb | pigz -9 > disk.img.gz

Vous pouvez en savoir plus ici .

Policier
la source
1
La principale fonctionnalité attendue est la recherche dans les fichiers de sortie et d'entrée, ce que pv (pipe view) ne fournit pas, car il n'y a pas de recherche de tuyaux.
Vi.