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.

Introdução ao sistema de arquivos BTRFS – parte 2

Este post tem intenção de mostrar, na prática, como lidar com o sistema de arquivos Btrfs, no Linux.
Basicamente, vou cobrir algumas tarefas administrativas, o que inclui criar um sistema de arquivos Btrfs, montá-lo, alterar seu tamanho, usar compressão e auto desfragmentação.
É importante que se diga que o Btrfs, anunciado em 2007, ainda está em fase beta — neste momento, esta é a posição oficial dos desenvolvedores.
Sistema de arquivos Btrfs - logo
Contudo, há grandes empresas que usam o Btrfs em produção, mas ninguém, em sã consciência, abre mão de fazer seus backups. Problemas sempre podem aparecer.

Notas preliminares

Eu venho usando este sistema na minha máquina de trabalho há aproximadamente 6 meses e sem incidentes.
Atualmente, uso o Debian 8.3 “Jessie”, com o kernel 4.3.
Tudo o que descrevo, neste texto, funciona para mim. Não há qualquer garantia de que funcione para você, contudo.
Os comandos, descritos aqui, foram executados em alguns drives USB (vulgo, pendrives…) — o que está longe de ser o ideal para testar um sistema de arquivos tão robusto, mas serve para ilustrar o texto.
Debian 8 GNU/Linux terminal
Usuários Ubuntu, opcionalmente, podem usar o apt-get em vez do aptitude para instalar aplicativos — se isto os fizer sentir mais confortáveis.
Se quiser saber melhor as diferenças entre os dois, leia este artigo.
Outro ponto importante é que a maioria dos comandos, são usados com privilégios administrativos (com todos os perigos que isto implica).
Portanto, não esqueça de usar o ‘sudo’ no início da linha de comando ou logar como ‘root’ (que foi o que eu fiz).
Se você tiver curiosidade, leia Diferenças entre SU e SUDO.

Como instalar o suporte a Btrfs

Se você já instalou o Btrfs, pode pular esta parte.

Uma palavrinha sobre os backports…

Depois que instalei suporte aos backports no Debian, adquiri o hábito de checar se há pacotes mais atuais naqueles repositórios antes de instalar alguma coisa.
No meu caso, não há versão mais atual disponível nos backports, como é possível observar abaixo:

aptitude show btrfs-tools | grep -i vers
Versão: 3.17-1.1

aptitude -t jessie-backports show btrfs-tools | grep -i vers
Versão: 3.17-1.1

Sigamos em frente… 😉

Como ele já está incluído no kernel principal desde a versão 2.6.29-rc1, tudo o que você precisa é instalar as ferramentas para lidar com o sistema de arquivos Btrfs no espaço do usuário ou user space. Veja como:

aptitude update
aptitude install btrfs-tools

Isto é tudo.
Baixar o código fonte e compilá-lo, também é uma opção e pode te dar uma versão bleeding edge, ou seja, a última disponibilizada pelos desenvolvedores — mas vai impor alguns sacrifícios à estabilidade do seu sistema.

Como criar um sistema de arquivos Btrfs

Uma das várias boas notícias, aqui, é que você não precisa usar ferramentas de particionamento, como o fdisk, para preparar o dispositivo antes de formatá-lo com o Btrfs.
O sistema pode ser criado direto, com um único comando:

mkfs.btrfs /dev/sdc

Você pode usar um comando assim, para criar um volume novo até em mídias ainda não formatadas.
Se já houver algum sistema de arquivos (mesmo que seja Btrfs), o utilitário irá avisar:

/dev/sdc appears to contain an existing filesystem (iso9660).
Error: Use the -f option to force overwrite.
See http://btrfs.wiki.kernel.org for more information.

Se você tiver certeza do que está fazendo, pode “forçar” a criação do novo sistema de arquivos no dispositivo:

mkfs.btrfs -f /dev/sdc

Ao formatar a unidade, o mkfs irá aplicar as opções mais adequadas, automaticamente, para o tipo de mídia em questão. Veja o meu resultado, abaixo:

Btrfs v3.17

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
fs created label (null) on /dev/sdc
	nodesize 16384 leafsize 16384 sectorsize 4096 size 7.50GiB

Antes de concluir o tema, acho interessante falar destas duas opções de criação de um sistema de arquivos: --label e --mixed.
Ambas podem ser abreviadas, respectivamente, para ‘-L’ e ‘-M’.
A primeira serve para dar um nome (até 256 caracteres) ao seu volume e a segunda, mistura (mixa) partes de dados e metadados para obter um uso mais eficiente de espaço.
A aplicação deste recurso penaliza a performance em sistemas de arquivos maiores. Por isto, é recomendado apenas em pequenos sistemas de arquivos com 1 GiB de espaço ou menos.
Veja um exemplo de sua aplicação:

mkfs.btrfs --force --mixed --label "Justin Case" /dev/sdc

Para obter informações sobre o sistema de arquivos criado use o seguinte comando:

btrfs filesystem show /dev/sdc

Como montar um sistema de arquivos Btrfs

Se você conectar um dispositivo de armazenamento com um sistema de arquivos Btrfs, o Linux irá montá-lo automaticamente.
As opções, descritas a seguir, podem ser usadas por quem deseja fazer uso de algum recurso no momento da montagem ou configurar o fstab para obter resultados específicos.
A sintaxe do comando para montar uma unidade Btrfs não é muito diferente da usada para outros sistemas de arquivos. Veja um exemplo simples:

mount -t auto /dev/sdc /mnt

Como você pode ver, usei o parâmetro ‘auto’, por que sei que o kernel irá identificar corretamente o sistema de arquivos do dispositivo.
Mas eu o poderia indicar também, como pode ser observado no exemplo abaixo:

mount -t btrfs /dev/sdc /mnt

Ambas opções detectam e automatizam a escolha das opções de montagem mais adequadas para o seu dispositivo.
Veja alguns exemplos de outros parâmetros de montagem que podem ser usados.
Para montar o dispositivo com a compressão ativada, use a opção ‘compress’:

mount -t btrfs -o compress /dev/sdc /mnt

O algoritmo padrão de compressão é o zlib. Mas você pode usar também o LZO.
Entenda a diferença entre os dois e obtenha mais detalhes da aplicação no artigo Como ativar compressão no Btrfs.
Caso o sistema de arquivos já esteja montado, use o parâmetro ‘remount’:

mount -t btrfs -o remount,compress /dev/sdc /mnt

Assim, não será necessário desmontar e montar manualmente.
Se quiser ver as opções de montagem atuais da sua unidade Btrfs, use o mount combinado com o comando grep.

mount | grep btrfs

O meu resultado é o que segue:

/dev/sdc on /mnt type btrfs (rw,relatime,compress=zlib,space_cache,subvolid=5,subvol=/)

Pode ser interessante fazer testes, montando o sistema manualmente.
Quando tudo estiver funcionando do jeito que você quer, inclua estas opções de montagem no arquivo fstab.
Ao usar ‘autodefrag’, na montagem, o sistema irá executar o processo de desfragmentação em background ou nos bastidores, sem atrapalhar o uso da máquina, sempre que detectar alguma gravação aleatória.
Segue um exemplo de uso:

mount -t btrfs -o remount,compress,autodefrag /dev/sdc /mnt

Se você estiver tendo algum problema grave com a sua unidade de armazenamento, pode tentar recuperá-la durante a montagem, com ‘recovery’:

mount -o recovery /dev/sdc /mnt 

Como alterar o tamanho de um volume Btrfs

Não há necessidade de desmontar o volume para alterar o seu tamanho. Esta operação pode ser feita online.
Para reduzir o tamanho da unidade em 5 GiB, use o seguinte comando:

btrfs filesystem resize -5g /mnt

Para aumentar o tamanho em 500 MiB, use o seguinte comando:

btrfs filesystem resize +500m /mnt

Se isto não for possível, o sistema retornará o erro:

Resize '/mnt/' of '+500m'
ERROR: unable to resize '/mnt/' - File too large

Para ver o novo tamanho do volume, use o comando df:

df -h /mnt/
Sist. Arq.      Tam. Usado Disp. Uso% Montado em
/dev/sdc        4,1G   32M  3,3G   1% /mnt

Simples, não é?
Este artigo, dá uma ideia inicial das possibilidades do sistema de arquivos Brtfs e lhe permite começar a explorar toda a sua robustez.
Não esqueça de se aprofundar mais no assunto, lendo os textos linkados.
Divirta-se!

Diferenças entre os sistemas de arquivos Ext4 e Btrfs

O sistema de arquivos Btrfs foi lançado no final de Julho de 2013 — é um sistema de arquivos relativamente novo, escrito do zero e que ainda está provando a que veio.
Surgiu da necessidade dos desenvolvedores de ter um sistema que incluísse pooling, snapshots e checksums, entre outros recursos — presentes também no ZFS.
ext4 vs btrfs

A pronúncia do nome, em inglês, é alvo de uma (bem leve) polêmica.
Pode ser Butter FS, Better FS ou B-Tree FS — sendo que, este último, está mais próximo do nome original.

Diferenças básicas entre o Ext4 e o Btrfs

Já que muitos usuários Linux, que desejam experimentar o novo sistema, vêm do Ext4, faz sentido enumerar alguns pontos que realçam as diferenças entre os dois:

  • O Ext4 ainda é a melhor escolha, no desktop do usuário comum — por ser mais rápido na transferência de arquivos e por ser mais maduro
  • O Btrfs tem vários recursos, que são novidades, tais com o Copy-on-Write, snapshots, checksums extensivos, scrubbing, duplicação dos dados, informações de autocorreção (self-healing) etc.
  • Os recursos de RAID-Z, presentes no ZFS, ainda são experimentais, neste momento, no Btrfs.
  • O Btrfs é fruto de um esforço patrocinado pela Oracle Corporation, Fujitsu e Red Hat — abaixo, há uma relação mais completa.
  • O Ext4 foi desenvolvido por Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts’o, Eric Sandeen, Sam Naghshineh, entre outros.
  • O Btrfs tem suporte no Linux; O Ext4 tem suporte nativo no Linux, no FreeBSD e no Android.

O Btrfs faz parte da nova geração de sistemas de arquivos do Linux, projetada para tirar o máximo dos novos dispositivos e métodos de armazenamento, como as unidades SSD.
Se você está acostumado a usar LVM e RAID para gerenciar os seus dados, o Btrfs está pronto para substituí-los.
O snapshot é um conceito semelhante à captura de telas com o PrtScr.
O recurso consiste em fazer uma cópia em imagem de um subvolume Btrfs em um determinado ponto no tempo — o que é muito mais rápido do que um backup tradicional e não implica em parar o sistema.
Você pode tirar snapshots do seu sistema quando quiser — o mais comum é fazê-lo antes de instalar algum novo programa ou fazer alterações significativas.
Este recurso permite voltar “no tempo”, se algo der errado.

A lista atual de empresas que contribuem para o código do Btrfs, é a seguinte:

  • Facebook
  • Fujitsu
  • Fusion-IO
  • Intel
  • Linux Foundation
  • Netgear
  • Novell/SUSE
  • Oracle
  • Red Hat
  • STRATO AG

Quais são os recursos disponíveis no Btrfs

À medida em que as unidades de armazenamento vão aumentando suas capacidades e os SSD caminham para se tornar padrão de mercado, espera-se que os sistemas de arquivos façam sua escalada para atender às novas demandas que a tecnologia impõe.

No artigo Introdução ao sistema de arquivos Btrfs, explicamos, com maior riqueza de detalhes, os recursos presentes no sistema.

Até o momento, a capacidade do Btrfs, inclui os seguintes itens:

  • Capacidade de armazenamento de arquivos com tamanhos de até 2^64 byte == 16 EiB (Em função do VFS do Linux, o limite prático é 8 EiB)
  • Empacotamento de arquivos pequenos, para fazer uso eficiente do espaço.
  • Diretórios indexados, também para uso eficiente do espaço.
  • Alocação dinâmica de inodes.
  • Um snapshot pode ser alterável (writable) ou não (read-only).
  • Suporte a subvolumes — sistemas de arquivos raiz internos e separados.
  • Checksums sobre dados e metadados (crc32c)
  • Compressão por algoritmos zlib ou LZO.
  • Suporte a dispositivos múltiplos integrados.
  • Recursos de detecção de armazenamento em SSD ou flash — com suporte nativo a TRIM/Discard, com relatório de blocos livres para reuso.
  • Backup incremental eficiente.
  • Processo de limpeza (scrub) em background para encontrar e corrigir erros em arquivos com cópias redundantes.
  • Desfragmentação online.
  • Verificação do sistema de arquivos offline.
  • Conversão local de sistemas de arquivos Ext3 ou Ext4.
  • Dispositivos semente ou semeadores — Em inglês, são chamados seed devices.
    Refere-se a capacidade de criar sistemas de arquivos (apenas de leitura) que funcionam como moldes para criar outros sistemas de arquivos Btrfs.
  • Suporte a quota em subvolumes.
  • Relatórios de mudanças em subvolumes.
  • Espelhamento incremental eficiente de sistemas de arquivos.

Outros recursos estão em desenvolvimento para o sistema, o que inclui:

  • Checagem offline e mais rápida do sistema de arquivos.
  • Checagem online do sistema de arquivos.
  • Remoção e espelhamento no nível do objeto.
  • Algoritmos de checksum alternativos.
  • Deduplicação in-band (ocorre durante as gravações).
  • Adição de outros algoritmos de compressão: Snappy, LZ4.

Referências

https://help.ubuntu.com/community/btrfs.
https://btrfs.wiki.kernel.org/index.php/Main_Page.
http://www.differencebtw.com/difference-between-btrfs-and-ext4/.