Чи можу я спостерігати за ходом операції синхронізації?


103

Я скопіював великий файл на USB-диск, встановлений на системі Linux, з асинхронією. Це повертається до командного рядка порівняно швидко, але коли я набираю sync, звичайно, все це має перейти на диск, і це займе багато часу.

Я розумію, що це буде повільно, але чи є десь, де я можу спостерігати, як лічильник опускається до нуля? Спостереження buffersв topне допомагає.


Докладніші відомості див: lwn.net/Articles/572911
lanoxx

Відповіді:


162

Дивлячись, /proc/meminfoбуде показано, що Dirtyчисло зменшується з часом, коли всі дані згортаються; деякі з них можуть також розпливатися Writeback. Це буде підсумком для всіх пристроїв, але у тих випадках, коли один пристрій у системі набагато повільніше, ніж решта, ви зазвичай опиняєтесь там, де все в цій черзі пов'язане з ним. Ймовірно, ви знайдете Dirtyчисло великим, коли ви запускаєте, і syncзакінчується приблизно в той же час, коли воно наближається до 0. Спробуйте це, щоб отримати інтерактивний дисплей:

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

За допомогою звичайних дисків я зазвичай можу ігнорувати Writeback, але я не впевнений, чи частіше він залучається до шляху передачі USB. Якщо він просто відскакує вгору і вниз, без чіткої тенденції до цього, ви, ймовірно, можете просто подивитися на Dirtyчисло.


4
У моїй системі режим зворотного запису залишається в декількох мегах, аж до кінця, коли Брудний порожній, і в цей момент він також починає знижуватися.
mattdm

24

Ви можете переглянути /sys/block/<device>/statфайл відповідного пристрою під час синхронізації. У 9- му стовпці буде вказано кількість запитів під час польоту на пристрої, яка повинна опуститися до нуля, коли синхронізація виконана.
Не знаєте способу перевести це на кілька байтів, але це повинно дати вам приблизне уявлення про те, скільки "матеріалів" ще очікується.

Для отримання додаткової інформації див файл stat.txt в документації на ядро. (У inflightцьому каталозі в моїй системі також є файл, який виглядає так, що він може містити запити на читання і запис під час польоту, але я не можу знайти документи для цього.)


3
Просто для зручності, поєднуючи ідею з іншої відповіді:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
Для моєї USB-палички ця тенденція коливається близько 150 протягом усієї тривалості операції копіювання та syncпісля неї. Дійсно до 0, але лише в самому кінці. Це робить іншу відповідь більш корисною для нетерплячого спостереження за прогресом.
mattdm

1
(Хоча теоретично мені подобається дивитись лише на відповідний пристрій, а не на загальносистемну інформацію.)
mattdm

Чи є спосіб отримати кількість байтів, записаних (синхронізованих, розмитих не під час польоту) або кешованих, щоб записати на диск? Якби у мене був розмір кеша запису на диск, я міг би використовувати його duдля обчислення реальних даних, що синхронізуються на диску.
недобре

10

Використовуючи відповідь Грега, ви можете просто syncбігти у фоновому режимі, відображаючи стан брудного блоку в пам'яті.

Щоб досягти цього, просто запустіть цю команду:

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

Це буде дзвонити syncна задньому плані під час виконання watchспереду. Коли syncкоманда буде завершена (приблизно, коли розмір блоку Dirty досяг 0), у вас з'явиться результат, який виглядає приблизно так:

1]  + 27260 done        sync

Це означає, що команда закінчена, і ви можете вбити watchкоманду за допомогою Ctrl+ C.


BTW: Я знаю, що це старе питання, але це перше, що з’являється в Google, коли хтось його шукає, і я хотів додати знайдене рішення.
jflemieux

1
Занадто погана синхронізація / umount не отримала оновлень з ядра, і вона могла надрукувати такі речі безпосередньо, якщо їй сказали.
mcr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.