Wymuś, aby dd nie buforował lub nie czytał z bufora


22

Pracuję na systemie wbudowanym z dd w wersji busybox. Próbuję przetestować wymazanie do napędu z jakiegoś zewnętrznego narzędzia, jednak dd nie czyta z dysku ponownie po wymazaniu, ale pokazuje mi buforowane dane.

Zawęziłem go do dd, ponieważ kiedy robię początkowe dd, widzę dane, ponownie uruchamiam system, aby opróżnić pamięć podręczną, wykonałem kasowanie, a potem uruchomiłem dd ponownie, wyszło ze wszystkimi zerami.

Jeśli jednak wykonam polecenie dd w ustawieniach fabrycznych, usuń dysk i ponownie uruchom program dd bez ponownego uruchamiania, nie pokaże mi wszystkich zer do momentu ponownego uruchomienia.

Przeczytałem na stronie GNU, że dd obsługuje opcję iflag, z flagą nocache, ale busybox nie obsługuje tej opcji, więc nie ma mowy.

Moje pytanie brzmi: jak zmusić dd do ponownego odczytu z dysku zamiast z pamięci podręcznej?


2
Potencjalne nitpicking, ale ... dd go nie buforuje. System jądra / dysku działa. Dlatego działa polecenie Frostschutza (które nie jest wysyłane do dd).
Hennes,

Potrzebuję tego, aby dysk nie zasypiał, zamiast czekać na uruchomienie.
neverMind9,

Odpowiedzi:


11

Możesz spróbować

sync
echo 3 > /proc/sys/vm/drop_caches

która upuszcza różnego rodzaju skrytki.

Szczegółowe informacje można znaleźć /usr/src/linux/Documentation/sysctl/vm.txtnadrop_caches .

(Uwaga: pytanie dotyczyło busybox dd, które do tej pory nie obsługuje iflag=direct).


1
Tylko uwaga: działa tylko z Linuksem. Ponadto /procsystem plików jest wyłączony w niektórych osadzonych konfiguracjach systemu Linux.

@EvanTeitelman Racja, wygląda na to, że tu jednak działa, więc zamierzam głosować i zaakceptować tę odpowiedź.
żarliwy

2
Zastanawiałem się, czy ma to jednorazowy efekt, czy trwa. Zgodnie z tym efekt jest jednorazowy.
Craig McQueen,

Spowoduje to upuszczenie pamięci podręcznej, ale nic nie robi, aby zapobiec ddich wyrzuceniu w trakcie przesyłania dużych ilości danych.
Jan Hudec

9

Na podstawie odpowiedzi @ sendmoreinfo:

dd if=/dev/device iflag=direct bs=1M

Nie wpływa na pamięć podręczną odczytu.


To działa, ale nie buforuje również tego, co jest czytane ?.
neverMind9,

1
Poprawny. To jest cel.
Ole Tange

8

Bezpośrednie we / wy (tryb otwarty O_DIRECT) powinno działać, ale twoje jądro i / lub ddmoże go nie obsługiwać.


4
Oto poprawna odpowiedź: dd if = / dev / device iflag = direct bs = 1M; nie wpływa na pamięć podręczną odczytu.
Ole Tange

1
@OleTange: Dlaczego więc nie opublikujesz tego jako własnej odpowiedzi? To hit nr 1 w Google dla „dd no cache”, a faktyczna poprawna odpowiedź jest komentarzem do jakiejś nieakceptowanej odpowiedzi ...
mic_e

5

Mały rozkwit do iflag = bezpośrednia odpowiedź; podaj też pasek postępu:

dd iflag=direct if=~/source.iso | pv | dd oflag=direct of=/dev/sdb bs=8M

Bez iflag / oflag pv zgłasza, że ​​jest skończony, a następnie wygląda na zawieszony; ale dd na urządzeniu nadal działa w pamięci podręcznej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.