Skip to main content

104.2 Mantendo a integridade do FS



Os sistemas de arquivos Linux modernos são registrados. Isso significa que cada operação é registrada em um log interno (o journal) antes de ser executada. Se a operação for interrompida devido a um erro do sistema (como kernel panic, falha de energia, etc.), ela pode ser reconstruída verificando o journal, evitando corrupção do sistema de arquivos e perda de dados.

Isso reduz muito a necessidade de verificações manuais do sistema de arquivos, mas ainda podem ser necessárias. Conhecer as ferramentas utilizadas para isso (e os parâmetros correspondentes) pode representar a diferença entre jantar em casa com sua família ou passar a noite na sala do servidor no trabalho.


Nesta lição, discutiremos as ferramentas disponíveis para monitorar o uso do sistema de arquivos, otimizar sua operação e como verificar e reparar danos.



DF


Usado para verificar o espaço livre em disco, como: Tamanho total, espaço livre, partições montadas e onde, porcentagem de uso, tipo do FS (quando da para ver).

OpçõesDescrição
-hConverte o tamanho para ficar fácil de entender, normal é em KB.
-TMostra o tipo do FileSystem da partição
-t \<filesystem>Filtra as partições que tem esse FileSystem.
-iMostra uma relação de uso de inodes.
-x \<filesystem>Exclue o FileSystem da exibição.
--output=\<options>Cria uma saída personalizada. Podemos usar:
source, fstype, size, used, avail, pcent, target, itotal, iused, iavail, ipcent.


DU


Usado para verificar o uso do disco, no sentido de obter informações de tamanho de arquivos/diretórios dentro do FileSystem.

OpçõesDescrição
-aExibe o valor de cada arquivos dentro do diretório.
-hConverter os valores para facilitar a interpretação.
-sSumariza o valor total, exibe apenas o valor total.
-cMostra uma string (total) com o valor total.
-SExibe o valor total do diretório excluindo os subdiretórios dentro dele.
--max-depth=\<numero>Número é a quantidade de subdiretórios que irá verificar.


FSCK


Para verificar se há erros em um sistema de arquivos (e esperançosamente, corrigi-los), o Linux fornece o utilitário fsck (filesystem check). Para que isso funcione, o File System não pode estar montado ou estar como read-only.


Pode entrar em modo Single ou rescue.target como é mais conhecido no SystemD e então realizar a verificação, pode ser realizado no próximo Boot também.


O fsck é igual o comando mkfs.xxx, tendo a mesma usabilidade, podendo usar com -t ou colocando um ponto mais o filesystem, exemplo: fsck.ext4.

OpçãoDescrição
-AVerifica os FS monstados em fstab.
-MNão verifica partições montadas.
-NNão executa fsck, apenas mostra o que seria feito.
-fForça a verificação.
-nConfigura uma resposta automática como sendo 'não'.
-yConfigura uma resposta automática como sendo 'Sim'.
-cProcura BadBlocks.
-pIgual ao '-y'.
-t (FileSystem)Informa qual File System irá verificar.

Vamos ver alguns comandos na prática:

# Usando fsck com a opção de filesystem:
$ sudo fsck -t ext4 /dev/vdc1

# Igual acima, mas informa o FileSystem sem usar argumento, usa o link simbólico apontando para o utilitário correto:
$ sudo fsck.ext4 /dev/vdc1

# Mostrando qual o utilitário do fsck.ext4:
$ ls -lh $(which fsck.ext4)
lrwxrwxrwx 1 root root 6 Mar 9 2021 /usr/sbin/fsck.ext4 -> e2fsck

# Definindo o fsck para o próximo Boot:
$ sudo tune2fs -c 1 /dev/vda3

# Verificando se foi executado (executou certinho):
$ sudo tune2fs -l /dev/vda3 | grep Last\ c
Last checked: Sat Nov 13 19:46:24 2021

# Pode usar a opção abaixo também:
$ sudo tune2fs -l /dev/vda3 | grep 'Filesystem state'
Filesystem state: clean

O próprio fsck não verificará o sistema de arquivos, apenas chamará o utilitário apropriado para o tipo de sistema de arquivos para fazer isso.



TUNE2FS


Os sistemas de arquivos ext{2,3,4} têm vários parâmetros que podem ser ajustados. O utilitário usado para exibir ou modificar esses parâmetros é chamado tune2fs. Para ver os parâmetros atuais de qualquer sistema de arquivo da família ext, use o parâmetro -l seguido pelo dispositivo que representa a partição.

OpçãoDescrição
-l (L minúsculo)Exibe informações do File System, igual dumpe2fs -h.
-c (max-mount-counts)Número de montagens em que o sistema de arquivos vai usar para verificar pelo e2fsck . Se max-mount-counts for 0 ou -1, o número de vezes que o sistema de arquivos é montado será desconsiderado pelo e2fsck e pelo kernel.
-m (N)Defina a porcentagem do sistema de arquivos que só pode ser alocada por processos privilegiados. Normalmente, a porcentagem padrão de blocos reservados é 5%.
-j (device)Habilita o journal em uma partição que não tenha journal (por exemplo, converte um ext2 que não tem journal, num ext3 com journal).
-i (interval-between-checks[d|m|w])Ajuste o tempo máximo entre duas verificações do sistema de arquivos. Nenhum sufixo ou 'd' interpretará o intervalo de número entre as verificações como dias, 'm' como meses e 'w' como semanas. Um valor zero desativará a verificação dependente do tempo.
-L (Labe)Define um Labe para uma partição em produção (não precisa recriar o File System com o Label).

O comando dumpe2fs pode ser usado para verificar informações do FS, como label, tempo de verificações, última verificação, dentre muitas outras informações.


# Verificando o FS:
$ sudo tune2fs -l /dev/vdb1
tune2fs 1.44.5 (15-Dec-2018)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: ca67fdb6-e5a1-4c3a-9a22-ca7276c00854
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 131072
Block count: 524288
Reserved block count: 26214
Free blocks: 498132
Free inodes: 131061
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 255
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Wed Mar 31 20:24:41 2021
Last mount time: n/a
Last write time: Wed Mar 31 20:24:41 2021
Mount count: 0
Maximum mount count: -1
Last checked: Wed Mar 31 20:24:41 2021
Check interval: 0 (<none>)
Lifetime writes: 65 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 87ae413d-b79f-4867-bd7a-26d20f3b7bc3
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0xaf4fcd3d

# Olhando o dumpe2fs:
$ sudo dumpe2fs /dev/vdb1 | grep -E "Filesystem volume name|Last mounted on|Last checked|Check interval|Filesystem UUID"

dumpe2fs 1.44.5 (15-Dec-2018)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: ca67fdb6-e5a1-4c3a-9a22-ca7276c00854
Last checked: Wed Mar 31 20:24:41 2021
Check interval: 0 (<none>)


XFS


O XFS foi desenvolvido pela Silicon Graphics para o Irix, para que fosse robusto e escalável, ele trabalha bem com arquivos grandes, possui redimensionamento/desfragmentação online e tem tamanho de bloco variável.


Para sistemas de arquivos XFS, o equivalente a fsck é xfs_repair. Se você suspeitar que algo está errado com o sistema de arquivos, a primeira coisa a fazer é verificar se há danos. Para instalar use o comando sudo apt install xfs* (precisa mesmo do xfsprogs e xfsdump).


Isso pode ser feito passando o parâmetro -n para xfs_repair, seguido pelo dispositivo que contém o sistema de arquivos. O parâmetro -n significa "sem modificação"; o sistema de arquivos será verificado, os erros serão relatados, mas nenhum reparo será feito.


O equivalente ao tune2fs no XFS é o xfs_admin e o equivalente ao dumpe2fs é o xfs_info.


Resumo:

  • tune2fs = xfs_admin;
  • fsck = xfs_repair;
  • dumpe2fs = xfs_info; Usado para ver informações sobre um File System (precisa estar montado).
  • xfs_bd = Usado para modo de manutenção, fazer degub, entra num prompt próprio.
  • xfs_fsr = Usado para fazer desfragmentação (precisa estar montado).
  • xfs_check = Substituido pelo xfs_repair. Mas nesse caso é usado apenas para verificação.
  • xfsdump = Usado para criar um backup do file system.
  • xfsrestore = Usado para restaurar o backup.

OpçãoDescrição
xfs_repair -n deviceNão modifica, apenas verifica se existem erros.
xfs_admin -L label deviceColoca um rótulo na partição, não pode ter espaço.
xfs_bd device
xfs_db>frag
Mostra a fragmentação.

Vamos fazer alguns testes:

# Criando o file system:
$ sudo mkfs.xfs -f /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0