Ошибка индикатора прогресса в Linux
Когда я копирую большой файл на флэш-накопитель, индикатор выполнения очень быстро заканчивается, но затем остается таким до тех пор, пока файл действительно не будет скопирован на флэш-накопитель.
Я посмотрел в Интернете об этой проблеме, и это, похоже, не ошибка файлового менеджера, но, похоже, это ошибка Linux. Итак, мой вопрос: как это возможно, что такое удивительное ядро содержит такую досадную ошибку; и никто не исправлял это годами (даже сейчас ошибка все еще происходит).
PS: я использую Ubuntu 15.10 и 16.04 с файловым менеджером по умолчанию (nautilus)
1 ответ
Я нашел проблему, и это не в файловом менеджере.
Временное решение
Выполните эту команду при каждой загрузке:
cat 15728640 > /proc/sys/vm/dirty_bytes
Постоянное решение
Добавьте эту строку в конец файла /etc/sysctl.conf
:
vm.dirty_bytes=15728640
объяснение
Происходит то, что ядро передает содержимое файла в буферизованном пространстве в первичной памяти (RAM), и это пространство чрезвычайно быстро.
Таким образом, файловый менеджер считает, что содержимое файла было полностью скопировано в место назначения, и пытается завершить копирование файла. В этот момент файловый менеджер застрял, потому что ядро теперь действительно копирует файл на целевой носитель (жесткий диск, флэш-накопитель...). Он застревает до тех пор, пока файл не будет полностью скопирован на целевой носитель.
Решение состоит в том, чтобы ограничить пространство этого буферизованного пространства, скажем, 15Mb
заставить ядро сбрасывать содержимое буферизованного пространства на носитель назначения каждый раз, когда 15Mb
предел пространства достигнут. Таким образом, файловый менеджер не получает неверную информацию о прогрессе.