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

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

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

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

1 ответ

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

  • Я протестировал с rsync передачу файла ~ 2 ГБ
  • USB-флешка: шина 002 Устройство 004: ID 8564: 1000 (Transcend Jetflash 8 ГБ, убирающийся, один раздел 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" показывает прогресс. [+1121]

После передачи:

$ 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 +f -- /media/19D1-8868/

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

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

  1. Что показывает mount в вашем случае?
  2. Вы пытались загрузиться с живого компакт-диска и проверить его там?
  3. Вы пытались полностью отформатировать usb придерживаться gparted и создать новый раздел fat32?
0
ответ дан 16 February 2012 в 05:57

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

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