Buộc dd không lưu vào bộ đệm hoặc không đọc từ bộ đệm


22

Tôi đang làm việc trên một hệ thống nhúng với phiên bản bận rộn của dd. Tôi đang cố kiểm tra xóa ổ đĩa từ một số tiện ích bên ngoài, tuy nhiên dd không đọc lại từ đĩa sau khi xóa, nhưng hiển thị cho tôi dữ liệu được lưu trong bộ nhớ cache.

Tôi đã thu hẹp nó xuống dd như khi tôi thực hiện một dd ban đầu, xem dữ liệu, khởi động lại hệ thống của tôi để xóa bộ đệm, xóa và sau đó chạy lại dd với tất cả các số không.

Tuy nhiên, nếu tôi thực hiện dd trên cài đặt gốc, xóa ổ đĩa và thực hiện lại dd mà không khởi động lại, nó sẽ không hiển thị cho tôi tất cả các số không cho đến khi khởi động lại.

Tôi đã đọc trong trang chủ GNU rằng dd hỗ trợ iflag opt, với cờ nocache, nhưng busybox không hỗ trợ tùy chọn đó nên không có vấn đề gì.

Câu hỏi của tôi là làm thế nào tôi có thể buộc dd đọc lại từ đĩa chứ không phải từ bộ đệm?


2
Nitpicking tiềm năng, nhưng ... dd không lưu trữ nó. Hệ thống kernel / đĩa nào. Đây là lý do tại sao lệnh của Frostschutz (không nhận được gửi đến dd) hoạt động.
Hennes

Tôi cần điều này để giữ cho ổ đĩa tỉnh táo thay vì chờ đợi để quay lên.
neverMind9

Câu trả lời:


11

Bạn có thể thử

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

Mà thả tất cả các loại cache.

Để biết chi tiết xem /usr/src/linux/Documentation/sysctl/vm.txttrên drop_caches.

(Lưu ý: câu hỏi là về dd hộp thư đến ngày vẫn không hỗ trợ iflag=direct.)


1
Chỉ cần một lưu ý: chỉ hoạt động với Linux. Ngoài ra, /prochệ thống tập tin bị vô hiệu hóa trong một số cấu hình nhúng của Linux.

@EvanTeitelman Đúng vậy, có vẻ như nó hoạt động ở đây, vì vậy tôi sẽ nâng cấp và chấp nhận câu trả lời này.
hăng hái

2
Tôi tự hỏi nếu điều này có một hiệu ứng một lần, hoặc đang diễn ra. Theo đó , hiệu quả là một lần.
Craig McQueen

Điều này sẽ làm giảm bộ nhớ cache, nhưng không làm gì cả để ngăn chặn ddchúng trong quá trình xử lý nếu chuyển một lượng lớn dữ liệu.
Jan Hudec

9

Dựa trên câu trả lời của @ sendmoreinfo:

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

Nó không ảnh hưởng đến bộ đệm đọc.


Điều đó hoạt động, nhưng nó cũng không lưu trữ những gì đang đọc?.
neverMind9

1
Chính xác. Đó là mục tiêu.
Ole Tange

8

I / O trực tiếp (chế độ mở O_DIRECT) sẽ hoạt động, nhưng kernel của bạn và / hoặc ddcó thể không hỗ trợ nó.


4
Đây là câu trả lời đúng: dd if = / dev / device iflag = direct bs = 1M; nó không ảnh hưởng đến bộ đệm đọc.
Ole Tange

1
@OleTange: Tại sao bạn không đăng bài này dưới dạng câu trả lời của riêng bạn? Đây là lần truy cập số 1 trên google cho "dd no cache" và câu trả lời đúng thực sự nằm trong một nhận xét cho một số câu trả lời không được chấp nhận ...
mic_e

5

Một khởi sắc nhỏ cho câu trả lời iflag = trực tiếp; cung cấp một thanh tiến trình quá:

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

Không có iflag / oflag, pv báo cáo nó đã hoàn thành và sau đó trông giống như nó bị treo; nhưng dd đến thiết bị vẫn hoạt động trên bộ đệm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.