Transferência de grandes arquivos

Transcrição

Transferência de grandes arquivos
TUTORIAL
Transferência de arquivos | TUTORIAL
Transferência de arquivos
Transferência de
grandes arquivos
Várias alternativas permitem contornar os limites de tamanho
quando transferimos um arquivo do ponto A ao ponto B.
por Frank Hofmann
C
onsidere a seguinte
situação: um usuário
deseja armazenar um
arquivo grande em um cartão de
memória USB, mas a tentativa
falha, mesmo havendo espaço
suficiente no dispositivo. Neste
caso, muito provavelmente foram
atingidos os limites do sistema
de arquivos na mídia que estava
sendo utilizada. As causas possíveis
podem ser: uma tabela de alocação
de arquivo cheia – File Allocation
Table (FAT) –, o diretório para
conteúdos do disco ter excedido
o número máximo de blocos por
arquivo.
Por razões de compatibilidade,
muitos fabricantes fornecem
mídia para o sistema de arquivos
VFAT ou FAT32, e podemos
não notar por um longo tempo
que o tamanho de um arquivo é
limitado. Ambos podem armazenar
arquivos até um máximo de 4GB,
Linux Magazine #99 | Fevereiro de 2013
aproximadamente; no entanto,
podemos transportar arquivos
maiores de um computador para
outro de outras formas.
A primeira variante envolve a
transferência de dados através de
uma conexão de rede; a variante
dois, envolve a compressão de
dados; a variante três, formatação de
disco com um sistema de arquivos
diferente, e a variante quatro, a
divisão do arquivo em diversas
partes para, posteriormente, voltar
a uni-los no sistema de destino.
Operações de rede
A transferência de arquivos através
da rede é apenas uma opção
genuína se a taxa de transferência
de linha for suficiente e a largura
de banda estável durante a conexão.
Prestadores de serviços de Internet
muitas vezes fornecem menos
capacidade para uploads do que
para downloads em uma conexão
com largura de banda assimétrica
(por exemplo, ADSL). Quando a
Internet está sempre disponível, este
fato pode ser facilmente esquecido.
Se o sistema de destino é capaz
de receber dados via FTP, este
protocolo é a escolha óbvia. Para
além da ferramenta de linha de
comando clássica ( listagem 1), o
cliente gFTP com interface gráfica
simplifica significativamente o
processo de envio de dados antes
e depois ( figura 1). No entanto,
o FTP é um protocolo inseguro;
todos os dados são enviados sem
criptografia. Alternativas mais
seguras estão disponíveis há muito
tempo, sob a forma de FTP seguro
(Secure FTP ou SFTP), FTPS (FTP
sobre SSH) e cópia segura (Secure
Copy ou SCP). O programa SCP
é normalmente parte do escopo
de uma instalação SSH em um
PC cliente; o sistema de destino
precisa executar um servidor SSH.
57
TUTORIAL | Transferência de arquivos
Figura 1 O cliente gFTP possui uma interface gráfica para facilitar a transferência de arquivos para um servidor FTP.
Ambos os componentes estão disponíveis nos pacotes openssh-client
e openssh-server no Debian e no
Ubuntu. O cliente é parte da ferramenta padrão definida em muitas
distribuições; uma instalação geralmente não é necessária. Para instalar o servidor de forma retroativa no
Ubuntu/Debian, utilize:
apt-get install openssh-server
no sistema de destino. Para transferir
dados a partir do host para o servidor,
basta digitar o comando da primeira
linha da listagem 2. O SCP abre uma
conexão criptografada para a máquina
de destino e transmite o arquivo para
o diretório especificado; é necessário
indicar o diretório explicitamente,
acrescentando-o ao nome do host
na linha de comando. O separador
de comandos SCP é o de dois pontos
(colon). Se só forem informados os dois
pontos, o software automaticamente
seleciona o diretório raiz no sistema
remoto como destino.
Enquanto as duas primeiras chamadas na listagem 2 mantêm o mesmo nome do arquivo no sistema de
destino, o terceiro comando o altera para debian.iso. Além disso, a
transferência usa um formato gzip
compactado, graças ao switch -C.
Para arquivos de texto e arquivos tar
(compactados), esta forma pode reduzir de forma bastante significativa
a duração da transmissão do arquivo
sob certas circunstâncias.
Se assim desejar, o SCP também
irá coletar dados do servidor caso seja
digitado o nome do computador no
qual os arquivos estão armazenados
tendo o nome do caminho como
primeiro parâmetro e o nome do
arquivo no sistema local como segundo parâmetro.
Na última linha da listagem 2, o
programa lê o arquivo debian.iso a
partir do diretório home do usuário no
computador especificado, transmite
o arquivo gzip para o sistema local,
e armazena o arquivo no diretório
atual sob o nome file4.iso. Se o
usuário não estiver totalmente confortável com as ferramentas de linha
de comando, o Midnight Commander fornecerá uma alternativa. Dois
itens de menu, Left/FTP link e Left/
Shell link oferecem uma camada de
abstração para uma conexão FTP
e SCP, respectivamente (figura 2).
Note que o Midnight Commander
armazena os dados de buffer no diretório /tmp. Consequentemente, o
usuário deverá certificar-se de que há
espaço disponível suficiente antes de
transferir arquivos grandes.
Sincronização
com Rsync
Figura 2 Se preferir ficar longe da linha de comando, o Midnight
Commander oferece recurso similar ao SCP e FTP, envolto em uma
interface gráfica.
58
Outra abordagem para a transferência de dados envolve a sincronização de dois diretórios via Rsync ou
www.linuxmagazine.com.br
Transferência de arquivos | TUTORIAL
através de sua interface gráfica, o
Grsync (figura 3). O comando para
sincronizar o conteúdo do diretório /original em um computador
com o diretório local, chamado
de copy é:
$ rsync -z <user>@<source>:
/original/ copy
O Rsync transfere apenas as mudanças entre o original e a cópia
– dados idênticos (blocos) são reconhecidos e excluídos pela ferramenta. A opção -z assegura que os
dados na sincronização Gzip estejam compactados para transmissão
através da rede.
Compressão de dados
Figura 3 O Grsync, a interface gráfica para o Rsync, torna mais fácil lidar com
comandos Rsync por vezes enigmáticos.
Listagem 1: FTP na linha de comando
$ ftp <user>@<server>
Password:
230 Login successful. Have fun.
ftp> put <file>
ftp> bye
221 Goodbye.
Listagem 2: Como usar o SCP
$
$
$
$
scp
scp
scp
scp
<file> <user>@<target>:
<file> <user>@<target>:/tmp/
-C file3.iso <user>@<target>:debian.iso
-C <user>@<source>:debian.iso file4.iso
Listagem 3: Definição de divisão de nomes de arquivos
$ split --bytes=50M -d -a 3 debian-6.0.4-i386-netinst.iso part$ ls -hal part*
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 part-000
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 part-001
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 part-002
-rw-r--r-- 1 frank frank 41M 30. Apr 10:33 part-003
Linux Magazine #99 | Fevereiro de 2013
Por um lado, a compactação de
dados durante uma transferência
custa tempo; por outro lado, o SSH/
SCP só suporta compressão baseada
em gzip. O procedimento é amplamente usado, mas nem sempre é a
melhor escolha. Se quiser usar um
procedimento diferente, é preciso
compactar os arquivos antes da
transferência e descompactá-los no
sistema de destino (por exemplo,
usando Xz ou 7z). Qual processo
é mais adequado para cada tarefa
depende principalmente dos dados
a serem processados.
Outra coisa a considerar na escolha do formato é que, se deseja descompactar o arquivo no sistema de
destino, certifique-se de antemão de
que um programa adequado esteja
disponível lá.
Novo formato
Uma outra opção é manipular o meio
externo de seu sistema de arquivos.
As ferramentas mkfs são usadas
para criar um sistema de arquivos
básico. Mkfs significa make filesystem
(criar sistema de arquivos); um
comando separado está disponível
para (quase) todos os arquivos. Por
exemplo, o comando mkfs.ext4
/dev/sdb1 cria um sistema de arquivos
59
TUTORIAL | Transferência de arquivos
ext4 no dispositivo especificado: /
dev/sdb1. O tamanho máximo de
arquivo permitido em um sistema
de arquivos varia consideravelmente
e encontra-se na faixa de 16TB em
ext2, 1EB em ext4 e 16EB no ZFS
[1], onde 1 exabyte = 1018 bytes. Em
outras palavras, 1EB é equivalente
a 1 milhão de terabytes ou 1 bilhão
de gigabytes.
De acordo com o tamanho do
volume, a criação de um sistema de
arquivos pode demorar algum tempo
para ser concluída; e lembre-se, este
processo irá apagar todos os dados já
armazenados no meio.
Divisão de arquivos
Se as propostas acima referidas não
forem do agrado do usuário nem
uma opção a se considerar, é possível dividir o arquivo em pedaços
menores e uni-los novamente no
sistema de destino. O Linux oferece
duas ferramentas para isso: o split
e o cat. O comando split divide os
arquivos, e o cat os coloca juntos
novamente.
Sem nenhum parâmetro, o split
desmonta o arquivo especificado
em pedaços de 1.000 linhas. Esta
predefinição é adequada para
arquivos de texto, mas não para
imagens ISO ou uma máquina virtual. O parâmetro --bytes=<value>
(ou -b<value>) faz a divisão em
um número exato de bytes. Por
exemplo, para dividir uma imagem ISO da rede Debian, instale
o CD (191MB) em pedaços de
50MB, onde a seguinte chamada
irá fazer este truque:
$ split --bytes=50M debian-6.0.
4-i386-netinst.iso
A imagem é dividida em quatro
partes; de xaa até xad. As partes xaa,
xab e xac somam exatamente 50MB,
enquanto xad contém o restante dos
dados, que é de aproximadamente
41MB. Por padrão, a ferramenta
prefixa os arquivos de saída com x
60
para duas letras posteriores na ordem
crescente (sufixo).
Parâmetros adicionais na linha
de comando split permitem definir
os nomes dos arquivos de saída para
atender às necessidades do usuário;
podemos passar no componente
principal o nome do arquivo a ser
dividido, acrescentando um prefixo
à chamada anterior:
$ split --bytes=50M debian-6.0.
4-i386-netinst.iso part-
Os arquivos gerados serão agora
apelidados, por exemplo, de part-aa
e part-ad. Outros dois parâmetros
-d e -a também permitem definir
os sufixos. A opção -d gera sufixos
numéricos, e -a<count> determina
a largura (duas por padrão); a divisão preenche os espaços com zeros.
A chamada na primeira linha da
listagem 3 cria quatro arquivos: de
part-000 até part-003. Para montar
as peças individuais no sistema de
destino, o usuário só precisa de um
simples comando cat:
$ cat part-* >> new.iso
O cat usa o operador >> para remontar as partes que o esquema
de nomeação havia colocado na
ordem correta, criando assim um
novo arquivo chamado new.iso neste
exemplo. Agora só é preciso verificar
e certificar-se de que as etapas de
desmontagem e remontagem não
tenham falhado e os dois arquivos
ISO (original e cópia) são idênticos.
Uma comparação byte a byte
levaria muito tempo e também é
propensa a erros; no entanto, duas
ferramentas – cmp e diff – podem
ajudar a verificar os arquivos para
analisar diferenças em potencial:
$ diff debian.iso new.iso
$ cmp debian.iso new.iso
Se não há saída, os arquivos ISO
são idênticos. Uma outra abordagem,
mais elegante e frequentemente
utilizada é a de gerar um hash, que
é uma espécie de impressão digital
para um conjunto de dados ou string.
Na listagem 4, o comando openssl
usa o algoritmo MD5 para gerar
um hash. Se os checksums forem
idênticos, o original e a cópia serão
correspondentes.
Conclusão
Ao copiar arquivos grandes, ideias e
abordagens diferentes podem ajudar
a atingir seu objetivo. A única coisa
importante é encontrar uma solução
adequada para o problema que ajuda a dominar as tarefas Linux diárias
com mais segurança. n
Listagem 4: Como criar um hash
$ openssl dgst -md5 debian.iso
MD5(debian.iso)= ff79f60c4d1fee2d47baadcbf081e5b6
$ openssl dgst -md5 new.iso
MD5(new.iso) = ff79f60c4d1fee2d47baadcbf081e5b6
Mais informações
[1] ZFS: http://en.wikipedia.org/wiki/ZFS
Gostou do artigo?
Queremos ouvir sua opinião. Fale conosco em
[email protected]
Este artigo no nosso site:
http://lnm.com.br/article/8220
www.linuxmagazine.com.br

Documentos relacionados