Требуется * очень * много времени, чтобы извлечь мои флэш-накопители

3516
iago-lito

Я запускаю свежую установку на Debian 8, и мне часто приходится ждать смешного времени, прежде чем мои флэш-накопители будут извлечены (в диапазоне от 1 до 10 .. 15 минут). В течение этого времени я не могу получить доступ к диску, потому что я получаю ошибкуAn operation is already pending.

Кажется, что он не имеет ничего общего с форматом flashdrive (я пробовал FAT, ext4, NTFS), но он также запускается, когда я начинаю помещать в них файлы. (ничего тяжелого, хотя ~ 500Mb).

Что может быть причиной этой проблемы? Что я могу сделать, чтобы ускорить выброс?

3

1 ответ на вопрос

6
Mogget

Although I don't know if this is the actual explanation/solution to your question, I believe this is an issue with USB in general.

If you copy large files or many files, the USB device will deliver a message to the host saying "I am about to send you these files". The device will then asynchronously send all files and will take the time it needs to do so. This means that when you do a cp /my/flash/drive/foo.txt /home/bar/foo.txt the device will tell the operating system that files are being copied and then send the files.

The only way I know of to check if all data actually has been transferred is to enter sync after doing a command that copies/moves or deletes files on a flash drive. The sync command will then just block until the drive is finished with transferring data. After that it should be safe to unmount/eject an USB flashdrive.


[EDIT]: Check this post to watch progress of the sync operation: the number printed when you run

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

should decrease down to zero as background data transfers occur. When it's done, your sync will be completed and your flashdrive will eject.


Another common problem with ejecting USB storage devices is that atleast Debian will not allow it if there is a program, terminal or similar currently working on files/folders on that flash drive. So if you have changed directory to a folder on that flashdrive in a terminal and then try to eject the flash drive using another terminal, it will not allow that until you have changed directory to somewhere else not on the flashdrive in the first terminal.

Краткий ответ: Это занимает много времени, потому что USB-устройство все еще передает данные, которые вы скопировали, удалили, переместили или работаете, и отказывается извлекать устройство, пока оно не завершит выполнение предыдущей команды. Mogget 9 лет назад 0
Спасибо за это объяснение! Вы имеете в виду, что файлы могут все еще передаваться, даже если я закончила работу по копированию, когда хочу извлечь? Это ложь, когда индикатор выполнения после нажатия + перетаскивания или я возвращаюсь в командную строку после `cp` ?! ;) iago-lito 9 лет назад 0
Именно так! Тот факт, что команда, которую вы выполнили (cp, mv, rm или даже копирование в Windows) и она завершается, не означает, что все фактические данные были переданы. Это все еще может быть передача в фоновом режиме. Mogget 9 лет назад 1
Псих! Так что, если я хорошо понимаю, `синхронизация 'является единственным надежным способом убедиться, что все данные были переданы, потому что они возвращаются только после завершения работы. Дополнительный вопрос: тогда * когда * возвращается` cp` и * когда * Индикаторы прогресса графического интерфейса достигают «100%»? Чего они * действительно * ждут? iago-lito 9 лет назад 0
Есть и другие возможные способы проверить, сделана передача или нет, но я не знаю ни одного. Если честно, я точно не знаю, что использует ОС. Может быть, кто-то здесь знает ответ на этот вопрос. Mogget 9 лет назад 0
Посмотрите на первый ответ в этом вопросе; Это объясняет некоторые вещи, которые я не объяснил хорошо. http://askubuntu.com/questions/122113/copy-to-usb-memory-stick-really-slow Mogget 9 лет назад 1
Я действительно нашел один сейчас! Проверь мою правку :) iago-lito 6 лет назад 0