Tôi có Samsung XE303C12 và tôi đã chạy Arch Linux ARM trên thẻ SD. Bảng phân vùng của thẻ SD là như vậy:
- Phân vùng nhân Chrome OS mà hạt nhân ALARM được bọc vboot chiếm.
- Phân vùng ext2 mà tôi sử dụng để định cấu hình U-Boot bất cứ khi nào nó được cài đặt vào phân vùng 1 thay vì kernel Arch Linux.
- Hệ thống tập tin gốc mà tôi đã cài đặt Arch Linux.
Một nỗ lực gần đây để cập nhật tất cả các gói cùng một lúc đã làm hỏng hệ thống tập tin gốc. Tôi thấy một số thông báo về việc flash kernel vào một số phân vùng trên thẻ SD và hệ thống tập tin không được gắn chỉ đọc hoặc đọc-ghi hoặc một cái gì đó. Tôi đã cố gắng sửa nó fsck
, điều này đã nhắc tôi nhiều lần về việc phải làm gì với inodes, nhưng một khi tôi nhận ra rằng nó có thể sẽ hỏi tôi điều này cho mỗi inode trên phân vùng, tôi đã chạy fsck -y /dev/mmcblk1p3
. Điều này chạy qua có thể vài trăm nút cho đến khi dừng lại. Tôi không thể nhớ thông báo lỗi.
Với hy vọng bảo toàn dữ liệu để phục hồi trong tương lai, tôi đang sao lưu /dev/mmcblk1p3
hệ thống tập tin FAT32 trên ổ USB bằng cách sử dụng dd
. Vì FAT32 không thể chứa các tệp lớn hơn 4 GiB, tôi đã quyết định chia nó thành các phân đoạn bằng cách sử dụng một số mã shell và vòng lặp.
Bỏ qua một vài điều, tôi đã nhận ra rằng dd
nhanh hơn khi bắt đầu quá trình (tôi đã sử dụng bs
cài đặt thành bội số lớn hơn 512 để làm cho nó nhanh hơn), vì vậy phân đoạn 64 MiB đầu tiên sẽ được ghi vào hệ thống tệp USB trong 3 giây và nó sẽ dần dần chậm hơn với mỗi lần lặp. Tôi phát hiện ra rằng điều này là do bộ đệm đĩa đầy.
Tôi tìm kiếm một cách để xóa bộ nhớ cache dd
và tôi tình cờ thấy bài đăng này trên trang web Unix Stack Exchange. Câu trả lời hàng đầu nói phải làm sync; echo 3 > /proc/sys/vm/drop_caches
. Một nhận xét về câu trả lời đó lưu ý rằng cài đặt đó không bị dính và liên kết trong nhận xét đó đã cho tôi ý tưởng để thực hiện echo 3 > /proc/sys/vm/drop_caches
trước mỗi lần lặp lại dd
. Tôi đã thử điều đó và dd
vẫn giảm tốc độ sao chép.
Giải pháp thứ hai đề cập trong câu trả lời các bài viết đầu tiên là để chạy dd
với iflag=direct
như là một cách để bỏ qua bộ nhớ cache. Tôi đã làm điều đó nhưng tôi cũng đã sử dụng oflag=direct
vì tôi nghĩ rằng bộ đệm sẽ áp dụng cho cả việc sao chép từ thẻ SD và ghi vào USB. Nhận xét này nói rằng nocache
nên được sử dụng thay vì direct
, vì vậy tôi cũng đã thử nó. Cả hai phương pháp đều có cùng mức giảm từ ~ 17 MB / s xuống ~ 1-3 MB / s.
Tôi đoán rằng tôi có thể không sử dụng các phương thức đó một cách chính xác, vì vậy có cách nào đáng tin cậy để xóa bộ đệm mỗi lần lặp lại để thực hiện dd
nhanh hơn hoặc một số cách để hoàn toàn không sử dụng bộ đệm?
2^x
byte x
có số nguyên từ 12 đến 25. Tôi đang sao chép phân vùng thẻ SD vào ổ USB.