Mão na massa · ~45 min
Mapeando o disco — e provando o que sobrevive a um container
Hoje você mapeia os discos da máquina, aprende a dupla de comandos que resolve o incidente "o disco encheu", confirma que dispositivos são arquivos como quaisquer outros, e termina provando na prática a diferença entre um container com e sem volume.
Passo 1 de 8
Mapeando os discos da máquina
lsblkO que é
Lista os dispositivos de bloco (discos e partições) em formato de árvore, mostrando tamanho e ponto de montagem.
Por que importa
É o primeiro comando de qualquer investigação de armazenamento — mostra a estrutura física antes de olhar o uso.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 74M 1 loop /snap/core22/1564 loop1 7:1 0 505M 1 loop /snap/gnome-42-2204/176 sda 8:0 0 25G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 25G 0 part / sr0 11:0 1 1024M 0 rom
o disco da sua VM (provavelmente sda, ~25G conforme configurado na Semana 0), com uma partição grande montada em /. As linhas loop no topo são os pacotes snap, cada um um arquivo montado como se fosse um disco — mais um exemplo de "tudo é arquivo". E o swap dos Encontros 9 e 10 não aparece: no Ubuntu 24.04 ele é um arquivo (/swap.img) dentro da partição /, não uma partição própria.
Passo 2 de 8
Quanto espaço resta
df -hO que é
"Disk free" — espaço usado e disponível por sistema de arquivos montado. O -h converte pra G/M legíveis.
Por que importa
Responde qual partição está cheia. É sempre o primeiro passo do incidente "a aplicação parou de gravar".
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 25G 8.1G 16G 35% / tmpfs 1.9G 0 1.9G 0% /dev/shm
a coluna Use% da partição /. Anote esse percentual — quando passa de ~90% em produção, é hora de agir.
O que é esse tmpfs que aparece na lista?
É um sistema de arquivos que vive na memória RAM, não em disco — some quando a máquina desliga. É outro exemplo da abstração do slide 6: algo que não é disco algum, mas aparece como um caminho normal na árvore de arquivos.
Passo 3 de 8
Quem está ocupando o espaço
df disse qual partição está cheia. O du diz o que, dentro dela, está ocupando lugar.sudo du -sh /var/* 2>/dev/null | sort -h | tail -5O que é
"Disk usage" — soma o tamanho de cada subdiretório de /var. O sort -h ordena por tamanho e o tail -5 mostra os cinco maiores.
Por que importa
/var é onde ficam logs e dados variáveis — o suspeito número um quando um disco enche sozinho.
$ sudo du -sh /var/* 2>/dev/null | sort -h | tail -5 28M /var/backups 94M /var/cache 312M /var/log 1.4G /var/lib
/var/lib e /var/log entre os maiores. Note o encadeamento de pipes — é exatamente a técnica do Encontro 6, agora aplicada a um problema real de diagnóstico.
O comando está demorando muito
O du percorre todos os arquivos, então demora proporcionalmente ao volume de dados. Nunca rode du direto na raiz / sem necessidade — comece por diretórios específicos, como fizemos com /var. O 2>/dev/null descarta erros de permissão (redirecionamento de stderr, do Encontro 6).
qual a diferença entre o que o df e o du respondem? Em que ordem você usaria os dois num incidente de "disco cheio"?
0 / 40 caracteres
Passo 4 de 8
Dispositivos são arquivos mesmo?
ls -l /dev/null /dev/zero /dev/sdaO que é
Lista três dispositivos como se fossem arquivos comuns. A primeira letra da permissão indica o tipo: c = caractere, b = bloco.
Por que importa
Confirma a nomeação uniforme do slide 5 — a razão de cat, dd e redirecionamento funcionarem igual com arquivo ou dispositivo.
$ ls -l /dev/null /dev/zero /dev/sda crw-rw-rw- 1 root root 1, 3 /dev/null crw-rw-rw- 1 root root 1, 5 /dev/zero brw-rw---- 1 root disk 8, 0 /dev/sda
c no início das linhas de null e zero, b na do disco. Repare também que, no lugar do tamanho, aparecem dois números (major, minor) — o endereço do driver no kernel.
Passo 5 de 8
O disco está sendo o gargalo?
iostat -x 1 3O que é
Estatísticas estendidas de E/S, 3 amostras de 1 segundo. As colunas-chave são %util (o quanto do tempo o disco teve trabalho em andamento) e r_await/w_await (tempo médio de cada leitura/escrita, em ms, contando a espera na fila). A primeira amostra é a média desde que a VM ligou; olhe as seguintes.
Por que importa
%util perto de 100% significa disco saturado — o gargalo é ele, não a CPU.
$ iostat -x 1 3 Device r/s rkB/s r_await w/s wkB/s w_await aqu-sz %util sda 0.42 18.60 0.61 3.18 126.40 4.83 0.02 1.20
%util baixo numa VM ociosa (a saída real tem mais colunas; procure estas). Para ver o número subir, abra outro terminal e rode dd if=/dev/zero of=teste bs=1M count=500 oflag=direct enquanto o iostat roda — e depois apague o arquivo com rm teste.
iostat: comando não encontrado
O iostat vem no pacote sysstat, que não é instalado por padrão no Ubuntu. Instale com sudo apt install sysstat. Se não conseguir instalar agora, pule este passo — os demais não dependem dele.
Passo 6 de 8
Sem volume: o dado morre com o container
Gravar → destruir → conferirO que é
Cria um arquivo na camada de escrita do próprio container, remove o container, e sobe outro para verificar se o arquivo continua lá.
Por que importa
Demonstra, sem margem pra dúvida, o que "container é efêmero" significa na prática.
$ docker run --name semvol alpine sh -c "echo 'dado importante' > /dados.txt && cat /dados.txt" dado importante $ docker rm semvol semvol $ docker run --rm alpine cat /dados.txt cat: can't open '/dados.txt': No such file or directory
o arquivo existe enquanto o container vive, e desaparece quando ele é removido. Pare um instante nessa linha de erro e pense: e se isso fosse o banco de dados de um sistema em produção?
Passo 7 de 8
Com volume: o dado sobrevive
-v meuvolume:/dadosO que é
-v meuvolume:/dados monta um volume gerenciado pelo Docker (gravado no disco do host) dentro do container, no caminho /dados.
Por que importa
É assim que se roda banco de dados, uploads de usuário, ou qualquer dado que não pode se perder quando o container reinicia.
$ docker run --name comvol -v meuvolume:/dados alpine sh -c "echo 'dado importante' > /dados/arquivo.txt" $ docker rm comvol comvol $ docker run --rm -v meuvolume:/dados alpine cat /dados/arquivo.txt dado importante
desta vez o conteúdo aparece, mesmo com o container original já destruído. O dado está no host, não no container. Confirme com docker volume ls que o volume continua existindo por conta própria.
Onde esse volume fica fisicamente no host?
Rode docker volume inspect meuvolume — o campo Mountpoint mostra o caminho real no disco da VM. É um diretório comum, dentro da área do Docker, exatamente no sistema de arquivos que você mapeou no passo 1.
o que aconteceu com o arquivo no passo 6 e no passo 7? Por que a diferença, se o comando era praticamente o mesmo?
0 / 40 caracteres
Passo 8 de 8
Limpando
docker volume rm meuvolumeO que é
Remove o volume e os dados dentro dele. Confira antes com docker volume ls e docker ps -a se sobrou algo dos testes.
Por que importa
Volumes órfãos acumulam silenciosamente e são causa comum de disco cheio em máquinas de desenvolvimento — exatamente o incidente do passo 2.
o nome do volume impresso de volta. Se der erro de "volume in use", remova antes os containers que ainda o referenciam.
livre: algo que te surpreendeu ou uma dúvida que sobrou de hoje
0 / 40 caracteres
Exemplo de observação forte × fraca
Observação fraca
"Com volume o arquivo ficou salvo e sem volume ele sumiu."
Observação forte
"No passo 6 o arquivo foi gravado na camada de escrita do próprio container — quando rodei docker rm, essa camada foi destruída junto e o dado se perdeu. No passo 7, o -v montou um diretório do host dentro do container, então a gravação aconteceu fora dele; por isso o dado sobreviveu à destruição. Na prática, isso significa que rodar um banco de dados em container sem volume é perder tudo no primeiro docker rm."
Checklist final
- Mapeei discos e partições com
lsblk - Verifiquei o espaço livre com
df -h - Encontrei os maiores consumidores de espaço com
du - Confirmei que dispositivos aparecem como arquivos em
/dev - Li
%utileawaitnoiostat(ou registrei que o pacote não estava disponível) - Comprovei que o dado some num container sem volume
- Comprovei que o dado sobrevive com volume montado
- Limpei containers e volumes de teste
- Preenchi as 3 observações acima (vou colar no quiz semanal)