Tại sao đồng bộ hóa rất quan trọng khi tạo một thanh usb linux có thể khởi động?


15

Từ Wiki Linux Wiki: https://wiki.archlinux.org/index.php/USB_flash_installation_media

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[...] Đỗ không bỏ lỡ đồng bộ để hoàn thành trước khi kéo ổ đĩa USB.

Tôi muốn biết

  • Nó làm gì?
  • Hậu quả là gì nếu bỏ đi?

Ghi chú

ddlệnh được sử dụng với tùy chọn status=progress:

tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync

Hoặc sử dụng pvđể tiến bộ

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync

Câu trả lời:


19

Việc ddkhông bỏ qua bộ đệm đĩa nhân khi nó ghi vào thiết bị, do đó một số dữ liệu có thể chưa được ghi vào USBthanh khi ddhoàn thành. Nếu bạn rút phích cắm của mình USBtại thời điểm đó, nội dung trên USBthanh sẽ không nhất quán. Do đó, hệ thống của bạn thậm chí có thể không khởi động được từ USBthanh này .

Sync xóa mọi dữ liệu vẫn còn trong bộ nhớ cache vào thiết bị.

Thay vì gọi, syncbạn có thể sử dụng fdatasync ddtùy chọn chuyển đổi:

fdatasync

vật lý ghi dữ liệu tập tin đầu ra trước khi kết thúc

Trong trường hợp của bạn, lệnh sẽ là:

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

Việc conv=fdatasyncthực hiện ddcuộc gọi fdatasync()hệ thống một cách hiệu quả khi kết thúc chuyển ngay trước khi ddthoát (tôi đã kiểm tra điều này với ddcác nguồn của).

Điều này xác nhận rằng ddsẽ không bỏ qua cũng không xóa bộ nhớ cache trừ khi được hướng dẫn rõ ràng để làm như vậy.


Cảm ơn sự đóng góp của bạn, tuy nhiên tôi không chắc rằng tuyên bố này là chính xác Việc ddkhông bỏ qua bộ đệm đĩa nhân khi nó ghi vào thiết bị . Khi ghi vào một tệp (trên lớp hệ thống tệp của kernel), mọi thứ sẽ được lưu trữ. Tuy nhiên, tôi lo ngại về việc viết thư cho các thiết bị. Vui lòng cung cấp một nguồn cho tuyên bố đó nếu bạn có thể, bởi vì đó là vấn đề quan trọng của câu hỏi này. Nếu đúng, nó sẽ cung cấp một lý do hợp lệ để chạy syncsau khi vận hành ddthiết bị .
Jonathan Komar

Có nó được lưu trữ. Bộ nhớ đệm xảy ra bên trong cơ sở hạ tầng thiết bị của kernel. Các hoạt động tập tin chính nó không được lưu trữ. giao diện thiết bị khối bên dưới thực hiện rút tiền. nguồn: lxr.free-electrons.com/source/block/blk-flush.c
Serge

@ macmadness86 xem câu trả lời được cập nhật
Serge

7
Tôi sử dụng trước oflag=sync, do đó, tiến trình tạo ra tốc độ truyền thực sự chứ không phải tốc độ lưu trong bộ nhớ cache (vì vậy sẽ ổn định 10MB / s thay vì một giây 100MB / s và sau đó là 10 giây).
Bart Polot

Viết vào một thiết bị khối bỏ qua VFS hoàn toàn. Nói cách khác: việc ghi vào một tập tin có thể được lưu vào bộ nhớ cache của kernel (và thường là vậy) nhưng việc ghi vào một thiết bị không bao giờ được lưu vào bộ nhớ cache của kernel (và nó không thể).
Eric

0

Từ trang hướng dẫn đồng bộ hóa (1): "đồng bộ hóa - Đồng bộ hóa ghi vào bộ nhớ cache vào bộ nhớ liên tục". Về cơ bản syncđảm bảo rằng tất cả dữ liệu của bạn được ghi vào thanh từ bộ đệm.


Tôi không thấy nơi nào trong câu hỏi của bạn xuất hiện phần về ánh sáng được chiếu lên.
schaiba
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.