Explorando Transferência De Arquivos Para Dispositivos Externos

A um tempo atrás o usuário @linuxhell trouxe um problema pertinente envolvendo transferência de arquivos para dispositivos externos, falsas estatísticas de progresso e impossibilidade de desmonte da partição mesmo após a transferência ter aparentemente terminado:

Decidi explorar o problema criando um programa de transferência de arquivos via terminal:

O projeto ainda é relativamente simples e limitado, no momento faz transferência apenas de arquivos, não diretórios inteiros. Fiquem a vontade para testar se for do interesse de vocês. :–)

OBS: Antes de vir com dúvidas aqui, por favor, ler o README do projeto, motivos, nuances do problema, como ocorre, porque, em que condições, como compilar o projeto, etc todas estas informações se encontram lá.

3 Curtidas

Importante ressaltar que esse não é problema que ocorre de forma geral! Eu participei na época do debate nesse post, mostrando inclusive q no meu computador tudo funcionava perfeitamente.

Eu explico melhor no README as nuances do problema, a princípio sob as mesmas condições o problema é sim reproduzível sempre.

Não! Não é reproduzível. Se vc ver toda a discussão verá os meus testes.

O que eu vi na discussão foram diversas situações diferentes, ou seja, a maioria não reproduziu as condições no sistema dele e no fim não compreenderam o problema. O meu projeto se comporta como esperado nestas condições sem necessitar de nenhum ajuste.

1 Curtida

Td bem vc fazer um projeto sobre isso e tals. Mas deixo claro q isso não é um problema geral e sim trata-se de casos isolados. Tanto é que eu e alguns conhecidos não temos esse problema usando Linux a muitos anos.

Amigo todos os sistemas estão cheios de problemas que alguns não experienciam e outros experienciam, vamos respeitar quem consegue reproduzir o problema e vê utilidade em um projeto que venha a explorar uma solução sem efeitos negativos, eu coloquei exemplos claros comparando o comportamento do rsync com o meu código em uma transferência simple com comportamentos claramente divergentes. Diversas pessoas conseguem reproduzir e experienciam este problema até hoje fazendo uso de soluções diversas e nem sempre ideais:

@linuxhell na época mencionou problemas com o Chrome envolvendo mudanças nos limites de dirty page, esse é apenas um dos softwares que não são compatíveis com esta solução, outro é o OBS.

De forma algum estou criticando seu projeto e concordo com vc que alguns podem sofrer de problemas e outros não. Apenas achei importante ressaltar que isso não é uma característica do Linux.

Amigo, isto é uma característica do linux, apenas nem todo mundo utiliza o sistema de forma a se deparar com este problema ou ao menos percebe ou se importa com o comportamento estranho. De resto esse problema já foi discutido em sites como lwn.net entre diversos outros artigos que vêm explorando outros problemas em torno da transferência e cópia de arquivos:

1 Curtida

Não! Desculpe mas discordo. Isso não é característica! Reforço novamente que vc leia todo o post anterior onde eu demonstrei testes e inclusive os comentários sobre o meu teste para vc verificar como se tratar de algo isolado.
Me coloco a disposição para realizar qualquer teste de transferência que deseje a fim de demonstrar como esse problema é isolado.

Tranquilo. Eu estou disposto a qualquer um me mostrar um vídeo que, sem ajustes nos limites de dirty page, ele não sofra das mesmas divergências para os comandos que estão na lista de exemplos do README, até la seguimos discordando ; --). E acrescentando, o dispositivo de origem precisa ser mais rápido que o de destino, na ordem de 3x mais, e no mínimo você precisará ter 16 GB para que sofra com os efeitos amplificados do acúmulo de dirty pages.

Okay! Vamos lá (novamente rs) Na época gravei os vídeos, mas tive que apagar do drive porq precisava de espaço.
Como vc propõe que seja feito o teste?

Pode ser com OBS, para reproduzir o problema:

  • Origem e destinos devem ter velocidades diferentes onde o destino deve ser lento (digamos um SSD e um pendrive comum).
  • arquivo transferido deve ser maior que 3 GB.
  • resultado do comando free para vermos quanta RAM você possui.
  • resultado dos comandos:
time rsync -avh --info=progress2 /origem_rapida/arquivo_teste destino_lento/arquivo_teste
$ time ( rsync -avh --info=progress2 '/home/rbenedetti/test.iso' /run/media/rbenedetti/PortableHDD_NTFS/test.iso && sync )

Se o problema não existir os dois terão de ter muito próximo do mesmo resultado.

seria bom um watch na sua dirty page também em outro terminal:
cat /proc/meminfo | grep Dirty | tr -s ’ ’ | cut -d ’ ’ -f 2

Ué?? Pelo seu titulo há um problema na transferência para dispositivos externos. E estou afirmado que eu não tenho esse problema. Porq eu devo fazer isso via terminal? Escolha o arquivo que vc n consegue copiar ai na sua maquina e eu irei gravar mostrando que na minha a copia é realizada sem nenhum tipo de problema e sem demora na remoção do dispositivo.

NOTA: Não estou aqui para testar o seu programa de copia. Estou afirmando que esse problema ai que vc tem não é geral e nem característico! Sugiro que vc upe o arquivo que vc tem problema para copiar para um pendrive e eu baixo esse arquivo e realizo a copia aqui mostrando q n irá ocorrer o problema.

porque a não ser que você tenha uma forma precisa de usar utilitários como time ou timeit para observar os efeitos de sync não vamos poder medir tempo de execução, mas também podemos observar uma versão gráfica se você quiser, dentro destas restrições com observância do dirty ratio via terminal. :–)

Eu vou gravar o vídeo. Vc vai ver tudo em sem cortes!

O problema que vc descreveu foi esse: “trouxe um problema pertinente envolvendo transferência de arquivos para dispositivos externos, falsas estatísticas de progresso e impossibilidade de desmonte da partição mesmo após a transferência ter aparentemente terminado:”

Então peço que escolha o arquivo para o teste e me informe em que sistemas de arquivos quer q eu formate o pendrive para testar. Deixo em fat32 mesmo como é o mais usando em pendrives?

Vamos observar em vídeo sem cortes se qualquer um dros problemas que vc listou irá ocorrer.
Ex: “falsas estatísticas de progresso e impossibilidade de desmonte da partição”

Eu acho que você não entendeu o problema que este projeto resolve, nem do usuário, a transferência ocorre porém como ele mencionou, o programa reporta estatísticas erradas de transferência, às vezes acaba antes que o dispositivo possa ser desmontado. mas desde que se espere o kernel realizar o writeback o arquivo chega normalmente no dispositivo.

E eu não estou pedindo para testar meu programa, eu apontei o rsync um programa tradicional de linha de comando para transferência de arquivos.

Desculpe se entendi errado. Mas é q pelo titulo entendi que havia um problema de copia de arquivos para dispositivos externos e que quando terminasse a copia eu teria que esperar um tempo pra desmontar o que nunca aconteceu comigo. Isso foi o q entendi. Se entendi errado peço desculpas.

Este ponto em particular, depende do programa utilizado, geralmente todos reportam 100% muito tempo antes de terminar a transferência também, o que é outro problema que meu projeto se propõem a resolver. O rsync é um programa que em particular tem este comportamento, dependendo da origem, destino e limites de dirty ratio, o programa termina antes que a transferência garantidamente tenha passado do cache para o disco. Por favor, leia o READM, tudo isso está bem descrito lá, o que possivelmente o usuário pode experimentar dependendo das condições.

1 Curtida

Mas eu n uso nenhum programa de terceiros pra copia. Eu faço igual no Windows ué, copio o arquivo e colo. Espero a barra de progresso completar e removo o dispositivo em seguida. É porq esse titulo realmente me deixou confuso. Ficou parecendo que há um problema ao copiar arquivos para pendrives e hd externo.
Único programa que uso para copiar é o gerenciador de arquivo mesmo que no caso do Ubuntu é o Nautilus. Assim como no Windows 10 uso o Windows Explorer.