Stat, Blocos e tamanho do setor - ext4

4

Durante a leitura de como os arquivos são armazenados no sistema de arquivos, criei um arquivo de teste que era de tamanho 217 bytes. Verificando a saída de stat neste arquivo, vi que este arquivo está ocupando 8 blocos. Inicialmente, pensei que não há como um arquivo de tamanho 217 bytes estar usando 8 blocos quando o tamanho do bloco é 4096 bytes e o valor em Blocks: deve ser 1 em vez de 8 . Então eu leio este , isto e this e percebeu que o valor Blocks: é o número de 512 bytes ocupados pelo arquivo. E como o tamanho mínimo de um bloco é de 4096 bytes, até mesmo um arquivo de tamanho 2 bytes ocupará 8 blocos (porque 4096/512 = 8).

[root@server ~]# stat smallfile.txt
  File: 'smallfile.txt'
  Size: 217             Blocks: 8          IO Block: 4096   regular file

Eu tinha lido aqui que:

"Each sector stores a fixed amount of user-accessible data, traditionally 512 bytes for hard disk drives (HDDs) and 2048 bytes for CD-ROMs and DVD-ROMs. Newer HDDs use 4096-byte (4 KiB) sectors, which are known as the Advanced Format (AF)."

Todos os sistemas aos quais tenho acesso usam HDDs com tamanho de setor 512 bytes. Então eu acredito que o st_blocks (como explicado o segundo e terceiro hyperlinks que eu dei) corresponde ao tamanho do setor do disco rígido? Então a questão é:

  • No futuro, se eu quiser ter o mesmo arquivo de 217 bytes em um HDD com um tamanho de setor de 4096 bytes, o comando stat no arquivo mostrará Blocks: 1 em vez de Blocks: 8 (desde 4096 / 4096 = 1)?
  • Ou st_blocks sempre usará 512 bytes como a unidade mínima individual, independentemente do tamanho do setor?
  • Ou tem algo a ver com o VFS?
por Sree 20.10.2014 / 16:48

1 resposta

6

Os links que você fornece explicitamente afirmam:

The st_blocks field indicates the number of blocks allocated to the file, 512-byte units.

Então, eles estão sempre em blocos de blocos de 512 bytes, independentemente do dispositivo subjacente usado. O comando stat simplesmente exibe o que a chamada do sistema stat retorna. O bloco de 512 bytes é uma coisa histórica, definida no POSIX. Compare, por exemplo, estes:

$ ls -s smallfile.txt
4 smallfile.txt
$ env POSIXLY_CORRECT=1 ls -s smallfile.txt
8 smallfile.txt

GNU ls exibe blocos por padrão em blocos de 1kB, mas quando forçado a obedecer ao POSIX, ele mostra blocos de 512 bytes.

    
por 20.10.2014 / 17:55