Bisakah saya menonton kemajuan operasi `sinkronisasi`?

103

Saya telah menyalin file besar ke disk USB yang dipasang pada sistem Linux dengan async. Ini kembali ke prompt perintah relatif cepat, tetapi ketika saya mengetik sync, tentu saja, semuanya harus pergi ke disk, dan itu membutuhkan waktu lama.

Saya mengerti bahwa ini akan lambat, tetapi apakah ada tempat di mana saya bisa menonton penghitung turun ke nol? Menonton buffersdi toptidak membantu.

mattdm
sumber
untuk informasi lebih lanjut lihat: lwn.net/Articles/572911
lanoxx

Jawaban:

162

Melihat /proc/meminfoakan menunjukkan Dirtyjumlah menyusut dari waktu ke waktu karena semua data menggulung; beberapa di antaranya mungkin juga ikut tumpah Writeback. Itu akan menjadi ringkasan terhadap semua perangkat, tetapi dalam kasus di mana satu perangkat pada sistem jauh lebih lambat daripada yang lain, Anda biasanya akan berakhir di mana segala sesuatu dalam antrian terkait dengan itu. Anda mungkin akan menemukan Dirtyangka besar ketika Anda memulai dan syncselesai pada waktu yang sama ketika mendekati 0. Coba ini untuk mendapatkan tampilan interaktif:

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

Dengan disk biasa saya biasanya dapat mengabaikan Writeback, tapi saya tidak yakin apakah itu lebih sering terlibat dalam jalur transfer USB. Jika hanya memantul ke atas dan ke bawah tanpa tren yang jelas, Anda mungkin bisa melihat Dirtyangkanya.

Greg Smith
sumber
4
Pada sistem saya, writeback tetap berada pada beberapa MB hingga tepat di dekat akhir, ketika Dirty kosong, di mana titik itu mulai turun juga.
mattdm
24

Anda dapat melihat /sys/block/<device>/statfile untuk perangkat yang sesuai saat Anda menyinkronkan. Kolom ke- 9 akan menunjukkan jumlah permintaan dalam penerbangan pada perangkat, yang seharusnya turun ke nol ketika sinkronisasi dilakukan.
Tidak tahu cara menerjemahkannya ke beberapa byte, tetapi harus memberi Anda gambaran kasar tentang berapa banyak "barang" yang masih tertunda.

Lihat file stat.txt dalam dokumentasi kernel untuk informasi lebih lanjut. (Ada juga inflightfile di direktori itu di sistem saya yang sepertinya berisi permintaan baca dan tulis dalam penerbangan, tetapi saya tidak dapat menemukan dokumen untuk itu.)

Tikar
sumber
3
Hanya untuk referensi praktis, menggabungkan ide dari jawaban lain:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm
4
Untuk usb stick saya, ini cenderung berkisar sekitar 150 selama durasi operasi penyalinan dan syncsesudahnya. Itu pergi ke 0, tetapi hanya di akhir. Itu membuat jawaban yang lain lebih berguna untuk tidak sabar mengawasi kemajuan.
mattdm
1
(Meskipun secara teori saya lebih suka melihat perangkat yang tepat daripada info seluruh sistem.)
mattdm
Apakah ada cara untuk mendapatkan jumlah byte yang ditulis (disinkronkan, disiram tidak dalam penerbangan) atau di-cache untuk ditulis ke drive? Jika saya memiliki ukuran cache-tulis per drive saya bisa menggunakannya dengan duuntuk menghitung data nyata yang disinkronkan pada drive.
unfa
10

Dengan menggunakan jawaban Greg, Anda dapat syncmenjalankan di latar belakang sambil menampilkan status blok Kotor di memori.

Untuk mencapai ini, jalankan perintah ini:

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

Ini akan memanggil syncdi latar belakang saat mengeksekusi watchdi depan. Ketika syncperintah akan selesai (sekitar ketika ukuran blok Kotor telah mencapai 0), Anda akan memiliki output yang terlihat seperti ini:

1]  + 27260 done        sync

Ini berarti bahwa perintah telah selesai dan Anda dapat membunuh watchperintah dengan Ctrl+ C.

jflemieux
sumber
BTW: Saya tahu ini adalah pertanyaan lama, tetapi ini adalah pertanyaan pertama yang muncul di Google ketika seseorang mencarinya, dan saya ingin menambahkan solusi yang saya temukan.
jflemieux
1
Sinkronisasi / umount yang terlalu buruk tidak mendapatkan pembaruan dari kernel dan dapat mencetak hal-hal semacam ini secara langsung jika diminta.
mcr