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ções | Descrição |
---|---|
-h | Converte o tamanho para ficar fácil de entender, normal é em KB. |
-T | Mostra o tipo do FileSystem da partição |
-t \<filesystem> | Filtra as partições que tem esse FileSystem. |
-i | Mostra 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ções | Descrição |
---|---|
-a | Exibe o valor de cada arquivos dentro do diretório. |
-h | Converter os valores para facilitar a interpretação. |
-s | Sumariza o valor total, exibe apenas o valor total. |
-c | Mostra uma string (total) com o valor total. |
-S | Exibe 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ção | Descrição |
---|---|
-A | Verifica os FS monstados em fstab. |
-M | Não verifica partições montadas. |
-N | Não executa fsck, apenas mostra o que seria feito. |
-f | Força a verificação. |
-n | Configura uma resposta automática como sendo 'não'. |
-y | Configura uma resposta automática como sendo 'Sim'. |
-c | Procura BadBlocks. |
-p | Igual 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ção | Descriçã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 peloxfs_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ção | Descrição |
---|---|
xfs_repair -n device | Não modifica, apenas verifica se existem erros. |
xfs_admin -L label device | Coloca 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