Я скопировал большой файл на USB-диск, смонтированный в системе Linux с помощью async. Это возвращает командную строку относительно быстро, но когда я печатаю, все sync
, конечно, должно идти на диск, и это занимает много времени.
Я понимаю, что это будет медленно, но есть ли где-нибудь, где я могу наблюдать, как счетчик падает до нуля? Смотреть buffers
в top
не помогает.
linux
filesystems
io
async
mattdm
источник
источник
Ответы:
Глядя на
/proc/meminfo
это покажетDirty
число с течением времени, как все данные спулинга; часть из этого может пролитьсяWriteback
также. Это будет сводка по всем устройствам, но в тех случаях, когда одно устройство в системе намного медленнее остальных, вы, как правило, в конечном итоге окажетесь там, где все в этой очереди связано с ним. Вы, вероятно, найдетеDirty
большое число, когда начнете, иsync
заканчивает примерно в то же время, когда оно приближается к 0. Попробуйте получить интерактивный дисплей:С обычными дисками я обычно могу проигнорировать
Writeback
, но я не уверен, чаще ли он задействован в пути передачи USB. Если он просто подпрыгивает вверх и вниз без четкой тенденции к нему, вы, вероятно, можете просто посмотреть наDirty
число.источник
Вы можете посмотреть
/sys/block/<device>/stat
файл для соответствующего устройства во время синхронизации. В 9- м столбце будет указано количество запросов в полете на устройстве, которое должно быть сведено к нулю после завершения синхронизации.Не знаю, как перевести это в число байтов, но оно должно дать вам приблизительное представление о том, сколько «вещей» еще не принято.
Посмотрите файл stat.txt в документации ядра для получения дополнительной информации. (В
inflight
моей системе также есть файл в этом каталоге, который, похоже, может содержать запросы на чтение и запись в полете, но я не могу найти документы для этого.)источник
watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
sync
после нее. Это идет к 0, но только в самом конце. Это делает другой ответ более полезным для нетерпеливого наблюдения за прогрессом.du
для вычисления реальных данных, которые синхронизируются на диске.Используя ответ Грега, вы можете просто
sync
работать в фоновом режиме, отображая состояние блока Dirty в памяти.Для этого просто запустите эту команду:
Это вызовет
sync
в фоновом режиме при выполненииwatch
в передней части. Когдаsync
команда будет завершена (примерно когда размер блока Dirty достигнет 0), вы получите вывод, который выглядит следующим образом:Это означает, что команда завершилась, и вы можете убить
watch
команду с помощью Ctrl+ C.источник