sábado, 16 de julho de 2011

Como Copiar Arquivos Grandes no Linux?

Imagine que você precisa copiar um arquivo bem grande (ou de tamanho que consideramos bem grande para os dias de hoje, quando escrevo), algo em torno de vários gigas. Pode ser um dump geral de seu banco de dados, um arquivo de log gigantesco, um arquivo temporário ou um filme em Blue Ray. Pode ser que a cópia de backup deste arquivo falhe ou a escrita para ele comece a falhar a partir de certo ponto... o que fazer??
Calma, o Pajé tem a solução!!


  • Cópia em Ambiente Linux

Se você usa um sistema de arquivos moderno, como o ext4, então você poderá escrever vários gigas num mesmo arquivo. Se sua cópia ou escrita falhar, tente verificar se existe algum limite pré-definido de escrita, usando o comando:

$ ulimit
unlimited

Se a resposta for a que mostro aí em cima (unlimited), então não há limite para a sua cópia. De outra forma, pode haver limite. Daí, para redefinir o limite, basta usar este mesmo comando, passando o novo valor após o argumento -f:

$ ulimit -f [valor]

Para um tutorial completo sobre limites de escrita, uso e cotas de usuários, visite este endereço.


  • Cópia pela Rede, para Pen-Drives, HDs Externos ou Outros Dispositivos

Agora realmente a coisa muda de figura!! Você está tentando copiar um arquivo que está em um sistema de arquivos Linux para um dispositivo que provavelmente tem seu próprio sistema de arquivos, não necessariamente aquele que você usa na máquina de origem do arquivo. Lembre-se de que um sistema de arquivos é um banco de dados, e que cada tipo tem seus próprios limites.
Se você está copiando para outro dispositivo, verifique qual o sistema de arquivos que ele usa com este comando (claro, presumindo que o dispositivo esteja montado e acessível!!):

$ mount
(....)
/dev/sdb1 on /media/HDExterno type vfat

O comando acima vai mostrar tudo que está montado em seu sistema (a maioria não interessa neste momento, então coloquei estas saídas no formato de "(...)", para ficar mais fácil de entender). Porém, uma das linhas da saída vai se reportar ao dispositivo externo. No caso acima, é um HD Externo, que é acessível em /dev/sdb1 e está montado em /media/HDExterno. Observe que o tipo de sistemas de arquivos é vfat, ou seja, possivelmente um FAT32.
O sistema de arquivos FAT32 (vfat) é o pior que tem: um sistema antigo, limitado e muito simples. Porém, exatamente dada a sua simplicidade, ele é facilmente acessível e montável em ambientes os mais diferentes, desde Linux e MAC até Rádios (CD Players), TVs, DVD Players, CD Players de carros e aparelhos de som.
Notem que o HD Externo acima está formatado em FAT32. Pelas características deste sistema de arquivos, não é possível gravar nenhum arquivo maior que 4GB (na verdade, um byte antes de 4GB de tamanho). Não adianta, quantas vezes você tentar, vai falhar...


  • Achando a Solução para o Caso Acima

Se o seu caso é este acima, então tente fazer uma destas soluções:

1- Reformatar o HD com outro sistema de arquivos, como o NTFS (para ter compatibilidade com Windows) ou mesmo os sistemas do Linux, como ext4, ReiserFS, etc. Claro, isto implica em fazer backup de tudo que tem nele, apagar o HD Externo totalmente e reformatar. Porém, se você precisa muito gravar um arquivão de mais de 4GB, que pode ser seu precioso banco de dados ou o Log de seu sistema, então vale a pena o esforço!!

2- Uma alternativa, é usar o comando split, que quebra o arquivo em vários pedaços definidos por você. Depois desta quebra, o original pode ser apagado e os pedaços, em menor tamanho, podem ser gravados sem problemas. Fique tranqüilo, pois eles podem ser remontados sempre que necessário, usando o comando cat. Excede o escopo deste tutorial explicar detalhadamente como eles funcionam, mas a documentação dos mesmos é bem clara e certamente você conseguirá usá-los bem (digite "man split" e "man cat" para ver a página do manual de cada um)!!

3- Existem compactadores muito bons que conseguem reduzir em grande parte o tamanho dos arquivos. Muitos deles, como o rar, suportam não só a compactação como também a quebra do arquivo compactado em arquivos menores e de mesmo tamanho. Muitas vezes, você pode usar mais de um compactador, como a combinação do tar com o gzip ou bzip2. Se você pretende fazer backup, recomendo sempre compactar os dados e, claro, você pode fazer um script para te ajudar nesta tarefa um tanto quanto enfadonha.

Bom, pessoal, por hoje é isso... espero ter ajudado!!

Nenhum comentário: