Para onde foi o espaço livre?

2

Instalei o CentOS 5.7 64 Bits no meu servidor, que possui unidades SAS de 4 x 300 GB no RAID 10 de hardware. Na instalação, eu escolhi as partições padrão.

Aqui estão os comandos de saída:

[root@server ~]# fdisk -l

Disk /dev/sda: 598.8 GB, 598879502336 bytes
255 heads, 63 sectors/track, 72809 cylinders
Units = cylinders de 16065 * 512 = 8225280 bytes

Boot Device         Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14       72809   584733870   8e  Linux LVM


[root@server ~]# df -h
File System          Size   Used  Free Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      493G  1,4G  466G   1% /
/dev/sda1              99M   13M   81M  14% /boot
tmpfs                  24G     0   24G   0% /dev/shm

Onde foram esses 100 GB e como posso adicioná-lo?

Obrigado antecipadamente

    
por David Adders 28.01.2012 / 04:46

1 resposta

9

Sua pergunta é um tanto interessante - na verdade, existem três problemas:

  1. Um problema de conversão de unidade
  2. Blocos reservados para o sistema de arquivos (visível por df)
  3. 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:

  1. Existe um superbloco (nem todos os grupos têm um) - 1 bloco
  2. Existem descritores de grupo (somente os grupos com superblocos os têm) - 1 bloco
  3. Existe um bitmap de bloco (todos os grupos têm um) - 1 bloco
  4. Existe um bitmap de inode (todos os grupos têm um) - 1 bloco
  5. 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)

    
por 28.01.2012 / 06:58