Чи існують альтернативи для `dd`?


14

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

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


2
Я досі не бачу, у чому справа dd. Ви завжди можете поставити навколо нього обгортку сценарію оболонки, якщо інтерфейс вам не подобається. ddє в стандарті POSIX , що є величезним плюсом.
jw013

2
Головне неправильне - це неможливість шукати або пропускати дробові блоки. Друга неправильна річ, яка status=noxferне є за замовчуванням і порушена, і що мені потрібно iflag=fullblock(опустити в якомусь сценарії => зламані дані).
Ві.

4
1. bs=1=> весь трубопровід повільний. Наприклад, я можу захотіти скинути відео-файл, починаючи з якогось конкретного кадру. 2. "Це займає деяку арифметику" => не дуже підходить для oneliners та звичайних команд оболонки.
Ві.

1
PSA: dd conv=seek_bytesзробить seekроботу з точністю до байтів.
i336_

1
@ i336_ Я думаю, що це просто означає, що найбезпечнішим варіантом для нас було б уникати використання сценарію оболонки і писати автономний статично пов'язаний виконуваний файл. Я просто ходив по магазинах за альтернативами, бо час від часу чую, як шалені речі можливі безпосередньо в баші, і замислювався, чи може прямий доступ до файлів бути однією з цих божевільних речей.
Трейказ

Відповіді:


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]

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правильно, труби не піддаються пошуку. Якщо ви хочете розпочати читання в певній точці файлу, вам потрібно надати йому доступ до відповідного файлу, а не даних, переданих з іншої програми. Також майте на увазі, що використання труб бореться проти цього вашого бажання на максимальну швидкість, оскільки єдиний спосіб наслідувати пошук у трубі - це зчитування та викидання деталей, які ви не хочете обробляти. Пошук у фактичному файлі набагато ефективніший.
Warren Young

Дійсно, оскільки інструмент призначений для порятунку пошкоджених даних, трубопровід не існує . Це трохи соромно, коли ви хочете гнучкості пошуку вхідного файлу, але просто хочете передати результат stdout. За призначенням, проте, це чудово.
Гонки легкості по орбіті

3

Хороша альтернатива pv. Він не тільки автоматично обчислює найбільш ефективний розмір блоку, істотно прискорюючи речі, але й забезпечує прогрес, серед іншого. Це використання просте:

pv < /dev/sda > sda.img

Він добре грає і при стисненні. Швидкий спосіб резервного копіювання та стискання диска одним рухом такий:

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

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


1
Основною очікуваною особливістю є пошук у вихідних та вхідних файлах, яких не надає pv (перегляд труби), оскільки немає пошуку труб.
Ві.

2

dcfldd - ще одна альтернатива DD. Він не стосується питання ОП щодо введення / виведення пошуку гнучкості, але може бути корисним для інших, які приїжджають сюди за допомогою google-пошуку.

Він базується на gnu dd із такими додатковими функціями:

  • Під час передачі даних - dcfldd може хешувати вхідні дані під час їх передачі, що допомагає забезпечити цілісність даних.
  • Виведення статусу - dcfldd може оновлювати користувача про його прогрес щодо кількості переданих даних та того, скільки часу буде потрібно.
  • Гнучкі дискові серветки - dcfldd можна використовувати для швидкого стирання дисків за відомим малюнком, якщо потрібно.
  • Image / wipe Перевірити - dcfldd може переконатися, що цільовий диск відповідає біт-за-бітом відповідності вказаному вхідному файлу чи шаблону.
  • Кілька виходів - dcfldd може виводити одночасно в кілька файлів або дисків.
  • Сплит-вихід - dcfldd може розділити вихід на кілька файлів з більшою налаштованістю, ніж розділена команда.
  • Трубопровід і журнали - dcfldd може надсилати всі свої дані журналу та вихідні дані як командам, так і файлам.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.