By
dd if=/dev/zero of=somepartition bs=512
czy wyczyścić partycje po somepartition
lub zatrzymać na końcu somepartition
?
By
dd if=/dev/zero of=somepartition bs=512
czy wyczyścić partycje po somepartition
lub zatrzymać na końcu somepartition
?
Odpowiedzi:
dd
dd
jest bardzo potężnym, ale także niebezpiecznym narzędziem. Robi to, co mu każesz, bez pytań. Więc jeśli powiesz mu, żeby wyczyściło zdjęcia rodzinne, ... a to pomniejszy błąd w pisaniu.
Ale jeśli sprawdzisz i sprawdzisz dwukrotnie, możesz go użyć.
dd if=/dev/zero of=somepartition bs=512
lub sugerowałbym
dd if=/dev/zero of=/dev/sdxn bs=4096
gdzie x
jest literą dysku i n
numerem partycji, a rozmiar bloku 4096 bajtów przyspiesza proces zapisu.
W tym przypadku ważne jest zapisanie na partycji . Jeśli napiszesz na cały dysk (po stronie głowicy), /dev/sdx
cały dysk zostanie zastąpiony. Ale zapis do partycji zostanie przerwany na końcu partycji, a partycje za nią zostaną zachowane. (Testowałem teraz na pendrive USB w Lubuntu 16.04 LTS, więc wiem, że tak to działa.)
Istnieje wyjątek dla partycji rozszerzonej (która jest kontenerem dla partycji logicznych, aby mieć więcej niż cztery partycje w tabeli partycji MSDOS). Jest to opisane w poniższym linku,
Czy mogę zrobić obraz partycji „rozszerzonej” za pomocą dd?
Ale jest też inny problem. Przetestowałem twoje polecenie w środowisku testowym i dd odczytałem tylko jeden kibibajt (1024 bajty), kiedy chciałem, aby utworzył obraz partycji rozszerzonej.
Przetestowałem to również teraz na pendrive USB w Lubuntu 16.04 LTS, i dotyczy to pisania (jak również czytania). Tylko pierwszy kibibajt jest nadpisywany.
Podsumowując, nadpisywanie partycji podstawowych i partycji logicznych działa zgodnie z głównym opisem w tej odpowiedzi. Ale nie używaj tej metody do zastępowania rozszerzonej partycji, ponieważ tylko pierwszy kibibajt zostanie zastąpiony. Partycje logiczne partycji rozszerzonej nie będą już znajdować się w tabeli partycji, ale przechowywane w nich dane nadal tam są.
dd
i że jest to ryzykowne, abyś był bardzo ostrożny podczas jego używania. Powodzenia :-) Ogólnie powinieneś zawsze mieć kopię zapasową wszystkich plików, których nie możesz utracić.
Zapisuje na partycji urządzenie nie będzie zapisywać poza tą partycją, z dd lub czymkolwiek innym. Aby uzyskać jakikolwiek efekt poza jedną partycją, musisz użyć urządzenia z pełnym dyskiem.
(Uwaga: chyba że twój dysk ma tablicę partycji z nakładającymi się partycjami, co nigdy nie powinno się zdarzyć).
Myślę, że twoje pytanie opiera się na fundamentalnym nieporozumieniu na temat tego, jak dd
(a właściwie w ogóle systemy operacyjne uniksopodobne) działają:
dd
nie można nadpisać sąsiednich partycji, po prostu dlatego, że dd
nie można nadpisać partycji, kropka .
dd
po prostu zapisuje do plików . Otóż to.
Teraz, jeśli masz przekazać dd
plik, który reprezentuje wiele partycji, a następnie dd
nadpisuje ten plik . Ale w takim przypadku nie dd
pisze się poza końcem partycji. dd
nadal będzie zapisywać do końca pliku i tylko do końca pliku.
Ale jeśli prześlesz dd
plik, który reprezentuje tylko jedną partycję, dd
nie zapisuje się poza końcem tej partycji. Ponownie nie ma to nic wspólnego dd
. dd
po prostu zapisuje do pliku, do którego chcesz go zapisać. Fakt, że ten plik reprezentuje pojedynczą partycję jest (w tym przypadku) zapewniony przez sterownik urządzenia blokowego w jądrze. dd
nie ma z tym nic wspólnego.
W skrócie: dd
zapisuje do plików. To, co reprezentują te pliki, nie stanowi dd
problemu. dd
nic nie wie o partycjach.
dd
do zapisywania na surowych partycjach. Możesz pisać tylko do plików. Ty można oczywiście zapisać do pliku urządzenia blokowego, który stanowi przegrodę (takich jak /dev/sda1
), ale nie można napisać do surowego partycji. A ponieważ możesz zapisywać tylko do pliku reprezentującego partycję, nie możesz zapisywać poza końcem partycji, ponieważ plik reprezentuje tylko partycję, a nie partycję i nieco za nią.
/dev/sda
w edytorze tekstu i zmienić dane, dd
nie różni się od żadnego innego programu pod względem dostępu do partycji. Bardzo dobra odpowiedź!
Istnieje niebezpieczny, ale rzadki specjalny scenariusz, w którym może się to zdarzyć nawet w przypadku niezablokowanych sterowników urządzeń blokowych:
Musisz być ostrożny z dd, jakbyś popełnił błąd, możesz nadpisać więcej, niż się spodziewałeś, i zależy to od tego, do czego używasz dd (OP był niejasny w jego użyciu dd i dokładnej składni dd Komenda).
Jeśli określisz partycję , będzie ona zapisywać na niej aż do jej zapełnienia.
Jeśli popełnisz błąd i umieścisz cały dysk, na przykład = / dev / sda, dd zapisze na całym dysku, aby zakończyć ignorowanie (i nadpisywanie) tablicy partycji.
Możesz również użyć dd na partycji w celu zastąpienia usuniętych plików (usunięte pliki mogą pozostać na partycji i wykryte przez różne narzędzia odzyskiwania z różnym powodzeniem, dopóki nie zostaną nadpisane. W takim przypadku możesz użyć dd, aby wypełnić wolne miejsce przez zapis do pliku.
dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file
Jednak w zależności od tego, co robisz, możesz użyć alternatywnego narzędzia do bezpiecznego usuwania plików. Zobacz Jak bezpiecznie usunąć plik (i)? dla opcji.
dd
nie jest tak niski. W rzeczywistości większość rzeczy, które ludzie robią, dd
można zrobić tak samo cat
. W rzeczywistości cat
jest nieco szybszy, ponieważ używa większych bloków niż dd
domyślnie. Cały kod niskiego poziomu znajduje się w jądrze. A kierowca tak naprawdę nie dba o to, czy używasz dd
lub cat
.
dd if=/dev/zero of=/dev/sda bs=512 count=1
lub dd if=/dev/zero of=/dev/sda bs=512
są przykładami. Drugim poleceniem będzie kontynuował zapisywanie i zapełnił cały dysk „ignorując” tablicę partycji. Jeśli określisz partycję, dd if=/dev/zero of=/dev/sda1
nie wyjdzie ona poza partycję. Rodzaj zależy od tego, co chcesz zrobić z dd.
of=somepartition
, więc przypadek, w którym piszesz na całe urządzenie dyskowe, nie ma zastosowania. dd
nie można obejść ograniczeń sterownika urządzenia.
/dev/sda1
Są tworzone przez jądro w taki sposób, że nie można uzyskać dostępu do sąsiedniej pamięci przez nie (zakładając, że tablica partycji nie została zmieniona po ostatnim czytaniu przez jądro). Jeśli w ten sposób uzyskasz dostęp do sąsiedniego magazynu, będzie to uważane za ogromny błąd.