Edytowane: nie uruchamiaj tego, aby go przetestować, chyba że chcesz zniszczyć dane.
Czy ktoś mógłby mi pomóc zrozumieć, co mam?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
P: Dlaczego konkretnie 4096
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
P: Co to dokładnie robi?
Odpowiedzi:
Spowoduje to wyzerowanie pierwszych 16 MiB napędu. 16 MiB jest prawdopodobnie więcej niż wystarczający, aby zniszczyć wszelkie struktury „początku dysku”, a jednocześnie jest na tyle mały, że nie zajmie to dużo czasu.
blockdev --getsz
pobiera rozmiar urządzenia blokowego w „sektorach 512-bajtowych”. To polecenie wygląda więc tak, jakby miało na celu wyzerowanie ostatnich 2 MB dysku.Niestety, to polecenie nie działa poprawnie pod względem składni. Spodziewam się, że polecenie było pierwotnie przeznaczone
a backticks zgubiły się gdzieś na linii ludzi kopiujących / wklejających je między różnymi środowiskami.
Stare tabele partycji, metadane LVM, metadane rajdowe itp. Mogą powodować problemy przy ponownym użyciu dysku. Zerowanie sekcji na początku i na końcu dysku pozwoli na ogół uniknąć tych problemów, a jednocześnie będzie znacznie szybsze niż zerowanie całego dysku.
źródło
expr blockdev --getsz /dev/sda - 4096
byłby błąd składniowyexpr
. Myślę, że zamierzonym poleceniem było...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. Lub lepiej:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Spowoduje to usunięcie pierwszego
4096*4096=16MB
i ostatniego512*4096=2MB
dysku twardego, które zawierają ważne struktury przydatne do odzyskiwania. Zakładam, że ten kod został złośliwie opublikowany.Nigdy nie spotkałem się z sytuacją, w której wyraźne określenie
count
innego niż1
było przydatne. I zostały usunięte pierwszy blok gdybym chciał upewnić się, że nie zostawiając żadnych śladów pupę MBR ...źródło
sda
. Bardziej prawdopodobnesdb
lubsdc
. Ale oczywiście mogę się mylić ...Te polecenia zastąpią twoje urządzenie sda zerami - pierwsze zrobi pierwsze 16 MB (rozmiar bloku 4096 i liczba 4096 bloków), a drugie zastąpi ostatnie 2 MB (rozmiar bloku 512 z 4096 bloków) zerami. (nie jest technicznie wymazywany, a to odnosi się do mojego pierwszego punktu poniżej).
(to była część wspomniana już w innych odpowiedziach, w tym tutaj dla kompletności)
Inną rzeczą, o której warto wspomnieć, jest to, że rozmiar bloku ma efekty, ale na ogół są one widoczne tylko w operacjach o dużej objętości. Najbardziej wydajnym (najszybszym) sposobem wykonania polecenia jest to, że rozmiar bloku polecenia odpowiada rozmiarowi dostępu do urządzenia, w przeciwnym razie marnuje się czas.
Jeśli jesteś zainteresowany, możesz spróbować utworzyć plik z milionem fragmentów 1-blokowych i plik z milionem fragmentów 1-blokowych i zobaczyć różnicę:
Jak widać, wielkość bloku ma ogromny wpływ na wydajność. Być może jest to pasek boczny PO, ale wydaje mi się, że nadal jest istotny.
TL; DR: Nie wykonuj niepożądanego kodu, który znajdziesz w sieci, lub komuś, komu nie ufasz. Zrujnuje ci dzień.
źródło
Don't execute arbitrary code you find on the net
linięInni wyjaśnili, co robią, więc pominę to.
Chodzi
dd
o to, żeby mieć osobne argumentybs
icount
to, żebs
kontroluje to, ile napisano na raz . Określenie naprawdę dużych wartościbs
będzie wymagało naprawdę dużego bufora w programie, a określenie wartości mniejszych niż rozmiar bloku urządzenia będzie wolne, ponieważ jądro musi zbudować cały blok, aby zapisać na urządzeniu (w takich przypadkach może to prawdopodobnie buforuje zapisy aż do uzyskania pełnego bloku, w innych przypadkach może być konieczne przeczytanie tego, co jest już na płycie). Ponieważ oba polecenia używają różnych wartości dlabs
, prowadzi mnie to do wniosku, że mogłeś je znaleźć w dwóch różnych witrynach. Dyski twarde miały rozmiar bloku 512 bajtów, co odpowiadabs=512
tego ostatniego polecenia, ale niektóre (chyba 6-8) lata temu zaczęły tworzyć dyski o rozmiarze bloku 4096 bajtów, cobs=4096
stanowi lepszy wybór dla współczesnych dysków.źródło
bs
jest znacznie wyższy . Pojedyncza komenda SATA może odczytywać lub zapisywać wiele sektorów, więc jądro scala wejścia / wyjścia przed ich wysłaniem. Wszędzie odbs=64k
celubs=1024k
jest rozsądna (L3 cache size jest często 4-8MiB). Często używambs=128k
, co stanowi połowę wielkości pamięci podręcznej L2 w nowoczesnych procesorach Intela. (dd
obejmuje dwie operacje memcpy: wread(2)
źródle (nawet jeśli jest to / dev / zero) iwrite(2)
. IIRCsdd
miał opcję zapisywania zer, co pozwoliłoby zaoszczędzić trochę czasu procesora. Naprawdę istotne tylko, jeśli miejscem docelowym jest coś inny niż dysk).iostat -x 4
, jak dochodzi do scalania żądań we / wy, spójrz na dane wyjściowe lub coś i zanotuj kolumny rrqm / s (żądania odczytu scalone na sekundę) i wrqm / s.OSTRZEŻENIE:
dd if=/dev/zero of=/dev/
służy do czyszczenia dysku lub urządzenia przed kopiowaniem danych przez sąd. Napęd lub urządzenie należy zawsze zdezynfekować przed skopiowaniem informacji z systemu objętego dochodzeniem, aby ograniczyć zanieczyszczenie krzyżowe. Dlatego nie jest to złe polecenie, użytkownik końcowy musi zrozumieć, do czego jest używany, w przeciwnym razie zniszczy swoje dane. Jeśli tego właśnie chcesz, to wykonaj operację zerowania zapisudd if=/dev/sda | hexdump -C | head
.Źródło: Praktyczny przewodnik po komputerowych badaniach kryminalistycznych autorstwa dr Darrena Hayesa
źródło
Używam
dd if=/dev/zero of=/dev/sdX oflag=sync
do testowania jakości włożonego napędu USB lub karty MicroSD PRZED faktycznym użyciem go z gparted, fdisk lub dd z obrazem dysku. Myślę, że jest to rozsądny pomysł, szczególnie w przypadku nośników MicroSD o niskiej jakości.Oczywiście uważaj na = sdX, ponieważ nie ma wybaczenia przy przypadkowym wyczyszczeniu dysku. Sprawdź, czy X = litera dysku docelowego celu.
źródło