Os arquivos ocupam uma quantidade diferente de espaço em NTFS e LUKS + ext4?

3

Eu tenho dois volumes, um NTFS (15028048 14213120 51544), que corresponde a (blocos de 1-K, usados, disponíveis), e o outro é um LUKS + ext4 (14895184 13869752 245752). Eu verifiquei os arquivos dentro com md5sum e eles são os mesmos, no entanto, como pode ser que NTFS tem 14213120 e os outros 13869752? Eu entendo que a formatação diferente irá tirar uma quantidade diferente de espaço, mas uma vez que você tenha um arquivo de 1 MB, este arquivo de 1 MB é o mesmo em NTFS, vfat, ext3, ext4 ou qualquer outro formato que você use. O que estou perdendo?

    
por Quora Feans 10.10.2014 / 20:50

2 respostas

4

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.)

Os sistemas de arquivos ext2 / 3/4, em particular, têm algumas otimizações para fazer links simbólicos e arquivos muito pequenos ocupam menos espaço, e lidam com arquivos "esparsos" (arquivos com muitos blocos, exceto zeros) de forma particularmente eficiente. Por exemplo, um arquivo vazio ocupa apenas o espaço de sua entrada de diretório:

  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
    
por 10.10.2014 / 22:17
0

Eu acho que essa sinopse da resposta do Doc à questão do SU " O ext4 é mais caro que o ntfs? " cobre bem:

Each file system implements its datastructures differently. Something neat you can try is formatting a partition with various file systems and comparing. The "free" space will differ. Also, as you fill them up, the will be a difference in storage overhead and so in a sense how much space is required to store the same file CAN differ depending on the file system. Usually, when you format a file system you can also select some parameters for how it's to be arranged - this has an impact too.

    
por 10.10.2014 / 21:14