Czy są alternatywy dla `dd`?

14

Jakich innych narzędzi powinienem używać do odczytywania i zapisywania plików ze skrótami, wyszukiwaniem i pomijaniem. Opcje wiersza poleceń dd wydają się niewygodne i obce i nie lubię wybierać między wolnym, ale precyzyjnym trybem wyszukiwania ( bs=1) a szybkim, ale nieelastycznym ( bs=4klub czymkolwiek).

Czy istnieją bardziej nowoczesne narzędzia do odczytu 555 bajtów z jednego pliku (lub potoku, gniazda lub dev) z pozycji 31337 i zapisania ich do drugiego pliku na pozycji 128205 (przy użyciu bloków 512 + 43), z obcięciem lub bez?

Vi.
źródło
2
Nadal nie widzę, co jest nie tak dd. Zawsze możesz owijać wokół niego skrypt powłoki, jeśli nie podoba ci się interfejs. ddjest w standardzie POSIX , co jest ogromnym plusem.
jw013
2
Główną złą rzeczą jest niezdolność do szukania lub omijania ułamkowych bloków. Druga zła rzecz, która status=noxfernie jest domyślna i jest zepsuta i której potrzebuję iflag=fullblock(pomiń w skrypcie => uszkodzone dane).
Vi.
4
1. bs=1=> cały rurociąg przebiega powoli. Na przykład mogę zrzucić plik wideo, zaczynając od dokładnej klatki. 2. „Zajmuje trochę arytmetyki” => niezbyt nadaje się do onelinerów i rutynowych poleceń powłoki.
Vi.
1
PSA: dd conv=seek_byteswykona seekpracę z precyzją bajtów.
i336_
1
@ i336_ Myślę, że oznacza to po prostu, że najbezpieczniejszym rozwiązaniem byłoby uniknięcie użycia skryptu powłoki i napisanie samodzielnego pliku wykonywalnego z łączeniem statycznym. Po prostu szukałem alternatyw, ponieważ od czasu do czasu słyszę o szalonych rzeczach bezpośrednio w bash i zastanawiałem się, czy bezpośredni dostęp do plików może być jedną z tych szalonych rzeczy.
Trejkaz

Odpowiedzi:

4

Jest to narzędzie ddrescue(uważaj, jest też dd_rescueinny program o prawie takiej samej funkcjonalności). Używa bardziej znanej składni z pojedynczym myślnikiem dla krótkiego lub podwójnego myślnika dla długich opcji. Ze strony podręcznika:

   -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
źródło
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Zły początek historii ...
Vi.
Właśnie próbowałem dd_rescue. Wyświetla ostrzeżenie, że plik (standardowe wejście) nie jest widoczny, ale kontynuuje działanie. Możesz spróbować. Jednak ddrescueczuje się w pełni funkcjonalny i dojrzały.
Marco
1
@Vi .: Nie strzelaj do posłańca. ddrescuema rację, rury nie są widoczne. Jeśli chcesz rozpocząć czytanie w określonym punkcie pliku, musisz dać mu dostęp do tego pliku, a nie danych przesyłanych z innego programu. Uważaj też na to, że używanie rur walczy z twoim pragnieniem najwyższej prędkości, ponieważ jedynym sposobem naśladowania wyszukiwania w rurze jest czytanie i wyrzucanie części, których nie chcesz przetwarzać. Wyszukiwanie w obrębie rzeczywistego pliku jest znacznie bardziej wydajne.
Warren Young,
Rzeczywiście, ponieważ narzędzie jest przeznaczone do ratowania uszkodzonych danych, nie ma możliwości potoku. To trochę wstyd, gdy chcesz elastycznie przeszukiwać plik wejściowy, ale po prostu chcesz przesłać wynik do standardowego wyjścia. Jednak zgodnie z przeznaczeniem jest świetny.
Wyścigi lekkości na orbicie
3

Dobrą alternatywą jest pv. Nie tylko automatycznie oblicza najbardziej efektywny rozmiar bloku, zasadniczo przyspieszając rzeczy, ale także zapewnia postęp, między innymi. Jego użycie jest proste:

pv < /dev/sda > sda.img

Bardzo dobrze gra również z kompresją. Szybki sposób na wykonanie kopii zapasowej i kompresowanie dysku jednym ruchem to:

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

Możesz dowiedzieć się więcej tutaj .

Konstabl
źródło
1
Główną oczekiwaną funkcją jest wyszukiwanie w plikach wyjściowych i wejściowych, czego nie zapewnia pv (widok potoku), ponieważ nie ma wyszukiwania potoków.
Vi.
2

dcfldd to kolejna alternatywa dd. Nie odpowiada na pytanie OP dotyczące elastyczności wyszukiwania danych wejściowych / wyjściowych, ale może być przydatne dla innych osób przybywających tutaj za pośrednictwem wyszukiwarki Google.

Opiera się na gnu dd, z następującymi dodatkowymi funkcjami:

  • Mieszanie w locie - program dcfldd może przesyłać dane wejściowe podczas przesyłania, pomagając zapewnić integralność danych.
  • Dane wyjściowe statusu - dcfldd może aktualizować użytkownika o postępach pod względem ilości przesyłanych danych i tego, jak długo potrwa operacja.
  • Elastyczne czyszczenie dysków - dcfldd może być używany do szybkiego czyszczenia dysków i ze znanym wzorcem, jeśli to konieczne.
  • Image / wipe Verify - dcfldd może sprawdzić, czy dysk docelowy jest zgodny bit-bit dla określonego pliku wejściowego lub wzorca.
  • Wiele wyjść - dcfldd może wysyłać dane do wielu plików lub dysków jednocześnie.
  • Podziel dane wyjściowe - dcfldd może dzielić dane wyjściowe na wiele plików z większą konfigurowalnością niż polecenie dzielenia.
  • Pipedowane dane wyjściowe i dzienniki - program dcfldd może wysyłać wszystkie dane dziennika i dane wyjściowe do poleceń, a także plików w sposób natywny.
Dan Pritts
źródło