У меня были подобные проблемы раньше, но я не помню, как я решил это.
Когда я пытаюсь скопировать что-либо на USB-накопитель, с помощью FAT он останавливается ближе к концу, иногда на 100%. И, конечно, когда я передаю карту памяти куда-то еще, она не содержит полный файл. (файл это фильм!)
Я попытался смонтировать устройство с помощью команды -o flush, но у меня возникла та же проблема.
Кроме того, я отформатировал флешку с новым разделом FAT ...
Любая идея, что я делаю холодно?
PS Я считаю, что это не связано с ОС, то есть Debian, и я считаю, что копирование с SSD-накопителя не приводит к его зависанию.
Ответы:
Причина, по которой это происходит, заключается в том, что программа говорит «записать эти данные», а ядро Linux копирует их в буфер памяти, который ставится в очередь для перехода на диск, а затем говорит «хорошо, готово». Таким образом, программа считает, что она скопировала все. Затем программа закрывает файл, но внезапно ядро заставляет его ждать, пока этот буфер будет выгружен на диск.
Так что, к сожалению, программа не может сказать вам, сколько времени займет очистка буфера, потому что она не знает.
Если вы хотите попробовать некоторые хитрости для опытных пользователей, вы можете уменьшить размер буфера, который использует Linux, установив для параметра ядра
vm.dirty_bytes
что-то вроде15000000
(15 МБ). Это означает, что приложение не может получить больше чем 15 МБ перед его фактическим прогрессом. (Вы можете изменять параметры ядра «на лету»,sudo sysctl vm.dirty_bytes=15000000
но для того, чтобы они оставались после перезагрузки, необходимо изменить файл конфигурации, подобный/etc/sysctl.conf
вашему дистрибутиву.)Побочным эффектом является то, что ваш компьютер может иметь более низкую пропускную способность записи данных с этим параметром, но в целом я считаю полезным видеть, что программа работает долго, в то время как она пишет много данных, по сравнению с путаницей Программа, похоже, справилась со своей работой, но система сильно отстает, поскольку ядро выполняет реальную работу. Установка
dirty_bytes
разумно небольшого значения также может помочь предотвратить зависание вашей системы, когда у вас мало свободной памяти и запустить программу, которая внезапно записывает большое количество данных.Но не устанавливайте это слишком маленьким! Я использую 15 МБ для приблизительной оценки того, что ядро может сбросить буфер на обычный жесткий диск за 1/4 секунды или меньше. Это удерживает мою систему от ощущения "отставания".
источник
Старый вопрос, но кажется, что проблема все еще возникает. Установка буфера в 15 МБ, как предложено здесь , не работала на Ubuntu 19.04 и привела мою систему к полной остановке.
Я пытался скопировать файл 1,5 ГБ на пустой (недавно отформатированный) диск 16 ГБ FAT32. Я дал ему поработать около 10 минут, чтобы посмотреть, закончится ли он, но безуспешно.
Переформатирование в NTFS позволяет завершить операцию менее чем за 10 секунд. Я не знаю, почему это будет иметь значение, потому что FAT32 должен разрешать что-либо менее 2 ГБ, но, похоже, все работает нормально Не идеальное решение для дисков, которые вы хотите использовать с MacOS, но легкий обходной путь для всех других случаев использования. Я полагаю, что exFAT работал бы аналогично, но я не проверял это.
источник