Tutorial de Linux / Monte sistemas de arquivos e investigue o uso do armazenamento

Montar um sistema de arquivos permite acessá-lo por um diretório no Linux. Confira o alvo e o ponto de montagem antes de conectá-lo e depois use findmnt para verificar a origem, o caminho e as opções reais. Para investigar falta de espaço, examine tanto a capacidade em bytes quanto o uso de inodes.

Antes de escolher um alvo para formatação, reveja a diferença entre discos, partições e sistemas de arquivos. O exercício abaixo usa apenas uma imagem temporária nova.

Os exercícios de configuração usam uma máquina virtual (VM) convencional Ubuntu 26.04 LTS ou Rocky Linux 9 como referência. Contêineres, WSL e outras versões podem ter serviços e pacotes diferentes. Prepare a recuperação pelo console e registre as versões usando a aula de preparação da máquina virtual, em inglês.

Entenda o que um ponto de montagem pode ocultar

Montar outro sistema de arquivos sobre um diretório que contém arquivos oculta as entradas anteriores enquanto a montagem permanece ativa; não as apaga. Elas voltam a aparecer após a desmontagem. Use um diretório vazio no exercício e consulte o caminho com findmnt -T para identificar o armazenamento que o atende naquele momento.

findmnt -T "$HOME"
df -hT "$HOME"
df -i "$HOME"

Esses comandos mostram a montagem que contém seu diretório pessoal, o espaço utilizado e o uso de inodes. Um inode representa um objeto de arquivo e seus metadados. Muitos arquivos pequenos podem esgotar os inodes mesmo quando ainda há bytes livres. A forma de relatar o uso e os limites variam conforme o sistema de arquivos.

Monte, grave e desmonte uma imagem nova

Execute este exemplo independente em uma VM de prática descartável, com sudo e ferramentas ext4. Um contêiner restrito pode não permitir montagens. O exemplo não depende das variáveis de outra aula e formata somente um arquivo de imagem recém-criado.

Salve todo o código abaixo como mount-lab.sh, com quebras de linha LF, e execute bash mount-lab.sh. São necessários Bash, util-linux, e2fsprogs e acesso a sudo. No Ubuntu, prepare as ferramentas com sudo apt install util-linux e2fsprogs; no Rocky, use sudo dnf install util-linux e2fsprogs. O script aloca explicitamente um dispositivo de loop e só grava depois que a consulta ao ponto de montagem exato informa esse dispositivo como origem. Falhas de preparação interrompem a execução antes da gravação.

#!/usr/bin/env bash
set -u
set -o pipefail
for tool in mktemp truncate mkfs.ext4 losetup mount umount findmnt sudo tee; do
  command -v "$tool" >/dev/null || { printf 'Missing tool: %s\n' "$tool" >&2; exit 1; }
done
sudo -v || exit 1
lab=$(mktemp -d "$HOME/linux-mount-lab.XXXXXX") || exit 1
img=$lab/disk.img
mnt=$lab/mnt
loop=''
cleanup() {
  result=$?
  trap - EXIT
  if [[ -n "$loop" ]]; then
    source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE)
    lookup=$?
    if (( lookup == 0 )) && [[ "$source" == "$loop" ]]; then
      sudo umount -- "$mnt" || result=1
    elif (( lookup != 1 )); then
      printf 'Inspect mount before cleanup: %s\n' "$mnt" >&2
      result=1
    fi
    if findmnt -rn --source "$loop" >/dev/null; then
      printf 'Still mounted; keeping loop device: %s\n' "$loop" >&2
      result=1
    else
      lookup=$?
      if (( lookup == 1 )); then
        sudo losetup --detach "$loop" || result=1
      else
        printf 'Cannot verify loop usage; keeping: %s\n' "$loop" >&2
        result=1
      fi
    fi
  fi
  printf 'Lab retained for inspection: %s\n' "$lab"
  exit "$result"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
truncate -s 128M "$img" || exit 1
mkfs.ext4 -F "$img" || exit 1
mkdir "$mnt" || exit 1
loop=$(sudo losetup --find --show "$img") || exit 1
[[ "$loop" == /dev/loop* ]] || { printf 'Unexpected loop device\n' >&2; exit 1; }
sudo mount -t ext4 -o nodev,nosuid "$loop" "$mnt" || exit 1
source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE) || exit 1
[[ "$source" == "$loop" ]] || { printf 'Mount source mismatch; no write\n' >&2; exit 1; }
printf 'mounted storage\n' | sudo tee "$mnt/note.txt" >/dev/null || exit 1
cat "$mnt/note.txt" || exit 1
sudo umount -- "$mnt" || exit 1
if findmnt -rn --mountpoint "$mnt"; then
  printf 'Mount still present\n' >&2
  exit 1
else
  lookup=$?
  (( lookup == 1 )) || exit 1
fi
printf 'Unmount verified\n'

Em uma execução bem-sucedida, aparecem mounted storage e Unmount verified. A rotina de saída procura desmontar o dispositivo verificado nesse ponto e separar o dispositivo de loop quando a consulta não encontra montagens que o utilizem. A pasta e a imagem são mantidas para inspeção; o caminho é impresso ao final. Uma nova execução cria uma pasta diferente.

O exercício pressupõe uma VM pessoal sem outro administrador alterando as montagens simultaneamente. A checagem da origem e a gravação não são uma operação atômica. Além disso, o manual do findmnt informa que o status 1 pode indicar tanto ausência de resultados quanto erro. Portanto, esse script não distingue todos os erros de consulta de uma montagem ausente; as mensagens de sucesso e as decisões de limpeza não são uma garantia absoluta de estado. Após falhas ou resultados inesperados, confira o caminho com findmnt --mountpoint e os dispositivos com sudo losetup --list. Não exclua arquivos se houver uma montagem ativa ou dúvida sobre o estado. Este exemplo não substitui uma ferramenta de gestão de armazenamento para produção.

Investigue uma montagem ocupada antes de forçar sua remoção

Um shell com o diretório atual dentro da montagem, um arquivo aberto ou um serviço em execução pode impedir a desmontagem. Mova os terminais para fora dela e encerre normalmente os programas envolvidos. Se estiverem disponíveis, fuser -vm MOUNT_PATH ou lsof ajudam na investigação; substitua MOUNT_PATH pelo caminho real. Não use encerramento forçado de processos nem desmontagem adiada como resposta padrão a uma causa desconhecida.

Verifique a configuração de montagens persistentes

/etc/fstab registra origem, ponto de montagem, tipo, opções, indicador de dump e ordem de verificação pelo fsck. Nomes de dispositivos podem mudar, por isso use um identificador estável, como UUID, quando apropriado. A linha abaixo ilustra um sistema ext4 secundário: substitua o identificador e o diretório pelos valores reais previamente preparados. Não copie essa linha sem adaptação nem cadastre a imagem temporária do exercício no fstab.

UUID=REPLACE_WITH_ACTUAL_UUID /srv/data ext4 defaults,nodev,nosuid 0 2

Faça backup do fstab e execute sudo findmnt --verify --verbose para verificar a sintaxe e os alvos acessíveis. Em sistemas com systemd, use sudo systemctl daemon-reload para atualizar a configuração das unidades geradas e depois teste deliberadamente a montagem específica. A verificação não garante todas as condições da próxima inicialização; mantenha uma rota de recuperação pelo console.

nofail permite que a inicialização prossiga sem um dispositivo opcional, mas não impede que um aplicativo grave no diretório vazio subjacente. Se o armazenamento for obrigatório, planeje as dependências de montagem e as condições de início dos serviços. Escolha opções de somente leitura, nodev, nosuid e noexec conforme a finalidade e as exigências dos programas; elas não são soluções universais de segurança.

Entenda as diferenças entre df e du antes de apagar dados

df -hT
df -i
du -xhd1 "$HOME" 2>/dev/null | sort -h

df informa a alocação no sistema de arquivos; du percorre os arquivos acessíveis. Arquivos apagados que continuam abertos por processos, caminhos sem permissão de leitura, blocos reservados e metadados podem causar diferenças. du -x evita atravessar limites entre sistemas de arquivos, mas percorrer uma árvore grande ainda gera operações de entrada e saída. O redirecionamento dos erros de permissão pode esconder dados que faltam no total. O status do encadeamento com sort também não prova, sozinho, que toda a leitura de du foi concluída.

Antes de remover um arquivo grande, identifique seu serviço responsável e as regras de retenção. Use rotação de logs ou os mecanismos de limpeza de cache do aplicativo. Remova imagens do exercício apenas depois de confirmar a desmontagem. Se alterou o fstab, restaure e verifique as entradas modificadas antes de limpar os arquivos.

Referências oficiais