Sistema de arquivos e gerenciamento de discos

LinuxBeginner
Pratique Agora

Introdução

O armazenamento no Linux possui várias camadas relacionadas. Um dispositivo pode conter partições; uma partição ou imagem pode conter um sistema de arquivos; e um sistema de arquivos fica acessível quando é conectado à árvore de diretórios em um ponto de montagem. Manter esses conceitos separados torna os comandos de disco muito mais fáceis de entender.

Neste laboratório, você inspecionará o armazenamento com segurança, analisará o uso de espaço, criará um sistema de arquivos ext4 dentro de um arquivo comum, montará e desmontará esse sistema, lerá informações de partições e criará um arquivo fstab para prática. Todas as operações de escrita usam arquivos descartáveis criados para o laboratório; você não particionará um disco real nem modificará o /etc/fstab do sistema.

Entenda as camadas de armazenamento do Linux

Nesta etapa, você inspecionará a relação entre dispositivos de bloco, sistemas de arquivos e pontos de montagem. Em seguida, preparará um espaço de trabalho seguro.

O comando lsblk significa “listar dispositivos de bloco”. A opção -o seleciona as colunas que serão exibidas:

lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS

Leia a saída da esquerda para a direita:

  • NAME identifica o dispositivo ou a partição.
  • TYPE diferencia discos, partições e dispositivos loop.
  • SIZE mostra a capacidade.
  • FSTYPE mostra o tipo de sistema de arquivos detectado, quando houver um.
  • MOUNTPOINTS mostra onde o sistema de arquivos está conectado à árvore de diretórios.

Um disco pode conter uma ou mais partições. Um sistema de arquivos, como ext4, organiza arquivos dentro de uma partição ou de outro objeto de armazenamento. Um ponto de montagem é um diretório comum por meio do qual o Linux expõe esse sistema de arquivos.

Use findmnt para identificar o sistema de arquivos que contém atualmente o diretório do projeto. A opção -T aceita qualquer caminho e encontra o sistema de arquivos montado correspondente:

findmnt -T /home/labex/project

O dispositivo de origem exato pode variar, mas a saída mostra a origem, o destino, o tipo de sistema de arquivos e as opções de montagem.

O comando blkid lê assinaturas de sistemas de arquivos, rótulos e UUIDs. É necessário ter acesso administrativo para inspecionar todos os dispositivos de bloco disponíveis:

sudo blkid

Um UUID é um identificador do sistema de arquivos projetado para permanecer estável mesmo quando o nome do dispositivo muda. Você usará esse conceito mais adiante ao estudar montagens persistentes.

Crie e acesse um espaço de trabalho dedicado:

mkdir -p /home/labex/project/storage-lab
cd /home/labex/project/storage-lab
pwd

A saída final deve ser /home/labex/project/storage-lab.

Analise o uso do sistema de arquivos e dos diretórios

Nesta etapa, você comparará df, que informa o espaço disponível em sistemas de arquivos completos, com du, que mede arquivos e árvores de diretórios.

Crie dois arquivos de exemplo com tamanhos aparentes conhecidos. A opção truncate -s define o tamanho de um arquivo com eficiência, sem preenchê-lo com dados reais:

cd /home/labex/project/storage-lab
mkdir -p usage/reports usage/archive
truncate -s 2M usage/reports/weekly.log
truncate -s 5M usage/archive/records.bin

Use df -h no espaço de trabalho. A opção -h exibe unidades legíveis, como MiB e GiB:

df -h /home/labex/project/storage-lab

O df responde: “Quanto espaço está sendo usado e quanto está disponível no sistema de arquivos que contém este caminho?”. As colunas importantes são Size, Used, Avail, Use% e Mounted on.

Use du -sh para resumir o diretório de exemplo. Aqui, -s significa resumo e -h seleciona unidades legíveis:

du -sh usage

Ao contrário de df, o du responde: “Quanto espaço pertence a este arquivo ou árvore de diretórios?”. Arquivos esparsos criados com truncate podem ter um tamanho aparente grande e, ao mesmo tempo, consumir pouco espaço de disco alocado. A opção --apparent-size mede os tamanhos lógicos:

du -h --apparent-size --max-depth=1 usage

Você deve ver que usage/archive é maior que usage/reports. Combine du com a ordenação para listar primeiro os itens aparentes maiores:

du -ah --apparent-size usage | sort -rh | head -n 5

O pipe envia a saída de du para sort; -r inverte a ordem e -h entende os sufixos de tamanho legíveis. head -n 5 mantém apenas os cinco primeiros resultados.

Crie e inspecione um sistema de arquivos ext4

Nesta etapa, você criará uma imagem de disco virtual, formatará essa imagem com ext4 e inspecionará os metadados do sistema de arquivos sem tocar em um disco real.

Crie um arquivo de imagem de 128 MiB. Esse arquivo será usado como armazenamento descartável no restante do laboratório:

cd /home/labex/project/storage-lab
truncate -s 128M virtual.img

Verifique o tamanho aparente:

ls -lh virtual.img

Antes da formatação, file identifica apenas dados genéricos ou um arquivo vazio:

file virtual.img

O comando mkfs.ext4 cria um sistema de arquivos ext4. A opção -F confirma que um arquivo comum é o destino intencional, e -L atribui o rótulo LABEXDATA:

sudo mkfs.ext4 -F -L LABEXDATA virtual.img

A formatação cria estruturas do sistema de arquivos dentro da imagem. Inspecione o resultado com duas ferramentas:

file virtual.img
sudo blkid -p virtual.img

A saída deve identificar ext4, mostrar o rótulo LABEXDATA e incluir um UUID gerado. Exiba somente esse UUID:

sudo blkid -s UUID -o value virtual.img

O valor do UUID é gerado durante a formatação e será diferente para cada pessoa.

Monte, use e desmonte o sistema de arquivos

Nesta etapa, você conectará o sistema de arquivos virtual à árvore de diretórios do Linux, gravará um arquivo e o desconectará com segurança.

Um ponto de montagem é o diretório onde um sistema de arquivos fica visível. Crie um ponto de montagem em /mnt, um local padrão para montagens administrativas temporárias:

sudo mkdir -p /mnt/labex-virtual

Monte a imagem. A opção -o loop solicita que o Linux associe o arquivo comum a um dispositivo loop, para que ele possa ser tratado como armazenamento de bloco:

cd /home/labex/project/storage-lab
sudo mount -o loop virtual.img /mnt/labex-virtual

Inspecione a montagem ativa:

findmnt /mnt/labex-virtual

A origem geralmente aparece como um dispositivo loop, o destino é /mnt/labex-virtual e o tipo de sistema de arquivos é ext4. Você também pode consultar o df sobre esse sistema de arquivos específico:

df -h /mnt/labex-virtual

Grave um arquivo dentro do sistema de arquivos montado. sudo sh -c é usado porque o redirecionamento é executado pelo shell, e o diretório raiz da montagem pertence a root:

sudo sh -c 'echo "stored inside the virtual filesystem" > /mnt/labex-virtual/welcome.txt'
cat /mnt/labex-virtual/welcome.txt

A desmontagem grava todas as operações pendentes e desconecta o sistema de arquivos do ponto de montagem:

sudo umount /mnt/labex-virtual

Confirme que ele não está mais montado:

findmnt /mnt/labex-virtual

Nenhuma saída é esperada, e findmnt retorna um status diferente de zero porque não encontrou uma montagem ativa nesse destino. O diretório do ponto de montagem continua existindo, mas o conteúdo da imagem não fica mais acessível por meio dele até que a imagem seja montada novamente.

Inspecione tabelas de partição com segurança

Nesta etapa, você usará fdisk no modo de listagem somente leitura e diferenciará uma tabela de partições de uma assinatura de sistema de arquivos.

Liste os discos e as partições visíveis do sistema:

sudo fdisk -l

A opção -l significa listar. Ela informa tamanhos de disco, tamanhos de setor, tipos de tabela de partições e partições sem modificá-los. Nunca inicie uma sessão interativa de particionamento em um disco de produção desconhecido.

Agora inspecione a imagem virtual:

cd /home/labex/project/storage-lab
sudo fdisk -l virtual.img

A imagem tem um tamanho de disco, mas não possui entradas de partição. Neste exemplo controlado, o ext4 foi criado diretamente em toda a imagem. Em um disco físico, uma disposição comum é:

disk device -> partition table -> partition -> filesystem -> mount point

Crie uma segunda imagem vazia para comparação:

truncate -s 64M partition-demo.img
sudo fdisk -l partition-demo.img

Ela também não possui uma tabela de partições. Compare as assinaturas dos sistemas de arquivos com wipefs, usando o modo padrão somente leitura:

sudo wipefs virtual.img partition-demo.img

virtual.img deve mostrar uma assinatura ext4, enquanto a imagem vazia usada para comparação não deve mostrar nenhuma assinatura de sistema de arquivos. Não use a opção destrutiva wipefs -a neste laboratório.

Crie e valide um fstab para prática

Nesta etapa, você aprenderá os seis campos de uma entrada do fstab e testará com segurança um arquivo separado para prática, sem modificar o /etc/fstab.

O sistema lê o /etc/fstab para decidir quais sistemas de arquivos devem ser montados de forma consistente. Exiba as linhas que não são comentários sem editar o arquivo:

grep -Ev '^\s*(#|$)' /etc/fstab

Uma entrada do fstab possui seis campos separados por espaços em branco:

source  mount-point  filesystem-type  options  dump  fsck-order

Para partições físicas, UUID=<value> geralmente é mais seguro que um nome como /dev/sdb1, porque os nomes dos dispositivos podem mudar quando a ordem de detecção do hardware muda.

Capture o UUID da imagem e coloque um exemplo de UUID comentado em um arquivo de prática:

cd /home/labex/project/storage-lab
uuid=$(sudo blkid -s UUID -o value virtual.img)
printf '## Real block device example: UUID=%s /mnt/data ext4 defaults,nofail 0 2\n' "$uuid" > practice-fstab

Como este laboratório usa um arquivo comum em vez de uma partição física, a entrada ativa de prática usa o caminho absoluto da imagem e a opção loop:

printf '%s\n' '/home/labex/project/storage-lab/virtual.img /mnt/labex-virtual ext4 loop,nofail 0 2' >> practice-fstab

Exiba e valide o arquivo de prática. --tab-file informa ao findmnt para não usar o /etc/fstab real:

cat practice-fstab
findmnt --verify --tab-file practice-fstab

O resumo final deve informar 0 parse errors e 0 errors. Ele também informa um aviso de que a origem é um arquivo comum. Esse aviso é esperado aqui, porque este laboratório usa intencionalmente um sistema de arquivos loop baseado em arquivo, e não um dispositivo de bloco físico.

Use o arquivo de prática para realizar uma montagem controlada. A opção -T informa ao mount que ele deve ler o arquivo fstab alternativo indicado:

sudo mount -T practice-fstab /mnt/labex-virtual
findmnt /mnt/labex-virtual

O arquivo welcome.txt criado anteriormente ainda deve existir, comprovando que a montagem expõe os dados armazenados no sistema de arquivos:

cat /mnt/labex-virtual/welcome.txt

Desmonte-o novamente para que o laboratório termine em um estado seguro e desconectado:

sudo umount /mnt/labex-virtual

Você validou a sintaxe de uma montagem persistente sem alterar a configuração de inicialização do sistema. Um erro no /etc/fstab real pode prejudicar a inicialização, por isso os administradores geralmente validam as alterações antes de reiniciar o sistema.

Resumo

Você conectou as principais camadas de armazenamento do Linux: dispositivos, partições, sistemas de arquivos e pontos de montagem. Usou lsblk, blkid e findmnt para inspecioná-las e comparou o uso em todo o sistema de arquivos, obtido com df, com o uso de arquivos e diretórios, obtido com du.

Você criou e rotulou um sistema de arquivos ext4 dentro de uma imagem descartável, montou-o por meio de um dispositivo loop, preservou dados após uma desmontagem e inspecionou informações de partições sem alterar discos reais. Por fim, aprendeu os seis campos do fstab, entendeu por que UUIDs estáveis são importantes e descobriu como validar um fstab separado de prática antes de usá-lo.