tło
Kopiuję niektóre dyski CD / DVD z danymi do plików ISO, aby użyć ich później bez potrzeby korzystania z nich w napędzie.
Szukam procedur w sieci i znalazłem wiele:
Wykorzystanie
cat
do skopiowania nośnika: http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.htmlcat /dev/sr0 > image.iso
Wykorzystanie
dd
tego (najwyraźniej najczęściej stosowane): http://www.linuxjournal.com/content/archiving-cds-iso-commandlinedd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
Użyj po prostu,
pv
aby to osiągnąć: Zobacz,man pv
aby uzyskać więcej informacji, chociaż oto ich fragment:Taking an image of a disk, skipping errors: pv -EE /dev/sda > disk-image.img Writing an image back to a disk: pv disk-image.img > /dev/sda Zeroing a disk: pv < /dev/zero > /dev/sda
Nie wiem, czy wszystkie z nich powinny być równoważne, chociaż niektóre z nich testowane (za pomocą md5sum
narzędzia), a co najmniej, dd
i pv
to nie równoważne. Oto md5sum
zarówno dysk, jak i wygenerowane pliki przy użyciu każdej procedury:
md5 z procedury dd: 71b676875b0194495060b38f35237c3c
md5 procedury pv: f3524d81fdeeef962b01e1d86e6acc04
EDYCJA: To wyjście pochodziło z innej płyty CD niż dane wyjście. W rzeczywistości zdałem sobie sprawę, że istnieje kilka interesujących faktów, które podam jako odpowiedź.
W rzeczywistości rozmiar każdego pliku jest inny w porównaniu do siebie.
Czy istnieje najlepsza procedura kopiowania dysku CD / DVD, czy po prostu używam niepoprawnie poleceń?
Więcej informacji o sytuacji
Oto więcej informacji o przypadku testowym, którego używam do sprawdzenia procedur, które znalazłem do tej pory:
isoinfo -d i /dev/sr0
Dane wyjściowe: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015
dd
aby skopiować nośnik, z wyjściowymi sumami kontrolnymi i informacjami o pliku Dane wyjściowe: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015
pv
aby skopiować nośnik, z sumami wyjściowymi i informacjami o pliku Dane wyjściowe: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015
Każda pomoc będzie mile widziana!
cmp file1 file2
? czy używałeśdd
z niewłaściwymcount=
(lub naprawdę jakimkolwiek rachunkiem, co nie jest konieczne, jeśli chcesz wszystko?). Przeczytaj błędy w dmesg?dd
polecenie, którego użyłeś (jaki rozmiar bloku? Ile liczą?), (2) rozmiary i sumy kontrolne wszystkie dane wyjściowe i (3) wszelkie niezależne informacje dotyczące ilości danych na źródłowym dysku optycznym. ……………… PS Dlaczego używaszcount=
nadd
? Chcesz skopiować cały obraz dysku, prawda?count=
mówi „skopiuj tyle, a potem przestań”.isoinfo -d -i /dev/cdrom
aby znać numer i korzystać z niego - w rzeczywistości twierdzi, że nie należy go używaćdd
. „W każdym razie, jeśli chcesz uzyskać prawidłowy obraz ISO tej płyty CD, musisz poprawnie ustawić rozmiar i liczbę bloków przed utworzeniem obrazu.”Odpowiedzi:
Wszystkie poniższe polecenia są równoważne. Czytają bajty CD
/dev/sr0
i zapisują je w pliku o nazwieimage.iso
.Dlaczego miałbyś używać jednego nad drugim?
Prostota. Na przykład, jeśli już znasz
cat
lubcp
nie musisz uczyć się kolejnego polecenia.Krzepkość. Ten jest trochę wariantem prostoty. Jakie jest ryzyko, że zmiana polecenia zmieni to, co robi? Zobaczmy kilka przykładów:
set -o noclobber
upewnij się, że niczego nie nadpisujesz; jednak możesz nadpisać urządzenie, jeśli przypadkowo napiszesz>/dev/sda
(na płycie CD, która jest tylko do odczytu, nie ma oczywiście ryzyka). To przemawia zacat /dev/sr0 >image.iso
(trudnym do popełnienia błędu w szkodliwy sposób) nad alternatywami, takimi jaktee </dev/sr0 >image.iso
(jeśli odwrócisz przekierowania lub zapomnisz wejściowe,tee
napiszę/dev/sr0
).cat
: możesz przypadkowo połączyć dwa pliki. Dzięki temu dane można łatwo odzyskać.dd
:i
io
są blisko klawiatury i nieco niezwykłe. Nie ma odpowiednikanoclobber
,of=
z radością nadpisze cokolwiek. Składnia przekierowań jest mniej podatna na błędy.cp
: jeśli przypadkowo podmienisz źródło i cel, urządzenie zostanie zastąpione (ponownie, zakładając, że urządzenie nie jest tylko do odczytu). Jeślicp
zostanie wywołany z niektórymi opcjami, takimi jak-R
lub-a
które niektóre osoby dodają za pośrednictwem aliasu, skopiuje węzeł urządzenia, a nie zawartość urządzenia.Dodatkowa funkcjonalność. Jedynym narzędziem, które ma użyteczną dodatkową funkcjonalność, jest
pv
jego potężne opcje raportowania.Ale tutaj możesz sprawdzić, ile zostało skopiowanych, i tak patrząc na rozmiar pliku wyjściowego.
Występ. Jest to proces związany z We / Wy; główny wpływ na wydajność ma rozmiar bufora: narzędzie odczytuje fragment ze źródła, zapisuje fragment do miejsca docelowego, powtarza. Jeśli porcja jest zbyt mała, komputer spędza czas na przełączaniu się między zadaniami. Jeśli porcja jest zbyt duża, operacji odczytu i zapisu nie można zrównoleglać. Optymalny rozmiar porcji na komputerze to zwykle około kilku megabajtów, ale jest to oczywiście bardzo zależne od systemu operacyjnego, sprzętu i tego, co jeszcze robi komputer. Jakiś czas temu przeprowadziłem testy porównawcze kopii dysku twardego na dysk twardy, w Linuksie, co pokazało, że w przypadku kopii na tym samym dysku,
dd
z dużym rozmiarem bufora ma tę zaletę, ale w przypadku kopii na wielu dyskach,cat
przewyższało dowolnydd
rozmiar bufora.Jest kilka powodów, dla których
dd
tak często się o tym wspominasz. Oprócz wydajności nie są to szczególnie dobre powody.cat
(było więcej narzędzi wiersza zorientowanych, takich jakhead
,sed
itp), ale ludzie raczej unikać jej na danych binarnych ze względu na jej związek z przetwarzaniem tekstu. Nie stanowi to problemu w nowoczesnych systemach, takich jak Linux, OSX, * BSD lub cokolwiek zgodnego z POSIX.dd
jest nieco „niższy poziom” niż inne narzędzia, takie jakcat
bezpośredni dostęp do urządzeń. Jest to całkowicie fałszywe:dd
a takżecat
itee
wszyscy inni czytają bajty z ich danych wejściowych i zapisują bajty na swoich danych wyjściowych. Prawdziwa magia jest w środku/dev/sr0
.dd
ma nietypową składnię wiersza poleceń, więc wyjaśnienie, jak to działa, daje więcej okazji, aby zabłysnąć, wyjaśniając coś, co tylko piszecat /dev/sr0
.dd
z dużym rozmiarem bufora może mieć lepszą wydajność, ale nie zawsze tak jest (patrz niektóre testy porównawcze w systemie Linux ).Głównym ryzykiem
dd
jest to, że może dyskretnie pomijać niektóre dane . Myślę, żedd
jest bezpieczny, dopókiskip
albocount
nie są przekazywane, ale nie jestem pewien, czy jest to przypadek na wszystkich platformach. Ale nie ma żadnej przewagi poza wydajnością.Więc użyj,
pv
jeśli chcesz jego fantazyjny raport postępu, lubcat
jeśli nie.źródło
pv < /dev/sr0 > image.iso
to samo copv /dev/sr0 > image.iso
(to ostatnie znajduje się na stronach instrukcji pv)?pv /dev/sr0 …
mogą zawierać nazwę pliku w raportach postępu , alepv </dev/sr0
nie mogą.cp
może być aliasowana docp -R
, co (przynajmniej na GNU cp jako root) powodujecp
kopiowanie węzła urządzenia, a nie jego zawartości./dev
to węzły urządzeń. Na przykładcp -R /dev/sr0 image.iso
utworzyłbyimage.iso
plik, przez który można uzyskać dostęp do napędu CD, podobnie jak/dev/sr0
zwykły plik zawierający kopię zawartości dysku CD, którą otrzymujeszcp /dev/sr0 image.iso
.dd
pobiłem,cat
ale tylko nieznacznie.W tym przypadku są interesujące fakty, szczególnie te:
dd
ipv
) sumy kontrolne są identyczne .dd
procedury otworzyć napęd i zamknąć go za pomocą tego samego dysku, a następnie zakończyć test za pomocąpv
procedury. Robiąc to, otrzymałem identyczne kopie z obu procedur.dd
w / ocount=X
parametr przestaje poprawnie na końcu płyty i daje taki sam obraz jak Disc-zpv
(sumy kontrolne są identyczne), więc lepiej dla mnie, aby korzystaćdd
w / o parametrach lub po prostupv
.Na razie wydaje się
pv
idd
można wykonać kopię CD / DVD z takimi samymi wynikami.źródło