Ошибка индикатора прогресса в 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 предел пространства достигнут. Таким образом, файловый менеджер не получает неверную информацию о прогрессе.

Другие вопросы по тегам