Tornando o nautilus / cp / scp / rsync “progresso” em cache-aware

1

Ao transferir arquivos moderadamente grandes (~ 500-800 MB) para / de um disco USB no nautilus, ou usando (s) cp (com barra de progresso de link ), ou ao usar o rsync ... o progresso relatado é longe de ser preciso. Evidentemente, o tamanho do cache do sistema de arquivos padrão no Ubuntu 11.10 64 bits é um pouco maior do que para 32 bits. Como conseqüência, parece ao nautilus ou rsync ou o que está fazendo a cópia que o arquivo foi completamente copiado, quando na verdade há uma grande parte do arquivo que resta para gravar, mas toda a parte está em cache, por isso aparece para o programa que o arquivo foi escrito (ou seja, porque tem, a partir da perspectiva de chamadas do sistema). No entanto, o arquivo de saída real leva uns bons 10 a 20 segundos a mais para ser preenchido. Existe alguma maneira de ajustar qualquer um desses softwares para relatar o progresso em termos de "quantos dados foram gravados no arquivo de saída real" em vez de "quantos dados foram gravados no sistema operacional".

Meu aborrecimento particular é que cada um desses programas relata que o arquivo foi escrito, mas depois fica pendente por um tempo, não relatando nada. Eu suspeito que isso é porque a chamada de sistema "gravação" foi concluída, mas a chamada de sistema "fechar arquivo" está aguardando o cache para liberar.

    
por cheshirekow 16.02.2012 / 02:57

1 resposta

1

Eu também uso o Ubuntu 11.10 de 64 bits. Você pode usar o comando lsof para pesquisar e ver se o cache foi gravado. Este comando lista quais processos / comandos mantêm arquivos abertos. Não tenho certeza se isso funcionará para o cache USB.

  • testei com rsync a ~ transferência de arquivo de 2 gb
  • pen drive: Barramento 002 Dispositivo 004: ID 8564: 1000 (Transcend Jetflash 8gb retrátil, uma partição FAT32)
  • O comando

    mount mostra:

    /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)
    
  • Comando usado:

    rsync -Pr ./testfile /media/19D1-8868/test/
    

"- P" mostra o progresso.

lsof durante a transferência:

$ 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 quando terminar:

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

No entanto, eu não posso reproduzir o que você diz com rsync . Eu poderia quase instantaneamente (2-3 segundos) remover o usb usando a opção "Remover com segurança".

Além disso, quando tentei transferir com nautilus , a transferência ficou presa a "2 segundos restantes", até que ela transferiu todo o arquivo, provavelmente incluindo o cache porque a luz do led do usb parou de piscar e eu pude remover quase instantaneamente com segurança o pau.

  1. O que mount mostra no seu caso?
  2. Você tentou inicializar a partir de um CD ao vivo e testá-lo lá também?
  3. Você tentou formatar completamente o pendrive com o gparted e criar uma nova partição fat32?
por Savvas Radevic 16.02.2012 / 03:58