TL; DR → o tamanho dos conteúdos do arquivo são apenas parte da história, e o modo como é armazenado no sistema de arquivos influencia seu espaço efetivo.
Um arquivo de 1 MiB pode receber uma quantidade diferente de sobrecarga de "manutenção", isto é, metadados, além de ser alocado em um número diferente de blocos.
O comprimento do conteúdo de um arquivo - também conhecido como "inode" (Um arquivo regular possui uma ou mais entradas de diretório, também conhecidos como hard links e um inode, que possui o conteúdo) - deve ser idêntico independentemente do sistema de arquivos usado mas a quantidade de espaço que o inode e os metadados coletivamente tornam indisponíveis para uso por outros arquivos pode diferir um pouco.
E.G. um sistema de arquivos pode alocar espaço em blocos 4kiB; Nesse caso, um diretório pode ocupar 4kiB, mesmo com apenas uma entrada, e um arquivo de 1 byte pode ocupar 4kiB. Um arquivo de 4.097 bytes em um sistema de arquivos com blocos de 4kiB ocuparia 8KiB de espaço efetivo.
stat .emacs
File: ‘.emacs’
Size: 36303 Blocks: 72 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 2097977 Links: 1
A saída stat
aqui mostra que minha casa está em um sistema de arquivos com blocos típicos de E / S de 4.096 bytes (4KiB), então o arquivo ~ 36kiB (36.303B) na verdade ocupa um pouco mais de espaço do que teria em um sistema dos anos 1970 com blocos de E / S de 512 bytes.
A figura Blocks:
está nos blocos tradicionais Unix de 512 bytes (½kiB), então dividindo o tamanho IO Block
por 512 (4.096 ÷ 512 = 8), você verá que o número de blocos é sempre um múltiplo de 8 neste sistema de arquivos. Essa sobrecarga de alocação representa um espaço desperdiçado de (72 × 512 = 36.864) - 36.303 = 561 bytes nesse caso. (Em um sistema de arquivos com blocos de 512 bytes, seriam usados apenas 71 blocos, portanto, uma sobrecarga de apenas 49 bytes.)
File: ‘emptyness’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Da mesma forma, um pequeno link simbólico pode ser armazenado sem alocar seus próprios blocos:
File: ‘symlink’ -> ‘emptyness’
Size: 9 Blocks: 0 IO Block: 4096 symbolic link
Os 9 bytes do link simbólico são armazenados no arquivo de diretório, então ele ocupa 0 bytes.
Um nome muito mais longo do symlink pode precisar alocar espaço:
File: ‘long-symlink’ -> ‘a very very long symlink target name … …
Size: 2000 Blocks: 8 IO Block: 4096 symbolic link
Note que 8 "blocos Unix" é a menor quantidade que este sistema de arquivos pode alocar (4096 × 512), então o conteúdo ~ 2k ocupa ~ 4k.
Aqui está um arquivo sem nada, exceto zeros (criado com truncate -s 49M sparse-file
), que também tem um tamanho lógico que não corresponde ao tamanho do disco:
File: ‘sparse-file’
Size: 51380224 Blocks: 0 IO Block: 4096 regular file
Observe que esses tipos de arquivos são geralmente criados por programas de acesso aleatório, como bancos de dados, ou por download de pedidos aleatórios, como o BitTorrent.
Há também várias opções que você pode definir ao criar ("formatar") o sistema de arquivos, o que pode torná-lo mais eficiente para sua carga de trabalho específica, se for uma grande preocupação. (O manual mke2fs
tem alguns detalhes.)
Além dos metadados relacionados a arquivos individuais (incluindo diretórios, arquivos comuns, links simbólicos e arquivos especiais de dispositivos) como nomes de arquivos, permissões, ACLs, atributos estendidos e afins, há também alguns metadados no nível do sistema de arquivos. em si, como o "superbloco" (do qual o ext2 / 3/4 mantém várias cópias de backup) e o inode do diário, que contará contra o seu espaço útil (livre) utilizável.
E, por fim, ext2 / 3/4 geralmente reserva uma porcentagem de cada volume somente para uso do superusuário (ou seja, root
) - esse espaço não aparecerá como "livre" em, por exemplo, du
ou a maioria dos programas semelhantes, mas ainda é um espaço não utilizado apenas para o root
. Isso pode ser ajustado com tune2fs
a qualquer momento - normalmente reduzo bastante os volumes do tipo "documentos", mas deixo uma certa quantia reservada em /
no caso de uma emergência de algum tipo.
Se você realmente quiser ver mais detalhes do que normalmente é útil, dumpe2fo
imprimirá um relatório bastante longo das várias opções em vigor no seu sistema de arquivos - por exemplo, um pouco desse relatório pode ser lido:
Filesystem features: has_journal ext_attr resize_inode dir_index f … …
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128016
Block count: 512000
Reserved block count: 25600
Free blocks: 331865
Free inodes: 127631