Sua pergunta é um tanto interessante - na verdade, existem três problemas:
- Um problema de conversão de unidade
- Blocos reservados para o sistema de arquivos (visível por df)
- Blocos reservados para o sistema de arquivos (não visíveis por df)
Observação: vou usar números extraídos de um dos meus sistemas, não de seus números, já que mais informações são necessárias - a mesma matemática se aplica.
1. GB (gigabytes) vs. GiB (gibibytes)
- Um GB é baseado em potências de 10: 1 GB = 10 3 3 = 1000 3 = 1000000000 bytes
- Um GiB é baseado em potências de 2: 1GiB = 2 10 3 = 1024 3 = 1073741824 bytes
Os discos rígidos são quase sempre vendidos em GB.
fdisk -l /dev/xvda1
Disk /dev/xvda1: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Portanto, esta partição tem 4294967296 bytes - você pode ver que o número (MB) é simplesmente 1/1000 2 disso. Para converter para GiB, dividiremos por 1024 3 :
4294967296 B / (1024 3 B / GiB) = 4 GiB (ou 4096 MB, definitivamente diferente do número acima).
2. O sistema de arquivos reserva alguns blocos que df
pode ver
Primeiramente, vamos encontrar nosso tamanho de bloco:
dumpe2fs -h /dev/xvda1 | grep "Block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
Como o tamanho do bloco neste sistema é 4096B, estou usando esse valor abaixo. (Nota: df
usa 4K = 4096 e 4KB = 4000):
df -B 4K
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/xvda1 1032112 325035 696599 32% /
Você esperaria que Usado + Disponível = Total (ou seja, blocos de 4K), no entanto:
325035+696599 = 1021634 =/= 1032112
Este valor em falta é o "Contagem de blocos reservados":
dumpe2fs -h /dev/xvda1 | grep "Reserved block count"
dumpe2fs 1.41.12 (17-May-2010)
Reserved block count: 10478
Verificando a matemática:
1021634 + 10478 = 1032112
3. Os blocos ausentes que df
não conseguem ver
Bem, até agora, tudo bem, mas os números ainda não somam.
O número total de blocos de 4K que devo ter é 4294967296/4096 = 1048576 Você pode verificar isso com a saída de dumpe2fs -h / dev / xvda1 | grep "Contagem de blocos"
dumpe2fs -h /dev/xvda1 | grep "Block count"
dumpe2fs 1.41.12 (17-May-2010)
Block count: 1048576
Então, de acordo com fdisk e dumpe2fs, existem 1048576 blocos de 4K De acordo com df: 1032112 blocos de 4K O que significa: 1048576 - 1032112 = 16464 blocos estão faltando
Aqui você precisa de um pouco de compreensão do sistema de arquivos. No meu caso, estou usando ext4 - e é dividido em grupos.
Para começar, aqui está uma saída parcial de dumpe2fs:
dumpe2fs -h /dev/xvda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem OS type: Linux
Inode count: 262144
Block count: 1048576
Reserved block count: 10478
Free blocks: 735865
Free inodes: 216621
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 511
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
RAID stride: 32582
Flex block group size: 16
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 15632
Journal backup: inode blocks
Journal features: journal_incompat_revoke
Journal size: 128M
Journal length: 32768
Journal sequence: 0x0006db26
Journal start: 7391
Existem 32768 blocos por grupo. Nós temos 1048576 Blocos no total Portanto: 1048576/32768 = 32 grupos
Se você executar dumpe2fs (sem o -h), você terá uma longa lista de todos os grupos e suas informações relevantes. Por exemplo, para o meu primeiro grupo:
Group 0: (Blocks 0-32767) [ITABLE_ZEROED]
Checksum 0xdc79, unused inodes 0
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-512
Block bitmap at 513 (+513), Inode bitmap at 529 (+529)
Inode table at 545-1056 (+545)
13296 free blocks, 0 free inodes, 1487 directories
Free blocks: 10382, 11506-11537, 11672-11679, 11714-11727, 12169, 12173-12179, 12181-12185, 12938-12962, 12964-12969, 13105, 13217-13246, 13384-13390, 13392-13393, 13644-13647, 13707, 13712-13855, 16346-18395, 20442-22491, 22699-22701, 22748, 23053-31837, 32290-32408
Free inodes:
Você vai notar algumas coisas aqui:
- Existe um superbloco (nem todos os grupos têm um) - 1 bloco
- Existem descritores de grupo (somente os grupos com superblocos os têm) - 1 bloco
- Existe um bitmap de bloco (todos os grupos têm um) - 1 bloco
- Existe um bitmap de inode (todos os grupos têm um) - 1 bloco
- Existe uma tabela de inodes - 512 blocos (blocos de inode por grupo)
Podemos encontrar uma lista dos nossos superquadros com:
dumpe2fs /dev/xvda1 | grep -i superblock
dumpe2fs 1.41.12 (17-May-2010)
Primary superblock at 0, Group descriptors at 1-1
Backup superblock at 32768, Group descriptors at 32769-32769
Backup superblock at 98304, Group descriptors at 98305-98305
Backup superblock at 163840, Group descriptors at 163841-163841
Backup superblock at 229376, Group descriptors at 229377-229377
Backup superblock at 294912, Group descriptors at 294913-294913
Backup superblock at 819200, Group descriptors at 819201-819201
Backup superblock at 884736, Group descriptors at 884737-884737
Então, no meu caso, 1 superbloco principal e 7 backups.
Trabalhando isso, conseguimos:
- 24 grupos sem superbloco:
- Cada um com 1 bloco (bloco de bitmap) + 1 bloco (inode bitmap) + 512 blocos (tabela de inode) = 514 blocos
- 8 grupos com um superbloco:
- Cada um com 1 bloco (superbloco) + 1 bloco (descritores de grupo) + 1 bloco (bloco de bitmap) + 1 bloco (bitmap de inode) + 512 blocos (tabela de inode) = 516 blocos
Fazendo as contas, encontramos:
24 groups * 514 block/group + 8 groups * 516 blocks/group = 16464 blocks
Qual exatamente é igual ao número que falta!
Vale a pena mencionar que existem blocos reservados adicionais (por exemplo, blocos GDT reservados) que permitem crescimento futuro, mas que o df inclui em seus cálculos. Além disso, o diário do sistema de arquivos é reconhecido como espaço usado pelo df (assim, mesmo sem nenhum arquivo, seria usado 128MiB)