Domine o `mkfs`: Crie e gerencie sistemas de arquivos Linux com segurança!

Antes de usar qualquer dispositivo de armazenamento conectado ao seu computador Linux, é crucial criar um sistema de arquivos. Este artigo explora como utilizar o comando `mkfs` e outras ferramentas para essa finalidade, abrangendo diversos tipos de sistemas de arquivos. Acompanhe para entender o processo.

O Papel do mkfs na Criação de Sistemas de Arquivos

O comando `mkfs` é a chave para construir sistemas de arquivos no Linux. Em outros sistemas operacionais, esse processo é conhecido como “formatação”. Essencialmente, `mkfs` prepara uma partição para o armazenamento de dados. Essa preparação não se limita a acomodar os arquivos em si, mas também a estabelecer uma estrutura para armazenar nomes, localizações e metadados dos arquivos, como datas de criação e modificação, tamanho, etc. Uma vez que o `mkfs` estabelece essa estrutura, você pode começar a adicionar arquivos à partição.

A sintaxe do `mkfs` é direta: você especifica a partição do dispositivo onde o sistema de arquivos será criado e o tipo de sistema de arquivos desejado. Nos bastidores, a maioria das distribuições Linux usa `mkfs` como um “wrapper” para `mke2fs`. O comando `mkfs` na verdade chama `mke2fs`, passando as opções que você definiu. Portanto, é `mke2fs` que realiza o trabalho pesado, embora `mkfs` receba o crédito.

A sintaxe do comando `mkfs` foi modernizada, com a forma antiga sendo considerada obsoleta. Apesar de ambas as formas funcionarem, utilizaremos o estilo moderno neste artigo.

Sistemas de Arquivos Disponíveis

A forma atual de usar o `mkfs` é digitar `mkfs` seguido do nome do sistema de arquivos a ser criado. Para descobrir quais sistemas de arquivos `mkfs` pode criar, digite `mkfs` e pressione a tecla Tab duas vezes. A lista resultante exibirá os sistemas de arquivos disponíveis no seu sistema Linux.

A imagem abaixo mostra os sistemas disponíveis no Ubuntu 18.04 LTS. Outras distribuições podem apresentar mais ou menos opções. Vamos examinar cada um brevemente, após uma rápida introdução sobre o conceito de “journaling”.

O “journaling” é uma característica crucial em sistemas de arquivos modernos. Sistemas de arquivos com journaling mantêm um registro (journal) das operações de escrita de arquivos pendentes. Ao gravar um arquivo, o registro é atualizado, permitindo que o sistema de arquivos se recupere de corrupções causadas por eventos como quedas de energia. Sistemas de arquivos mais antigos sem journaling podem ter um desempenho mais rápido, mas são mais suscetíveis a danos em caso de interrupção de gravação.

  • Ext2: O primeiro sistema de arquivos dedicado ao Linux, sucedendo o MINIX. O Ext2 não possui journaling.
  • Ext3: Uma evolução do Ext2, adiciona journaling para proteger contra corrupções devido a falhas e perda de energia.
  • Ext4: O sistema de arquivos padrão em muitas distribuições Linux, oferecendo desempenho, confiabilidade e recursos como redução de fragmentação.
  • BFS: O Boot File System, utilizado para a partição de boot. Geralmente, o processo de instalação do Linux o configura automaticamente.
  • FAT: Criado para disquetes, é um sistema de arquivos sem journaling. Sua principal utilidade é a compatibilidade com sistemas operacionais não Linux.
  • NTFS: Sistema de arquivos com journaling da Microsoft, introduzido com o Windows NT, também usado principalmente para compatibilidade com outros sistemas.
  • MINIX: Originalmente desenvolvido para fins educacionais, o sistema de arquivos MINIX é uma versão simplificada do sistema de arquivos Unix, útil em cenários específicos como desenvolvimento para a plataforma MINIX.
  • VFAT: Uma evolução do FAT, introduzida com o Windows 95 para suportar nomes de arquivos com até 255 caracteres, usada principalmente para compatibilidade.
  • CRAMFS: Um sistema de arquivos somente leitura para sistemas embarcados, também utilizado em processos de inicialização de computadores Linux.
  • MSDOS: O sistema de arquivos do MS-DOS, o mais elementar possível, com poucos usos práticos além da compatibilidade com sistemas legados.

Experimentando com Sistemas de Arquivos de Forma Segura

Criar um sistema de arquivos em uma partição apaga todos os dados existentes. Para experimentar sem riscos, o ideal é usar um disco rígido extra ou até mesmo um computador reserva. No entanto, podemos criar arquivos de imagem e sistemas de arquivos dentro deles para simular o processo sem hardware extra. Usaremos o comando `dd` para criar o arquivo de imagem.

O arquivo de imagem é criado copiando dados de uma fonte para um arquivo. Usaremos a opção `if` (input file) para especificar `/dev/zero`, um fluxo de zeros, como fonte de entrada. A opção `of` (output file) define o nome do arquivo de imagem, que chamaremos de “wdzwdz.img”.

O tamanho do arquivo de imagem é definido pelas opções `bs` (block size) para especificar o tamanho do bloco (1MB) e `count` para o número de blocos (250). Isso resultará em um sistema de arquivos de 250 MB. Ajuste esses valores conforme suas necessidades e o espaço disponível.

dd if=/dev/zero of=~/wdzwdz.img bs=1M count=250

Após a criação, o arquivo de imagem terá o tamanho especificado (250MB).

ls -hl

Criando o Sistema de Arquivos Ext2

Vamos optar pelo Ext2 para este exemplo, a versão mais antiga do sistema de arquivos Ext. Por não ter journaling, não armazene dados importantes sem backup. Usaremos `mkfs.ext2` para criar o sistema de arquivos no nosso arquivo de imagem:

mkfs.ext2 ~/wdzwdz.img

O sistema de arquivos é criado, e detalhes como o uso do comando `mke2fs` nos bastidores são exibidos.

Agora, precisamos montar o sistema de arquivos para poder utilizá-lo. Criaremos um ponto de montagem temporário em `/mnt` chamado “geek”.

sudo mkdir /mnt/geek

Montamos o arquivo de imagem:

sudo mount ~/wdzwdz.img /mnt/geek

Alteramos a propriedade do ponto de montagem para permitir acesso de leitura e escrita:

sudo chown dave:users /mnt/geek/

Agora, estamos prontos para usar o sistema de arquivos. Vamos copiar alguns arquivos:

cd /mnt/geek
cp ~/Documents/Code/*.? .

Verificando os arquivos copiados:

ls

Para finalizar, vamos desmontar o sistema de arquivos:

sudo umount /mnt/geek

Ao retornar ao ponto de montagem, os arquivos não estarão mais lá, pois estão contidos no arquivo de imagem desmontado:

cd /mnt/geek
ls

Explorando Outros Sistemas de Arquivos

O processo de criação de um novo sistema de arquivos é o mesmo. Vamos experimentar o MINIX. Dentro do diretório inicial, podemos criar um novo sistema de arquivos sobre o existente no arquivo de imagem.

Atenção: Certifique-se de recuperar todos os dados importantes do sistema de arquivos no arquivo de imagem antes de criar um novo, pois o processo é destrutivo.

mkfs.minix ~/wdzwdz.image

Montamos novamente o arquivo de imagem:

sudo mount ~/wdzwdz.img /mnt/geek

Criamos um arquivo no novo sistema de arquivos:

touch geek.txt

ls -ahl geek.txt

E assim, criamos, montamos e utilizamos um novo sistema de arquivos de forma rápida e fácil.

Removendo o Ponto de Montagem

Para finalizar, remova o ponto de montagem “geek” utilizando `rmdir`:

cd /mnt
sudo rmdir geek

Praticando sem Riscos

A prática leva à perfeição, especialmente no Linux. Mas, alguns comandos como o `mkfs` podem ser destrutivos. A chave é praticar sem comprometer o sistema ou dados. Agora, você tem um método seguro para criar e experimentar diferentes sistemas de arquivos com o `mkfs`, sem riscos para o seu computador.