Есть ли альтернативы для `dd`?

14

Какие другие инструменты я должен использовать для чтения и записи файлов с усечением, поиском и пропуском. Параметры командной строки dd кажутся неудобными и чуждыми, и мне не нравится выбирать между медленным, но точным режимом поиска ( bs=1) и быстрым, но негибким режимом ( bs=4kили чем-то еще).

Существуют ли более современные инструменты для чтения 555 байтов из одного файла (или канала, сокета или dev) из позиции 31337 и записи их в другой файл в позиции 128205 (с использованием блоков 512 + 43) с усечением или без него?

Vi.
источник
2
Я до сих пор не понимаю, что не так с dd. Вы всегда можете поместить оболочку сценария оболочки, если вам не нравится интерфейс. ddнаходится в стандарте POSIX , что является огромным плюсом.
jw013
2
Главная неправильная вещь - неспособность искать или пропускать дробные блоки. Вторая неправильная вещь, которая status=noxferне используется по умолчанию и не работает, и которая мне нужна iflag=fullblock(пропустите в некоторых скриптах => неработающие данные).
Ви.
4
1. bs=1=> Весь конвейер работает медленно. Например, я могу захотеть записать видеофайл, начиная с определенного кадра. 2. «Требуется некоторая арифметика» => не очень подходит для односложных и обычных команд оболочки.
Ви.
1
PSA: dd conv=seek_bytesсделает seekработу с байтовой точностью.
i336_
1
@ i336_ Я думаю, это просто означает, что самым безопасным вариантом для нас было бы избегать использования сценария оболочки и писать автономный статически исполняемый исполняемый файл. Я просто искал альтернативные варианты, потому что время от времени я слышал о том, что сумасшедшие вещи возможны прямо в bash, и задавался вопросом, может ли прямой доступ к файлам быть одной из тех сумасшедших вещей.
Трейказ

Ответы:

4

Есть инструмент ddrescue(будьте осторожны, есть и dd_rescueдругая программа с почти такой же функциональностью). Он использует более знакомый синтаксис с одиночной чертой для короткой или двойной чертой для длинных опций. Со страницы руководства:

   -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
источник
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Плохое начало истории ...
Ви.
Я только что попробовал с dd_rescue. Выдает предупреждение, что файл (stdin) не доступен для поиска, но продолжается. Вы можете попробовать. Тем не менее, ddrescueчувствует себя более полнофункциональным и зрелым.
Марко
1
@Vi .: Не стреляйте в курьера. ddrescueверно, трубы не ищут. Если вы хотите начать чтение с определенной точки в файле, вам нужно предоставить ему доступ к рассматриваемому файлу, а не к данным, переданным из другой программы. Также имейте в виду, что использование конвейеров борется с вашим желанием максимальной скорости, поскольку единственный способ эмулировать поиск в канале - это читать и отбрасывать части, которые вы не хотите обрабатывать. Поиск в реальном файле намного эффективнее.
Уоррен Янг
Действительно, поскольку инструмент предназначен для восстановления поврежденных данных, возможности конвейера отсутствуют . Это немного стыдно, если вы хотите гибко искать входной файл, но просто хотите передать результат в стандартный вывод. Хотя по своему прямому назначению это здорово.
Легкость гонки с Моникой
2

dcfldd - это еще одна альтернатива dd. Он не отвечает на вопрос ОП о гибкости поиска ввода / вывода, но может быть полезен для других, прибывших сюда через поиск в Google.

Он основан на gnu dd, со следующими дополнительными функциями:

  • Хэширование на лету - dcfldd может хэшировать входные данные во время их передачи, помогая обеспечить целостность данных.
  • Вывод статуса - dcfldd может обновлять пользователя о прогрессе в плане количества переданных данных и того, сколько времени займет операция.
  • Гибкая очистка дисков - dcfldd может использоваться для быстрой очистки дисков и, если необходимо, с известным шаблоном.
  • Проверка образа / стирания - dcfldd может проверить, что целевой диск является побитовым совпадением указанного входного файла или шаблона.
  • Несколько выходов - dcfldd может одновременно выводить на несколько файлов или дисков.
  • Разделение вывода - dcfldd может разделить вывод на несколько файлов с большей настраиваемостью, чем команда split.
  • Потоковый вывод и журналы - dcfldd может отправлять все свои данные журнала и выводить команды, а также файлы в исходном формате.
Дэн Приттс
источник
2

Хорошая альтернатива есть pv. Он не только автоматически вычисляет наиболее эффективный размер блока, существенно ускоряя процесс, но и обеспечивает прогресс, помимо прочего. Это простое использование:

pv < /dev/sda > sda.img

Хорошо работает и со сжатием. Быстрый способ сделать резервную копию и сжать диск за один ход:

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

Вы можете узнать больше здесь .

Бобби
источник
1
Основная ожидаемая особенность - поиск в выходных и входных файлах, который не обеспечивает pv (представление канала), так как поиск каналов отсутствует.
Ви.