(Przez zło mam na myśli „zniszczy rzeczy”.)
Załóżmy, że mamy zamiar użyć dd
. Wybraliśmy poprawny zestaw if
, of
i ewentualnie seek
a skip
. Dokładnie upewniliśmy się, że polecenie nie zapisuje poza naszym zamierzonym regionem wyjściowym.
Jak możemy teraz subtelnie niszczyć, wybierając złą kombinację bs
i count
? Skąd mielibyśmy wiedzieć?
Powodem, dla którego pytam, jest to, że wydają się pojawiać preferowane przez magię wartości. Na przykład w tym pytaniu o generowanie losowego pliku 1G, pierwsze dwie odpowiedzi użyć if=/dev/urandom
, of=sample.txt
, bs=64M
, i count=16
.
Jak utworzyć losowy plik 1 GB w systemie Linux?
Oczywiście nie są to jedyne prawidłowe ustawienia, ale obie odpowiedzi wykorzystały te ustawienia, co sugeruje, że ten wybór jest szczególnie dobry i uzasadniony. Zwłaszcza w takim przypadku, w którym nie ma systemu plików ani nawet dysku fizycznego, nie jest dla mnie jasne, czy wybór ustawień może być zły - nie tylko nieefektywny, ale zły . Domyślam się, że dd
musi zapisywać całkowitą liczbę bloków na raz, więc wraz ze bs
wzrostem zwiększa się użycie pamięci i te wartości wpływają tylko na wydajność.
Ten przykład jest tylko przykładem i nie jest czymś, co szczególnie mnie interesuje, więc napisz przypadki, w których to, co jest kopiowane, ma system plików.
Używanie dd jest dla mnie zawsze przerażającym skokiem wiary.
źródło
dd
zbyt często, ale kiedy to robię, stawki są wysokie i to jest przerażające! Wygląda na to, że jest to obszar Twojej wiedzy. Zapraszam do odpowiedzi.Odpowiedzi:
Wsparcie!
dd
jest straszne!Nie jesteś sam. Z porad dla systemu Linux :
Ale nie martwcie się. Gdy dowiesz się o jego zawiłościach, będziesz przywoływał
dd
spokojną grację kowboja rodeo.Czy to się zepsuje? Co to jest
count
ingbs
?Najpierw zajmiemy się pierwszym pytaniem.
Jeśli masz na myśli „niezamierzone konsekwencje” przez „złamanie”, to po prostu przez ich sprecyzowanie w teorii. Co mam przez to na myśli? Powiedzmy, że chcesz skopiować
image.img
na kartę SD znajdującą się pod adresem/dev/sdc
. Więc dopasujesz parametry w swoim przykładzie:Czy ponowne użycie tych ustawień powinno być w porządku? Poczekajmy,
dd
aż skończymy ... co teraz mówi?Tylko 1,1 GB skopiowane! Ale
image.img
ma około 2 GB , chcę, żeby wszystko zostało skopiowane! Mówiąc,dd
aby skopiować 16 partii 64M (gdzie M = 1024 * 1024, nawiasem mówiąc) określiłeś rozmiar. Będziesz wiedział po wyjściu statusu. Jeśli chcesz skopiować cały plik, dopasuj rozmiar za pomocąbs
icount
; lub po prostu całkowicie je pomiń:Co się stanie, jeśli staniemy się naprawdę niegrzeczni i powiedzmy,
dd
aby skopiować więcej danych niż jest dostępnych?Ach,
dd
kopiuje tylko tyle bajtów, ile otrzymuje. To się przydaje.Monitorowanie
dd
Mówiąc o wyjściu statusu,
dd
(wariant GNU) szanuje i reaguje na sygnał INFOSIGUSR1
:Przydaje się do monitorowania powolnego transferu lub z jakiegoś powodu możesz się zawiesić. Dobrze się łączy
watch
, ale pamiętaj, aby podaćwatch
odpowiednio długi czas przerwy.Czy
dd
mam jakieś inne opcje, o których powinienem wiedzieć?dd
rzeczywiście ma inne opcje, ale w większości przypadków, jeśli będziesz musiał z nich skorzystać, będziesz wiedział, co robią. Mimo to kilka przykładów może dać ci pomysł:conv=CONVS
: przekonwertuj dane wejściowe zgodnie z jedną lub kilkoma opcjami konwersjiseek=N
iskip=N
: pomiń bloki wielkości N [obs | ibs] na początku [wyjście | wejście]status=X
: (pomijanie wyjścia) albonoxfer
albonone
Teraz czuję się znacznie lepiej
dd
!Wspaniały! Wkrótce wyślesz przez Internet obraz rozruchowy, który zostanie zapisany bezpośrednio na karcie microSD przy użyciu kombinacji
dd
issh
.Ale co tak
dd
naprawdę oznacza akronim?Dobre ostatnie pytanie. W przypadku tego pytania i innych podobnych, odsyłam cię do wpisu pliku żargonu dla
dd
.Zachęcamy do proszenia o wyjaśnienie, czy coś jest bardziej nieprzejrzyste niż powinno!
źródło
Twoje pytanie jest wewnętrznie sprzeczne:
Jeśli wybierzesz złą kombinację
bs
icount
, jedyną rzeczą, którą możesz złamać, jest przekroczenie zamierzonego regionu wyjściowego (lub nieosiągnięcie go, co uważam za ten sam problem)Jeśli dokładnie upewniłeś się, że polecenie nie zapisuje poza zamierzonego regionu wyjściowego, nie możesz zepsuć rzeczy, ponieważ już zapewniłeś kombinację
bs
icount
nie jest źle. Obie nie mogą wystąpić jednocześnie. Podobnie, jeśli nie zrozumiałeś parametrówbs
icount
, nie możesz mieć pewności, że region wyjściowy jest poprawny.To powiedziawszy,
bs
parametr jest w dużej mierze parametrem dostrajania wydajności. Jeśli określisz rozmiarbs
mniejszy niż rozmiar sektora fizycznego i czytasz / piszesz w trybie surowym, lub inna całkowicie nieprecyzyjna wartość,dd
po prostu, a nie w subtelny sposób („Przerwij: błąd we / wy!”) . W przeciwnym razie wszystko będzie po prostu powoli.źródło