Como monitorar a transferência de dados durante a cópia ou backup.

Sistemas operacionais UNIX ou GNU/Linux possuem um comando de cópia tradicional para a CLI: o cp.
Quando há vários arquivos para transferir de um diretório a outro, é possível acompanhar a finalização da transferência de cada um deles.

Mas só ficamos sabendo da finalização individual de cada cópia de arquivo.
Na GUI (ambiente gráfico), para quem usa um gerenciador de arquivos, também é possível acompanhar o progresso da transferência, com um nível mais elevado de exibição de informações.
elias praciano gnome nautilus
Na CLI, contudo, o comando cp, não permite obter este detalhamento do progresso da transferência dos seus arquivos.
mostrei como “atualizar” o comando cp, para forçar a exibição destas informações em outro post.
Neste, vou mostrar como obter o resultado com o utilitário pv.
Como não faz parte da instalação padrão da maioria das distribuições Linux, ele precisa ser instalado.
Por sorte, faz parte dos repositórios das grandes distribuições (Fedora, OpenSUSE, Debian, Ubuntu etc.)
Use o seu gerenciador de pacotes predileto para obtê-lo (yum, dnf, apt etc.)

Como funciona o pv

O pv é um utilitário para monitorar a transferência de dados.
Com ele, é possível obter informações sobre o percentual que ainda falta da tarefa a ser completada (com uma barra de progresso), o tempo de conclusão (estimado), a taxa de transferência, total de dados transferidos etc.
O pv é usado como pipeline (encanamento) entre dois processos.
Pode ser usado para monitorar o fluxo de dados local ou remotamente.
Eu sugiro o seu uso dentro de scripts, para dar retorno visual mais agradável sobre o progresso das atividades realizadas.

Exemplos de uso do pv

linux tranferencia de arquivo com comando pv
Para monitorar, enquanto faz a cópia de um arquivo, forneça a localização, o nome do arquivo de origem e do arquivo de destino:

pv origem > destino

Para copiar o arquivo-1.mp4 para dentro de um flash drive (montado no diretório Yellow), por exemplo:


pv arquivo-1.mp4 > /media/justincase/Yellow/arquivo-1.mp4

 355MiB 0:00:27 [1,36MiB/s] [=======================>          ] 73% ETA 0:00:09

No exemplo abaixo, o pv é usado para monitorar o backup dos diretórios apt/ e caching/:


tar -cjf - apt/ caching/ | (pv -p --timer --rate --bytes > backup.tar.bz)

34,5MiB 0:00:10 [2,79MiB/s] [        <=>  

Use o comando acompanhado da opção ‘-h’, para obter mais opções de uso:


pv -h


Se você está fazendo cópias de arquivos ou (des)compactando-os de dentro de um script, é possível dar um feedback visual mais atraente para o seu usuário, com o uso do comando pv.
Abaixo, um exemplo de backup do diretório ~/Documentos:


tar -czf - ~/Documentos/ | (pv -n > backup-docs.tgz) 2>&1 | dialog --gauge "Cópia de segurança do diretório Documentos" 10 70

backup whiptail
Se o utilitário whiptail não estiver presente no seu sistema, é possível usar o dialog.
No próximo exemplo, usamos o utilitário GUI, zenity:


tar -czf - ~/Documentos/ | (pv -n > backup-docs.tgz) 2>&1 | zenity --progress --text "Cópia de segurança do diretório Documentos"

backup zenity linux

Referências

https://www.tecmint.com/monitor-copy-backup-tar-progress-in-linux-using-pv-command/.

Virtualização no Linux com o QEMU

O QEMU é uma plataforma que permite usar um outro hardware, com um sistema operacional, sobre o Linux.
De modo resumido, o aplicativo pode virtualizar um sistema PC completo — com todo o seu hardware e periféricos.

A plataforma inclui um acelerador para o PC, disponível (e recomendado) quando a emulação é feita sobre um hospedeiro (host) físico x86.
qemu logo

Como o QEMU funciona

Por ser um sistema completo de emulação, o QEMU cria (virtualmente) um PC, dentro de uma aplicação, com o uso do sistema operacional desejado.
Sobre o sistema operacional, ele oferece métodos variados para fazer a emulação.
Se o código for o mesmo do que estiver em execução na máquina hospedeira, o processo de emulação é mais simplificado (uma vez que o set de instruções combina).
Neste caso, o QEMU permite a execução do código visitante (guest) diretamente na CPU física, sem a necessidade de emular.
Trata-se de uma solução mais próxima de uma paravirtualização, só que em um ambiente PC virtual.
Como funciona o QEMU
Mesmo sobre a arquitetura x86, a aplicação pode emular outras arquiteturas diferentes.
Você pode emular um PowerPC, por exemplo, com um sistema operacional apropriado e todas as suas aplicações.
Tradicionalmente, este tipo de emulação é bastante lenta.
Contudo, o QEMU consegue fazer um trabalho mais eficiente através de um processo chamado “tradução dinâmica” (dynamic translation).
O processo consiste em guardar na memória cache código do sistema visitante, já traduzido, para rodar na CPU hospedeira.
Desta forma, blocos de código traduzido podem ser reusados, a qualquer momento, sem ter que passar pelo processo de tradução novamente.

A tradução dinâmica aumenta a eficiência da emulação de arquiteturas diferentes da hospedeira, eliminando parte da redundância no trabalho de tradução.

O QEMU ainda usa uma abordagem inteligente na tradução, com técnicas de compilação dentro do tradutor.
Este método também concorre para tornar mais ágil a compreensão de micro operações de uma plataforma para outra.

A virtualização como tecnologia

A virtualização não é uma novidade, embora tenha ganhado grande impulso nesta última década (em função dos mais novos processadores).
Os ambientes de servidor podem se beneficiar imensamente com a virtualização de várias máquinas.
Sob a perspectiva dos desenvolvedores, a tecnologia permite experimentar código ou aplicações prontas em diversas plataformas a partir de um único laptop.

Saiba mais sobre o uso do QEMU

O processo de instalar e emular um ou mais sistemas operacionais em uma máquina Linux é muito simples.
várias ferramentas gráficas (GUI) para fazer o trabalho, com alguns cliques ou toques (na tela ou no touchpad).
Realizar o trabalho na CLI pode ser mais produtivo, contudo.
Por favor, use também a nossa seção de busca para encontrar mais artigos sobre o assunto.
Pessoalmente, uso o QEMU para testar novas instalações do Linux ou experimentar sistemas operacionais UNIX.
Descubra como o aplicativo pode vir a ser útil para você.

Use o TheSSS, como solução simples para ter um servidor econômico, flexível e eficiente.

O TheSSS funciona como uma distribuição GNU/Linux, com o propósito de ser um servidor web, com uma série recursos voltados para este tipo de aplicação.
O nome TheSSS, em si, já diz a que ele veio. “The Smallest Server Suite” corresponde a menor suíte de servidor, em uma tradução livre.

De fato, a imagem ISO tem apenas 76 Mb e dá para colocar a distro no ar em menos de 1 minuto (depende do seu hardware claro…)
Como era de se esperar, a distro vem despida de ambiente gráfico (mas nada impede que se instale isso depois) e apenas com as ferramentas e utilitários necessários para fazer o serviço.
Depois de gravar a imagem em um pendrive ou em um CD/DVD ele é leve e rápido para carregar.

thesss boot menu
Thesss GNU/Linux boot menu.

De acordo com a documentação oficial, o TheSSS é projetado para administradores de sistemas que precisam de um conjunto de ferramentas de software de servidor extremamente rápido e fácil de ter à mão — com suporte a DNS, FTP, HTTP, HTTPS, MySQL, SFTP, SMTP, SSH, e Telnet.
Thesss GNU/Linux login screen
Tela inicial de login.

Os desenvolvedores incluíram também um servidor proxy (Polipo com o Tor).
Os principais componentes de segurança incluídos são firewall 4MLinux (baseado no iptables) e o Clam Antivirus.

A versão que testei é a TheSSS 23.0, baseada no 4MLinux Server 23.0 — uma distro minimalista polonesa, com status ativo e atualizada.

A distro também conta com um kernel (de suporte prolongado) na versão 4.9.33 LTS, servidor web Apache 2.4.27, servidor de banco de dados MariaDB 10.2.7 e PHP 7.0.21.
A lista segue com o Postfix 3.2.2 SMTP server e OpenSSH 7.5p1 para realizar as conexões SSH.

Os primeiros passos dentro da distro

Você pode usar o comando help ou helpme para poder obter uma ajuda inicial.
São sugeridos 3 comandos como os mais importantes, aqui:

  • server — para iniciar um servidor à sua escolha
  • netconfig — para realizar a configuração da rede
  • install2hd — para iniciar a instalação da distro em seu hd

Ferramentas de backup

A distro dispõe de ferramentas (scripts) para realizar cópias de segurança de seus dados: backup, fsbackup e image.
thesss backup tools

Ferramentas de monitoramento e antivirus

O script nmonitor vai apresentar um menu com acesso a 10 opções de ferramentas de monitoramento do Linux.
nmon monitoring tool
Estão presentes vários aplicativos e scripts, como:

  • nmon — informações gerais sobre o sistema
  • saidar — estatísticas sobre o sistema
  • htop — relação dos principais processos em execução
  • ncdu — estatísticas de uso do disco
  • netwatch — atividade da rede
  • iptraf — estatísticas de tráfego na rede
  • wavemon — interface de rede sem fio
  • iftop — uso da banda de rede

O antivirus ClamAV pode ser iniciado com o comando antivir.
Neste caso, vai ser necessário aguardar enquanto uma cópia atualizada é baixada.

linux clamav antivirus
Instalação do antivírus para Linux ClamAV, com a atualização das bibliotecas de vírus.

linux clamav antivirus
ClamAV varrendo o sistema.
linux clamav antivirus
Relatório final do ClamAV.

Com esta ferramenta, é possível varrer um sistema Windows (e Linux também), encontrar e remover com eficiência eventuais infecções.
Não tenho uma máquina Windows e, portanto, não como o ClamAV está funcionando para esta plataforma.

Servidores

É possível iniciar todos os servidores com apenas um comando:


serverd start

Ou parar todos:


serverd stop

Mas este tipo de ação foge do propósito da distro, que é ser leve e executar apenas o necessário.
Rode o comando server, para ver a relação de possbilidades:


server

Para iniciar o servidor web Apache (como exmeplo), rode o comando:


httpd start

Com o Apache no ar, é possível acessar uma página interna da distro, com documentação e acesso às configurações do servidor web:


links http://localhost/admin

Referências

Site de download: http://thesss.4mlinux.com/download/.
Sourceforge: https://sourceforge.net/projects/thesss/.
Recomendo a compra no OSDisc, para ajudar projetos de software livre: https://www.osdisc.com/products/4mlinux.

Compacte arquivos usando os recursos do bzip2

O bzip2 comprime arquivos através do algoritmo de Burrows-Wheeler.
O nível de compressão por este método é consideravelmente mais eficiente do que o de softwares baseados no LZ77/LZ78 (LZW).
Por outro lado, não chega a ser tão bom quanto a família de compressores estatísticos PPM.

O pacote de utilitários bzip2 é composto pelos seguintes itens:

  1. bzip2, bunzip2 — respectivamente, ferramentas de compactação e descompactação de arquivos.
  2. bzcat — descomprime arquivos para o stdout, ou seja, exibe o conteúdo.
  3. bzip2recover — ferramenta de recuperação e correção de arquivos bzip2 danificados.

É comum usar o programa em conjunto com o comando tar.
O tar não é, exatamente, uma ferramenta de compressão e depende de aplicativos de terceiros para fazer este trabalho.
Por outro lado, o bzip2 não é um arquivador. Ele comprime os arquivos individualmente.
Por ĩsto, é tão comum combinar os dois utilitários.
Para fazer o arquivamento (backup) de diretórios, usando o tar, com compressão pelo bzip2, use-o assim:


tar cjf backup.tar.bz ~/temp/

Se quiser, use o progress, como ferramenta para acompanhar o andamento do processo de backup tar/bzip2, com resultados individuais exibidos para cada processo.

progress tar bzip2

O bzip2 faz parte do conjunto de ferramentas padrão das grandes distribuições GNU/Linux. Você provavelmente não precisará se preocupar em instalar, portanto. Tudo que precisa para começar a usar agora, já se encontra no seu sistema.

Como usar o bzip2 na CLI

Na linha de comando (CLI), o bzip2 tem uma sintaxe similar ao do gzip, o que pode tornar mais fácil o trabalho de substituição em scripts de backup.
O utilitário espera que lhe seja dado uma lista de arquivos, acompanhados das opções de uso.
Cada arquivo é substituído por uma versão comprimida de si mesmo — acrescida da extensão .bz2.
Cada arquivo comprimido mantém (enquanto possível) as propriedades originais de posse, facilitando sua restauração posterior.
Se você prefere que os arquivos existentes sejam sobrescritos, é necessário usar o parâmetro ‘-f’. Sem isso, o programa pula arquivos que já tenham passado pelo processo de compactação.


bzip2 -f Occidentalis_v02.img

Exemplos de uso do bzip2

Adapte os exemplos, a seguir, às suas necessidades.
Para dar opções rápidas, o utilitário permite definir --fast (mais rápido) ou --best (melhor compressão),
Portanto para obter a melhor compressão possível, use o bzip2 assim:


bzip2 --best nome-do-arquivo

Para obter uma compressão mais rápida:


bzip2 --fast nome-do-arquivo

A qualidade da compressão também pode ser definida numericamente (de 1 a 9).
A opção ‘-9’ equivale a --best e ‘-1’ a --fast.
Para obter um nível de compressão equilibrado, use -5:


bzip2 -5 nome-do-arquivo

Para obter um feedback mais verboso, use ‘-v’ ou --verbose:


bzip2 -v *.* 

O comando, acima, irá comprimir todos os arquivos do diretório corrente, gerando um novo arquivo com extensão .bz2 em substituição para cada um.
Este é o comportamento padrão do programa.
A opção ‘-v’ serve para mostrar o que está sendo feito.

Sim! Você pode combinar várias opções.
Abaixo, ativei a ‘verbosidade’ e especifiquei que não quero que o arquivo original seja removido. Veja o meu resultado:


bzip2 -vk woman-drinking-cup-of-coffee.jpg 

woman-drinking-cup-of-coffee.jpg:  0.991:1,  8.072 bits/byte, -0.90% saved, 36856 in, 37189 out.

ls -lah woman-drinking-cup-of-coffee.*

-rw-r--r-- 1 justincase justincase 36K set  1 15:03 woman-drinking-cup-of-coffee.jpg
-rw-r--r-- 1 justincase justincase 37K set  1 15:03 woman-drinking-cup-of-coffee.jpg.bz2

Desta vez restaram 2 arquivos — com extensões ‘.jpg’ e ‘.jpg.bz2’.
Note que o arquivo resultante ficou 1K maior do que o original.
Isto se deve ao fato de que arquivos JPEG já são comprimidos.
Neste caso, além de não ter sido possível obter uma taxa de compressão maior, somou-se ao arquivo resultante as informações do bzip2.
Por isto ele ficou maior.
Você irá obter resultados bem melhores sobre arquivos de texto ou de áudio FLAC, por exemplo.

Como descompactar e testar meus arquivos bz2

Para descomprimir (inflar) seus arquivos, use o bunzip2 ou ‘bzip2 -d’:


bzip2 -dv woman-drinking-cup-of-coffee.jpg.bz2

bzip2: Output file woman-drinking-cup-of-coffee.jpg already exists.

Como o arquivo original ‘woman-drinking-cup-of-coffee.jpg’ já existia, obtive a mensagem acima ‘Output file woman-drinking-cup-of-coffee.jpg already exists‘ — “O arquivo de saída … já existe”.
Se quiser forçar a extração, neste caso, use ‘-f’:


bzip2 -dvf woman-drinking-cup-of-coffee.jpg.bz2

Use ‘-tv’ para testar um ou vários arquivos bz2:


bzip2 -tv woman-drinking-cup-of-coffee.jpg.bz2 

woman-drinking-cup-of-coffee.jpg.bz2: ok

Mais adiante, vamos abordar novamente o uso de ‘-t’.

Como usar o bzip2, quando os recursos do sistema estão escassos

Em ambiente servidor pode ser difícil encontrar “uma folga” no tempo do processador ou no espaço disponível na memória RAM do sistema.
Ficar sem backup, justamente nestes casos, não é uma opção.
Aplicar o --small ou ‘-s’ faz com que o aplicativo realize o seu trabalho com menor consumo de memória.
Segue um exemplo de uso:


bzip2 -sv Screenshot_20170*

  Screenshot_20170619-092621.png:  1.005:1,  7.963 bits/byte,  0.47% saved, 2090633 in, 2080882 out.
  Screenshot_20170619-092626.png:  1.000:1,  7.997 bits/byte,  0.04% saved, 2199528 in, 2198582 out.
  Screenshot_20170619-092823.png:  1.137:1,  7.036 bits/byte, 12.05% saved, 156600 in, 137732 out.

...

  Screenshot_20170706-164342.png:  1.134:1,  7.053 bits/byte, 11.84% saved, 128326 in, 113135 out.
  Screenshot_20170706-164407.png:  1.097:1,  7.292 bits/byte,  8.85% saved, 120458 in, 109795 out.
  Screenshot_20170706-164419.png:  1.141:1,  7.014 bits/byte, 12.33% saved, 97195 in, 85210 out.

A opção reduz o uso da memória durante a compressão, descompressão e teste.
Neste caso, é ativado um outro algoritmo, que requer 2,5 bytes por cada byte de bloco.
Com isto, qualquer arquivo pode ser inflado dentro de um espaço de 2300 kb, na memória RAM.
O custo: redução pela metade da velocidade de trabalho do aplicativo.
Durante o processo de descompressão, o ‘-s’ seleciona blocos de 200 kb, limitando o uso de memória ao mesmo valor — com a consequente redução da taxa de compressão.

A documentação manda usar ‘-s’ em sistemas com 8 Mb de memória RAM livres ou menos.
Mas você pode usar o recurso em outras situações que julgar adequado.

Como recuperar arquivos bzip2 danificados

Acidentes podem ocorrer durante uma transferência e você pode acabar com arquivos compactados importantes corrompidos.
O bzip2 comprime em blocos, usualmente, com 900 Kb — cada qual é manipulado independentemente pelo utilitário.
Se uma mídia danificada ou um erro de transmissão causar dano a um ou mais blocos, ainda é possível recuperar o conteúdo a partir dos dados armazenados nos blocos saudáveis.

O bzip2recover é um programa simples com o propósito de varrer blocos dentro de arquivos .bz2 e gravar cada bloco em outro arquivo .bz2.
Os arquivos resultantes podem ser verificados com a opção ‘-t’ e, se for o caso, descomprimidos.
Veja um exemplo:


bzip2recover woman-drinking-cup-of-coffee.jpg.bz2 

bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.
bzip2recover: searching for block boundaries ...
   block 1 runs from 80 to 297425
bzip2recover: splitting into blocks
   writing block 1 to `rec00001woman-drinking-cup-of-coffee.jpg.bz2' ...
bzip2recover: finished

Em seguida, rode o teste:


bzip2 -tv rec00001woman-drinking-cup-of-coffee.jpg.bz2 

  rec00001woman-drinking-cup-of-coffee.jpg.bz2: ok

Este é o procedimento básico de recuperação pelo bzip2 de um arquivo danificado.

Compactação com criptografia

Segurança implica em criptografia, em muitos casos.
O bzip2 pode ser usado em conjunto com a ferramenta de criptografia GnuPG.
Para obter este resultado, você pode invocar a compressão com o bzip2 do próprio gpg:


gpg --output ssp2.html.gpg.bz2 --bzip2-compress-level 1 -cv ssp2.html

gpg: pinentry launched (11802 gnome3 1.0.0 ? ? ?)
gpg: pinentry launched (11809 gnome3 1.0.0 ? ? ?)
gpg: using cipher AES
gpg: writing to 'ssp2.html.gpg.bz2'

Veja o que foi feito:

  • gpg --output ssp2.html.gpg.bz2 — a execução pede para gerar um arquivo de saída, criptografado, com o nome ‘ssp2.html.gpg.bz2’.
  • --bzip2-compress-level 1 — especifica o método e o nível de compressão a ser usado.
  • -cv — indica explicitamente a criptografia (-c) e verbosidade (-v).

O valor de --bzip2-compress-level pode variar de 0 (nenhuma compressão) a 9 (máxima compressão).
Acima, usei o valor 1, para tornar o procedimento mais célere.
Para reverter, use o gpg assim:


gpg --output ssp2.html -dv --bzip2-decompress-lowmem ssp.html.gpg.bz2

gpg: AES encrypted data
gpg: pinentry launched (11769 gnome3 1.0.0 ? ? ?)
gpg: encrypted with 1 passphrase
gpg: original file name='ssp.html'

O que há de diferente?
Desta vez, usamos a opção ‘-d’ e --bzip2-decompress-lowmem para indicar que é para descomprimir um arquivo, com o uso do bzip2.

Como determinar a memória usada por um processo no Linux, com o utilitário pmap

O utilitário pmap tem a função de exibir um mapa do uso da memória por um ou vários processos.
Com ele, é possível obter um valor, em KB, da quantidade de memória RAM usada por um programa, no seu sistema.
Você precisa informar apenas o PID (Process ID) do programa, para o pmap.
Para obter o PID, use o comando ps.
Use o ps para obter o PID de algum processo. No exemplo, abaixo, veja como obter esta informação sobre o navegador Firefox:


ps aux | grep firefox

justinc+  1889 46.2 10.6 3262532 839236 tty2   Sl+  09:21   9:00 /usr/lib/firefox-esr/firefox-esr
justinc+ 13572  0.0  0.0  12784   992 pts/0    S+   09:40   0:00 grep --color=auto firefox

O PID é exibido na 2a coluna. No meu caso, é 1889.
Agora, basta oferecer este número ao pmap:


pmap 1889

O mapa pode ser bastante extenso e você pode informar mais de um PID, se quiser.
Ao final, é exibido o total de memória (em KB) usada pelo processo.
Use o comando grep, para obter uma visualização mais resumida:


pmap 1889 | grep -i total

 total          3270732K

Você também irá encontrar informações sobre a memória ocupada por processo no diretório /proc ou com os utilitários ps ou top.
O problema destas alternativas é que será necessário calcular o valor total da memória usada “manualmente”, ou seja, adicionar os valores de memória compartilhada, mapeada e virtual, entre outros.
Já o pmap oferece o valor total, de mais fácil compreensão, ao final da listagem.