Paksa dd untuk tidak melakukan cache atau tidak membaca dari cache


22

Saya sedang mengerjakan sistem tertanam dengan versi busybox dari dd. Saya mencoba untuk menguji erase ke drive dari beberapa utilitas luar, namun dd tidak membaca dari disk lagi setelah menghapus, tetapi menunjukkan kepada saya data yang di-cache.

Saya mempersempitnya menjadi dd seperti ketika saya melakukan dd awal, melihat data, restart sistem saya untuk membersihkan cache, melakukan penghapusan, dan kemudian menjalankan dd lagi muncul dengan semua nol.

Namun, jika saya melakukan dd pada pengaturan pabrik, menghapus drive, dan melakukan dd lagi tanpa me-restart itu tidak akan menunjukkan kepada saya semua nol sampai restart.

Saya telah membaca di manual GNU bahwa dd mendukung iflag opt, dengan flag nocache, tetapi busybox tidak mendukung opsi itu sehingga tidak ada pertanyaan.

Pertanyaan saya adalah bagaimana saya bisa memaksa dd untuk membaca dari disk lagi daripada dari cache?


2
Kemungkinan nitpicking, tapi ... dd tidak menyimpannya. Sistem kernel / disk tidak. Inilah sebabnya mengapa perintah Frostschutz (yang tidak dapat dikirim ke dd) berfungsi.
Hennes

Saya perlu ini untuk menjaga drive tetap terjaga daripada menunggu untuk berputar.
neverMind9

Jawaban:


11

Kamu bisa mencoba

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

yang menjatuhkan semua jenis cache.

Untuk detail lihat /usr/src/linux/Documentation/sysctl/vm.txtdi drop_caches.

(Catatan: pertanyaannya adalah tentang busybox dd yang sampai saat ini masih tidak mendukung iflag=direct.)


1
Hanya sebuah catatan: itu hanya bekerja dengan Linux. Juga, sistem /procfile dinonaktifkan di beberapa konfigurasi Linux yang tertanam.

@ EvanTeitelman Benar, sepertinya berfungsi di sini, jadi saya akan menjawab dan menerima jawaban ini.
bersemangat

2
Saya bertanya-tanya apakah ini memiliki efek sekali saja, atau sedang berlangsung. Menurut ini , efeknya sekali saja.
Craig McQueen

Ini akan menjatuhkan cache, tetapi tidak melakukan apa pun untuk mencegah ddmencemari mereka dalam proses jika mentransfer sejumlah besar data.
Jan Hudec

9

Berdasarkan jawaban @ sendmoreinfo:

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

Itu tidak mempengaruhi read-cache.


Itu bekerja, tetapi apakah itu juga tidak men-cache apa yang sedang dibaca?
neverMind9

1
Benar. Itulah tujuannya.
Ole Tange

8

I / O langsung (mode terbuka O_DIRECT) harus berfungsi, tetapi kernel Anda dan / atau ddmungkin tidak mendukungnya.


4
Ini adalah jawaban yang tepat: dd if = / dev / device iflag = direct bs = 1M; itu tidak mempengaruhi read-cache.
Ole Tange

1
@OleTange: Mengapa Anda tidak memposting ini sebagai jawaban Anda sendiri? Ini adalah hit # 1 di google untuk "dd no cache", dan jawaban yang benar sebenarnya ada di komentar untuk beberapa jawaban yang tidak diterima ...
mic_e

5

Sedikit berkembang ke iflag = jawaban langsung; sediakan juga progress bar:

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

Tanpa iflag / oflag laporan pv selesai dan kemudian tampak seperti digantung; tetapi dd ke perangkat masih bekerja pada cache.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.