Tôi có thể xem tiến trình của hoạt động `sync` không?


103

Tôi đã sao chép một tệp lớn vào đĩa USB được gắn trên hệ thống Linux không đồng bộ. Điều này trở lại một dấu nhắc lệnh tương đối nhanh chóng, nhưng khi tôi gõ sync, tất nhiên, tất cả phải vào đĩa, và điều đó mất một thời gian dài.

Tôi hiểu rằng nó sẽ chậm, nhưng có nơi nào tôi có thể xem một bộ đếm xuống không? Xem bufferstrong topkhông giúp đỡ.


để biết thêm thông tin, xem: lwn.net/Articles/572911
lanoxx

Câu trả lời:


162

Nhìn vào /proc/meminfosẽ cho thấy Dirtysố lượng thu hẹp theo thời gian khi tất cả các dữ liệu cuộn ra; một số trong đó có thể tràn vào Writebacklà tốt. Đó sẽ là một bản tóm tắt đối với tất cả các thiết bị, nhưng trong trường hợp một thiết bị trên hệ thống chậm hơn nhiều so với phần còn lại, bạn sẽ thường kết thúc mọi thứ trong hàng đợi đó có liên quan đến nó. Bạn có thể sẽ tìm thấy Dirtysố lượng lớn khi bạn bắt đầu và synckết thúc về cùng thời điểm nó đến gần 0. Hãy thử điều này để có được màn hình tương tác:

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

Với các đĩa thông thường tôi thường có thể bỏ qua Writeback, nhưng tôi không chắc liệu nó có liên quan nhiều hơn đến đường dẫn truyền USB không. Nếu nó chỉ nảy lên xuống mà không có xu hướng rõ ràng với nó, có lẽ bạn chỉ cần nhìn vào con Dirtysố.


4
Trên hệ thống của tôi, writ trở lại ở một vài megs cho đến khi gần cuối, khi Dirty trống, tại thời điểm đó nó cũng bắt đầu đi xuống.
mattdm

24

Bạn có thể xem /sys/block/<device>/stattệp cho thiết bị phù hợp trong khi bạn đang đồng bộ hóa. Cột thứ 9 sẽ cho biết số lượng yêu cầu trên chuyến bay trên thiết bị, sẽ giảm xuống 0 khi quá trình đồng bộ hóa được thực hiện.
Không biết cách dịch nó sang một số byte, nhưng nó sẽ cung cấp cho bạn một ý tưởng sơ bộ về bao nhiêu "công cụ" vẫn đang chờ xử lý.

Xem tệp stat.txt trong tài liệu kernel để biết thêm thông tin. (Ngoài ra còn có một inflighttệp trong thư mục đó trên hệ thống của tôi, có vẻ như nó có thể chứa các yêu cầu đọc và ghi trên máy bay, nhưng tôi không thể tìm thấy tài liệu cho điều đó.)


3
Chỉ để tham khảo tiện dụng, kết hợp một ý tưởng từ một câu trả lời khác:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
Đối với thanh usb của tôi, nó có xu hướng di chuột khoảng 150 trong suốt thời gian hoạt động sao chép và syncsau đó. Nó đi về 0, nhưng chỉ ở cuối. Điều đó làm cho câu trả lời khác hữu ích hơn cho sự thiếu kiên nhẫn theo dõi tiến trình.
mattdm

1
(Mặc dù trên lý thuyết tôi chỉ thích nhìn vào thiết bị phù hợp hơn là thông tin toàn hệ thống.)
mattdm

Có cách nào để có được số byte được ghi (được đồng bộ hóa, không được lưu trong chuyến bay) hoặc được lưu vào bộ nhớ cache để ghi vào ổ đĩa không? Nếu tôi có kích thước ghi bộ đệm trên mỗi ổ đĩa, tôi có thể sử dụng nó duđể tính toán dữ liệu thực được đồng bộ hóa trên ổ đĩa.
unfa

10

Bằng cách sử dụng câu trả lời của Greg, bạn có thể chỉ cần syncchạy trong nền trong khi hiển thị trạng thái của khối Bẩn trong bộ nhớ.

Để đạt được điều này, chỉ cần chạy lệnh này:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

Điều này sẽ gọi synctrong nền trong khi thực hiện watchở phía trước. Khi synclệnh sẽ kết thúc (khoảng khi kích thước của khối Dirty đạt 0), bạn sẽ có một đầu ra trông như thế này:

1]  + 27260 done        sync

Điều này có nghĩa là lệnh đã kết thúc và bạn có thể giết watchlệnh bằng Ctrl+ C.


BTW: Tôi biết đây là một câu hỏi cũ, nhưng đây là câu hỏi đầu tiên xuất hiện trên Google khi ai đó tìm kiếm nó và tôi muốn thêm giải pháp tôi tìm thấy.
jflemieux

1
Đồng bộ hóa quá tệ / umount đã không nhận được các bản cập nhật từ kernel và có thể in trực tiếp loại nội dung này nếu được yêu cầu.
mcr
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.