dica: Discos USB, perda de ficheiros, e Sync

Iniciado por nitrofurano, 18 de Setembro de 2007, 09:27

tópico anterior - próximo tópico

nitrofurano


Escrevi este artigo baseado na minha experiência de alguns meses com o Ubuntu Linux 7.04 (Feisty Fawn).

Quando tenho transferido ficheiros para discos usb (memorias Flash, discos ATA, etc.), com alguma regularidade tenho tido a má experiencia de perder ficheiros.   É uma situação que tem sido um bocado incomoda para mim, e acredito mais ainda a todos os mais novatos que eu do mundo do Linux, que vieram agora depois de anos a sofrer desnecessariamente com o ms-Windows, se depararem agora com um problema destes...

A situação se passa quando tentamos transferir ficheiros, e no meio do procedimento pode acontecer uma de varias eventualidades:
- a electricidade ir abaixo;
- a conecção usb (cabo, placas, perifericos, hubs, etc.) não ser a melhor, ou estar demasiado sobrecarregada;
- por descuido ou negligência alguem se esbarrar no cabo ou no disco (esbarrões, tropeções, pontapés, espirros (?), e afins...);
- o sistema por alguma razão ir abaixo ou bloquear (má configuração, problema de hardware, sobrecarga de tarefas, etc.);
- ao tentar ejectar o disco usb depois de centenas de milhar de ficheiros, o eject demorar muito mais tempo que o previsto, ao ponto de acharmos que o sistema bloqueou, e forçarmos um reset ao computador;
- num perfeitamente evitável ataque de stress (que são comuns em alguns muito lamentáveis ambientes laborais), começarmos a partir tudo que vemos pela frente, e lá se vão os discos usb pelo caminho...;
- etc...

E quando vemos por fim, todos os ficheiros que achávamos ter transferido, afinal desapareceram definitivamente, como se tivéssemos arrastado tudo para o lixo e o esvaziássemos...

O problema é que parece que, por questões de performance, quando gravamos ou movemos um ficheiro no Linux, só os dados são transferidos, mas a informação de directório de ficheiros permanece na cache até esses discos serem ejectados ou o computador ser desligado.  E claro, pode parecer um procedimento um bocado estúpido termos de ejectar e encaixar a conecção do disco usb toda a vez que transferimos ficheiros, para além do risco de danificarmos o encaixe usb - afinal leis de Murphy existem...

E só agora, depois de perguntar a amigos mais experientes do Linux, que o Eject chama o comando unix 'eject', que por sua vez chama o comando 'sync' antes de permitir a remoção do disco USB.  E pelos vistos, o comando 'sync' permite atualizar os discos com a informação que ainda está na cache, e já deveria estar no disco a muito tempo... (pois, se acontecesse algo, perderiamos tudo que tivessemos transferido...)

A solução temporária e útil que encontrei no Gnome (enquanto as comunidades de desenvolvimento do Gnome e do Linux não encontrarem ideias melhores), é de meter um icone na barra de ferramentas (um 'custom launcher' no 'panel' do Gnome)

Fazemos então da seguinte forma:
- com o botão direito em cima do 'panel', escolhemos 'Add to Panel...' do menu de contexto;
- clicamos então no botão 'Custom Application Launcher';
- aparece uma janela chamada 'Create Launcher' - em 'Command:' metemos 'gksudo sync' - podemos meter o mesmo em 'Name:' ou algo parecido
- clicando em 'No Icon', podemos escolher um ícone à nossa escolha, para um mais rapido reconhecimento visual
- e clicamos em 'Ok'

E agora toda a vez que transferirmos ficheiros para discos usb e não os quisermos perder, podemos toda a vez clicar neste botão, sem termos de ejectar permanentemente esses discos, ou entrarmos constantemente 'sudo sync' na janela da consola.  O único pequeno incómodo é de, como este botão utiliza o comando 'gksudo', a janela a pedir a password de root poder aparecer com alguma regularidade.





fabiovalinhos

Que bacana Nitro, parabéns.

Não conhecia este comando sync.
Lembro-me de alguém que estava com está dúvida/problema.

Infelizmente nÃo tenho um drive externo para fazer esse teste.

Valeu.
7355
sudo dpkg no seu quadrado ...sudo dpkg no seu quadrado ...
http://www.youtube.com/watch?v=tHmrq0FtczM

Expect

Boa dica mas como eu disse no outro topico o USB não é uma tecnologia acabada mas com o tempo que ja tem n penso que venha a melhorar de forma a resolver esse problema.

Fica bem ;D
GNU/Linux User #317824
Linux uma alternativa, não uma substituição.
http://hamacker.wordpress.com/script-ubuntu-perfeito/

Expect

Oi

Ja tive a experimentar a dica e funciona mt bem e aconselho os amigos que tiverem a usar discos USB a utilizarem esta dica pq e mt útil.

Boa dica ;D
GNU/Linux User #317824
Linux uma alternativa, não uma substituição.
http://hamacker.wordpress.com/script-ubuntu-perfeito/

AquaMan


(AMD Athlon 64 3.5Ghz/1Gb RAM/80Gb+250Gb/Geforce FX 6200 128Mb/Palm T5)

nitrofurano

obrigado pelo feedback! :-)
curioso era que até bem pouco tempo eu também não conhecia - eu como já estava farto de perder ficheiros, mandei um mail justamente para os autores do comando 'eject' (eu já estava meio desconfiado que um comando chamava outro), e foi com a resposta deles que aprendi - coisas que só acontecem no mundo do open-source, felizmente! :-)

AquaMan

Citação de: nitrofurano online 20 de Setembro de 2007, 10:18
...e foi com a resposta deles que aprendi - coisas que só acontecem no mundo do open-source, felizmente! :-)

É isso aí!

Só para noticiar, já instalei, já usei, funciona muito bem. Instalei no painel superior, como orientado aqui, mas só não achei um ícone que fosse um pen drive... mas isso é o de menos.
:D

Abs!

(AMD Athlon 64 3.5Ghz/1Gb RAM/80Gb+250Gb/Geforce FX 6200 128Mb/Palm T5)

Darcamo

Sempre usei o sync e não preciso dizer o porque já que você foi muito claro em sua explicação.
No entanto, nunca precisei usar sudo para chamar o sync.
Apenas rodo o comando sync no terminal e quando ele voltar a poder entrar comandos é porque o sync terminou de copiar os dados em cache.

Acho que se você tirar o gtksu deve funcionar do mesmo jeito sem a necessidade de fornecer senha.

wagnerluis1982

Citação de: Darcamo online 20 de Setembro de 2007, 20:49
Sempre usei o sync e não preciso dizer o porque já que você foi muito claro em sua explicação.
No entanto, nunca precisei usar sudo para chamar o sync.
Apenas rodo o comando sync no terminal e quando ele voltar a poder entrar comandos é porque o sync terminou de copiar os dados em cache.

Acho que se você tirar o gtksu deve funcionar do mesmo jeito sem a necessidade de fornecer senha.
Eu ia dizer a mesma coisa!

Como uma dica para ser testada: adicionando o comando sync no crontab provavelmente funcionaria e ficaria mais cômodo, pois seria feito em automatico. De 5 em 5 minutos por exemplo.