Qual o melhor sistema de arquivos para usar dentro de uma máquina virtual

Dentro de uma máquina virtual, você provavelmente terá um ou mais discos virtuais. Cada qual, com uma ou mais partições.
Quanto mais for otimizado uso dos recursos de hardware/software, melhor será o desempenho do trabalho e das tarefas executadas dentro das VMs, lógico.
Este assunto pode suscitar várias dúvidas — por isto sugiro, dar uma olhada na tag #sistema-de-arquivos, deste blog — onde você poderá encontrar artigos complementares.

É um tema muito vasto e eu não sou o dono da verdade — por isso, sinta-se à vontade para comentar sobre a sua experiência no assunto.

Neste post, vou discutir especificamente qual o mais recomendado para formatar os discos rígidos (ou SSD) virtuais usados em máquinas virtuais (ou VMs).
No contexto deste artigo, uso algumas máquinas virtuais Debian 9 “Stretch” testing. O drive físico, em que se encontram instaladas, é um HDD (disco rígido).


Se você está com pressa e usa Linux, a resposta rápida (e mais segura), para a pergunta do título, é: formate com o ext4! 😉
Caso você tenha 2 ou 3 minutos (a depender da velocidade com que você consegue ler), posso explicar melhor as vantagens e desvantagens do ext4 e de outros sistemas de arquivos — e isto pode levar a outras respostas…

Em que casos o ext4 é perfeito para formatar um HD dentro de uma máquina virtual

O ext4 está para ser substituído, no universo GNU/Linux, há um bom tempo.
Este processo está em curso há mais ou menos uma década e pode levar outra para ser concluído. Sistema de arquivos é uma coisa séria e precisa de muitos testes para se provar confiável, seguro, eficiente.
O ext4 ou fourth extended filesystem (quarto sistema de arquivos extendido) teve sua primeira versão estável lançada em Outubro de 2008 — o que lhe dá, aproximadamente, 10 anos de estrada.

É o mais jovem (e, possivelmente, último) de uma linhagem, iniciada em 1992, com o ext — criado pelo desenvolvedor Francês, Rémy Card.

Este fato eleva o tempo de experiência do sistema, como um todo, para aproximadamente 25 anos.
Por isto é que o ext4 satisfaz as condições de segurança e eficiência.
Ele incorpora, inclusive, recursos modernos e avançados para manipular dados eficientemente em unidades SSD.

Se você tem dúvidas e precisa decidir rapidamente, opte pelo ext4.

virtualbox snapshot list
A falta de suporte nativo a snapshots no ext4, dentro do contexto de uma máquina virtual, pode ser um ponto a favor: por que o torna mais leve.
Para quem pretende rodar máquinas virtuais dentro do Virtual Box ou qemu, por exemplo, o suporte já está incluído no programa — o que o torna dispensável dentro do sistema de arquivos hóspede.

Outro argumento a favor do ext4: se o host (máquina hospedeira), já usa um sistema de arquivos com suporte a snapshots (como o BTRFS ou o ZFS), não há necessidade para a redundância.

O que os outros sistemas de arquivos oferecem a mais

Testar outras opções é sempre o melhor caminho para descobrir o que se adequa às suas necessidades.
Se as VMs estão em um host com SSDs, certamente é mais benéfico usar um sistema de arquivos construído do zero para este tipo de tecnologia.
Os sistemas de arquivo BTRFS e ZFS podem oferecer melhor performance dentro das seguintes situações, entre outras:

  • As VMs estão em um host equipado exclusivamente com SSDs.
  • Por alguma razão, você necessita do suporte a snapshots dentro do sistema de arquivos hóspede.
  • Os sistemas de armazenamento dos hóspedes são realmente grandes, você pretende usar RAID, pools etc.

Referências

Opções avançadas de conversão FLAC ou OGG para MP3 sob demanda com mp3fs

Quando comecei a usar o mp3fs, não imaginava que iria fazer tanto uso deste sistema de arquivos virtual.
O fato é que ele me permite manter backup de todos as minhas músicas apenas em FLAC ou OGG.
Quando eu preciso transferir músicas para algum outro dispositivo que só tem suporte a MP3, o mp3fs resolve o problema com a criação de um sistema de arquivos virtual e a conversão on the fly.

Isto me livra do peso da redundância — ou algo próximo de 50% de todo o espaço ocupado por músicas em meu computador.

Se você quiser saber sobre os recursos básicos do funcionamento do mp3fs e sobre como instalá-lo no seu sistema, leia o artigo como converter arquivos FLAC para MP3, sob demanda, com mp3fs.

Ajustes sobre a qualidade da mídia

Você pode especificar a qualidade da conversão sob demanda para todos os arquivos.
Veja as opções de codificação possíveis:

  • --quality — determina a qualidade geral das conversões.
    Os valores podem ir de 0 (qualidade máx.) a 9 (velocidade máx.).
    O padrão é 5 (caso você não especifique nada neste quesito).
    Quanto maior a qualidade, maior o impacto sobre a performance do sistema — em outras palavras, os arquivos .mp3 resultantes ficarão maiores e o processo de conversão é mais demorado.

    Se o seu hardware for razoavelmente atual, não vejo motivo para não usar a qualidade máxima.
    Por outro lado, o manual do LAME recomenda usar o valor 2.
    A decisão é sua.

  • -b — determina o bitrate dos seus arquivos MP3. Os valores possíveis são 96, 112, 128 (padrão), 160, 192, 224, 256 e 320
  • --gainmode — determina o modo de ganho para todos os arquivos.
    Escolha 0, para ignorar; 1, para preferir o ganho predeterminado do álbum ou 2 (padrão), para manter e uniformizar o ganho por cada trilha.
  • --gainref — determina o ganho em decibéis. Se nenhum valor for fornecido, o sistema usará 89 dB.

No exemplo que segue, montei um dispositivo de armazenamento externo WD Elements, com uma coleção de músicas em FLAC, fazendo uso de algumas das opções acima
O drive está montado em “/media/justincase/wdelements/music/”. A segunda pasta (vazia, por enquanto) é a do sistema de arquivos virtual, criado e usado pelo mp3fs:

sudo mp3fs -b 320 --gainmode=0 --quality=0 /media/justincase/wdelements/music/ /mnt/music/mp3/ -o allow_other,ro

No final da linha as opções de montagem, “-o allow_other,ro”, que serão abordadas no próximo tópico.

Opções de montagem

As opções de montagem podem ser obtidas através do comando

mp3fs --help

Você pode combinar várias delas, após o parâmetro “-o”, separadas por vírgulas. Segue algumas das mais comumente usadas:

  • -o allow_other — tal como usado no exemplo acima, permite a outros usuários, além do que montou o sistema de arquivos, terem acesso para executar as músicas.
  • -o ro — indica que o sistema de arquivos é apenas-para-leitura (read-only). É redundante, pois o mp3fs só tem a opção de montar o sistema de arquivos desta forma.
  • -o nonempty — monta também arquivos e/ou diretórios vazios.
  • -o fsname=NOME — nomeia o sistema de arquivos para NOME.
  • -o direct_io — usa entrada/saída direta.
  • -o kernel_cache — faz o caching através do kernel.
  • -o from_code=CHARSET — determina a codificação de caracteres original, caso você esteja tendo dificuldade para ver os nomes corretos dos arquivos.
  • -o to_code=CHARSET — determina a codificação de caracteres do sistema de arquivos destino. Nesta e na opção anterior, o padrão é UTF-8.

Leia mais sobre as vantagens do FLAC sobre o MP3.

Veja como fazer conversão sob demanda de arquivos de áudio FLAC e OGG para MP3.

Mesmo gostando de ouvir suas músicas com a máxima qualidade possível, às vezes é preciso fazer concessões à compatibilidade.
O fato é que muitos players de áudio não suportam uma grande variedade de padrões, além do velho MP3.
Já falei antes sobre a superioridade do FLAC em relação ao MP3, mas o segundo ainda é o mais suportado.
Em casa, fiz o backup de todos os meus CDs em FLAC, mas o som padrão do carro não suporta nada além de MP3, WMA ou WAV — todos proprietários.

Isto quer dizer que, ou ouço os FLAC do celular via Bluetooth ou os converto para um dos 3 formatos suportados para reproduzir a partir de um pendrive ou CD.
É chato… mas é o jeito.

Há inúmeras ferramentas para fazer este tipo de conversão — aplicativos GUI (ambiente gráfico) ou CLI (linha de comando), web apps etc.
Já mostrei como fazer o trabalho, com o ffmpeg ou o lame.
Neste post vou abordar o uso de uma ferramenta CLI — pensando nas pessoas que têm um número imenso de arquivos para converter.
Com este método, vamos consumir menos memória e realizar o trabalho bem mais rápido.
Depois que você der o comando de ativação do mp3fs, todo o restante do procedimento pode ser feito com suas ferramentas GUI (gerenciador de arquivos, player de áudio etc).
Se você estiver interessado em ripar CDs, leia meus artigos específicos sobre ripagem.

O que o mp3fs faz e por que você deveria usá-lo

O mp3fs é uma ferramenta que monta um sistema de arquivos virtual e transcodifica arquivos FLAC para MP3, on the fly.

Em outras palavras, o mp3fs permite montar um diretório virtual, com todos os seus arquivos de áudio prontamente renomeados com a extensão .mp3.
A partir daí, basta começar a tocar ou copiar para outro lugar
À medida em que os arquivos são acessados, o mp3fs faz a conversão.
Parece fácil, não é?
E é!

A ferramenta cria um sistema de arquivos FUSE, protegido contra alterações, que transcodifica arquivos de áudio no momento em que são abertos ou lidos.
Ela permite usar sua coleção de músicas FLAC — mesmo que seu hardware/software não tenha suporte a este formato.

Se você quiser transferir os MP3 para um pendrive, pode fazer isto como se fossem arquivos normais — o sistema se encarrega de convertê-los durante a transferência.
Outra vantagem da conversão “sob demanda” é que este método não te obriga a ter mais espaço em disco.


Se, por outro lado, você optasse por converter seus arquivos FLAC para MP3, teria que reservar um enorme espaço adicional para abrigar os arquivos duplicados, resultantes das conversões.
Em outras palavras, para cada arquivo.flac, seria criado outro arquivo.mp3 — imagine o espaço extra que você teria que ter para converter milhares de arquivos!

O mp3fs permite selecionar e copiar todos arquivos FLAC da origem e colar direto na pasta de destino. Eles serão individualmente convertidos para MP3 durante a transmissão.

Como instalar o mp3fs

Nas distribuições Linux que usam o gerenciador de pacotes APT (Debian, Ubuntu, Mint etc.), é possível encontrar o pacote de instalação nos repositórios oficiais.
Neste caso, use o APT:


sudo apt install mp3fs

Pra constar, instalei e usei com sucesso o mp3fs no Debian 9 “Stretch” e no KDE NEON (baseado no Ubuntu 16.04 LTS “Xenial Xerus”).

Como usar o mp3fs

A sintaxe do comando é bem simples.
Todas as minhas músicas, FLAC, OGG ou MP3, estão dentro do diretório “/home/justincase/music”.
Para facilitar, criei mais um diretório com o seguinte nome/caminho: “/mnt/music/mp3”
No exemplo, abaixo, vou montar o meu segundo diretório, com o mp3fs:


sudo mp3fs -b 192 /home/justincase/music/ /mnt/music/mp3 -o allow_other,ro

Se tudo der certo, já será possível visualizar os seus arquivos em /mnt/music/mp3 — todos já renomeados para mp3:


ls /mnt/music/mp3/

Experimente tocar um deles!
tribo de jah mp3 files
Na imagem, acima, todos os meus arquivos .flac estão com a extensão .mp3.

Referências

https://github.com/khenriks/mp3fs/blob/master/mp3fs.1.txt

A evolução do procfs para o sysfs

O Linux herdou do UNIX a metodologia para permitir que programas se informassem sobre os processos em andamento no sistema diretamente das estruturas armazenadas na memória do kernel —— ou seja, lendo diretamente o /dev/mem e interpretando os dados “nus e crus” contidos ali.
Era assim que o comando ps funcionava inicialmente.
Com o tempo, parte da informação passou a ser disponibilizada através de system calls.
Expor dados do sistema diretamente ao espaço do usuário, via /dev/mem se provou uma metodologia ineficiente e insegura, com o tempo.
Um novo método foi introduzido para facilitar o acesso a aos dados estruturados do sistema para os aplicativos do user-space — que foi a criação do sistema de arquivos /proc.
Com o /proc, as interfaces e as estruturas (diretórios e arquivos) poderiam se manter, mesmo havendo mudanças nas camadas internas do kernel.
Este método é menos frágil que o anterior e aguenta melhor o aumento na escala de trabalho do sistema.
O /proc filesystem foi projetado originalmente para publicar informações de processos e alguns atributos chave de sistema, requisitados por comandos como o ‘ps’, o ‘top’ e o ‘free’, por exemplo.
Sendo mais fácil de usar e obter informações a partir deste meio – tanto pelo lado do kernel quanto do lado do user-space – ele se tornou um verdadeiro depósito de informações de todo o tipo, vindas do sistema.
Além disto, ganhou arquivos com permissão de gravação, a serem usados para ajustar configurações e controlar a operação do kernel ou algum de seus vários subsistemas.
Em resumo, o aumento no uso do /proc para implementar controle de interfaces contribuiu para reduzir sua eficiência.

Isto levou os desenvolvedores a implementar, no kernel 2.6, uma nova metodologia, através do sysfs.
O sysfs ou /sys filesystem já foi projetado para adicionar suporte à estrutura do /proc e prover uma maneira uniforme de expor as informações do sistema e pontos de controle (sistema ajustável e atributos de drivers) para o user-space a partir do kernel.
Agora o framework de drivers, dentro do kernel, cria automaticamente os diretórios sob /sys a cada vez que um driver é registrado, baseado em seu tipo e nos valores contidos nas suas estruturas de dados.
Isto significa que os drivers de um tipo particular terão todos os mesmos elementos exibidos via sysfs.
O Linux vive uma fase de transição. Hoje, muitas informações “legadas” do sistema ainda são acessíveis no /proc. Contudo, todos os novos bus e drivers precisam expor suas informações e pontos de controle via sysfs — é para lá que estamos caminhando.

Referências

http://unix.stackexchange.com/questions/4884/what-is-the-difference-between-procfs-and-sysfs.

Como instalar suporte ao sistema de arquivos ZFS no Ubuntu

O sistema de arquivos ZFS foi projetado originalmente nos laboratórios da Sun Microsystems, bem antes da empresa ser adquirida pela Oracle.
Trata-se de um sistema de arquivos avançado, com um gestor de volumes lógicos.
open zfs logo
Além do Solaris e nos sistemas operacionais derivados, ele roda em várias outras plataformas.
No FreeBSD, o ZFS é o sistema de arquivos padrão.
À medida em que problemas de licenciamento foram sendo resolvidos, tornou-se possível portar o sistema para várias distribuições GNU/Linux, incluindo Debian, Ubuntu etc.

O ZFS possui recursos importantes de proteção contra corrupção de dados, além de compressão, gestão de volumes, integridade de dados, software RAID, cache e muito mais.

Os exemplos deste texto se baseiam em uma instalação Ubuntu 16.04 LTS. Se você deseja obter informações mais específicas sobre instalação do ZFS no Debian, leia este artigo.
Os links do texto e da seção “Referências”, ao final, podem ajudar, caso você deseje aprofundar mais em determinado assunto.

Como instalar o ZFS no Ubuntu 16.04

No exemplo abaixo, vou demonstrar como encontrar softwares relacionados ao ZFS e como instalar o que você precisa.
Como sempre, comece por atualizar os repositórios. Depois faça a busca, com ‘search‘:

sudo apt update
sudo apt search openzfs

O resultado pode ser extenso (e nem tudo serve ao que queremos realizar aqui):

 Sorting...
            Full Text Search...
            libuutil1linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Solaris userland utility library for Linux  

            libuutil1linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for libuutil1linux

            libzfs2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem library for Linux            

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all

            libzfslinux-dev/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem development files for Linux 

            libzpool2linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS pool library for Linux
                      
            zfs-dkms/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS filesystem kernel modules for Linux

            zfs-doc/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS filesystem documentation and examples.

            zfs-initramfs/xenial-updates,xenial-updates 0.6.5.6-0ubuntu10 all
              Native OpenZFS root filesystem capabilities for Linux

            zfs-zed/xenial-updates 0.6.5.6-0ubuntu10 amd64
              OpenZFS Event Daemon (zed)

            zfsutils-linux/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Native OpenZFS management utilities for Linux

            zfsutils-linux-dbg/xenial-updates 0.6.5.6-0ubuntu10 amd64
              Debugging symbols for zfsutils-linux

Para fazer a instalação do sistema ZFS básico, basta executar o comando que segue:

sudo apt install zfs

As dependências necessárias, como você já deve saber, serão instaladas automaticamente.
Para verificar se o suporte ao sistema de arquivos se encontra instalado no seu sistema:
use o comando cat:

cat /proc/filesystems | grep zfs
	zfs

Se o seu resultado estiver de acordo com o que se vê acima, então tudo correu bem.

Referências

Como instalar o ZFS no Debian.
Conheça o sistema de arquivos ZFS.