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.