Создание nautilus / cp / scp / rsync & ldquo; progress & rdquo; кэш-Aware

При переносе умеренно больших файлов (~ 500-800 МБ) на / с USB-диска в nautilus или с использованием (s) cp (с индикатором выполнения из http://chris-lamb.co.uk/ 2008/01/24 / can-you-get-cp-to-give-a-progress-bar-like-wget / ) или при использовании rsync ... достигнутый прогресс далеко не точный. Очевидно, размер кэша файловой системы по умолчанию в ubuntu 11.10 64bit довольно немного больше, чем для 32 бит. Как следствие, представляется, что nautilus или rsync или все, что делает копирование, что файл был полностью скопирован, когда на самом деле имеется большая часть файла, оставленного для записи, но вся эта часть была кэширована, поэтому появляется программа, в которой был записан файл (т. е. потому что он имеет, с точки зрения системных вызовов). Однако фактический выходной файл занимает 10-20 секунд, чтобы фактически заполнить. В любом случае, нужно настроить любую из этих программ, чтобы сообщить о прогрессе с точки зрения «сколько данных было записано в фактический выходной файл», а не «сколько данных было записано в операционную систему».

Мое особое раздражение заключается в том, что каждая из этих программ сообщает, что файл был написан, но затем просто зависает какое-то время, ничего не сообщая. Я подозреваю, что это связано с тем, что системный вызов «write» завершился, но системный вызов «закрыть файл» ждет, пока кеш не будет сброшен.

1
задан 16 February 2012 в 07:57

1 ответ

Я также использую ubuntu 11.10 64-bit. Вы можете использовать команду lsof для опроса и посмотреть, был ли кеш написан. Эта команда перечисляет, какие процессы / команды хранят файлы. Я не уверен, что он будет работать для кеша usb stick.

  • Я тестировал с rsync файлом ~ 2gb
  • usb stick: Bus 002 Device 004: ID 8564: 1000 (Transcend Jetflash 8gb retractable, один раздел FAT32)
  • mount показывает:
    /dev/sdd1 on /media/19D1-8868 type vfat (rw,nosuid,nodev,uid=1001,gid=1001,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
    
  • Используемая команда:
    rsync -Pr ./testfile /media/19D1-8868/test/
    

"- P" показывает прогресс.

lsof при передаче:

$ lsof +f -- /media/19D1-8868/
COMMAND   PID   USER   FD   TYPE DEVICE  SIZE/OFF NODE NAME
rsync   23132 testme  cwd    DIR   8,49      4096   33 /media/19D1-8868/test
rsync   23133 testme  cwd    DIR   8,49      4096   33 /media/19D1-8868/test
rsync   23133 testme    1u   REG   8,49 666271744  350 /media/19D1-8868/test/.testfile.2Ejgei

lsof, когда это делается:

$ lsof +f -- /media/19D1-8868/

Однако я не могу воспроизводите то, что вы говорите с помощью rsync. Я мог почти мгновенно (2-3 секунды) удалить USB с помощью опции «Безопасное удаление».

Кроме того, когда я попытался перевести с nautilus, передача застряла до «2 секунд влево», пока он передал весь файл, возможно, включая кеш, потому что светодиодный индикатор usb переставал мигать, и я мог снова почти мгновенно безопасно удалить палку.

  1. Что показывает mount в вашем случае?
  2. Вы пытались загрузить с живого компакт-диска и проверить его там?
  3. Вы пытались полностью форматировать USB-накопитель с gparted и создать новый раздел fat32?
1
ответ дан 4 August 2018 в 17:33

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

Похожие вопросы: