Obtendo tamanho de bloco via df vs dumpe2fs

2

Estas duas ferramentas parecem reportar diferentes block tamanhos

root@ubuntu-xenial:~# df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev              498588        0    498588   0% /dev
tmpfs             101584     3116     98468   4% /run
/dev/sda1       10098468  1438288   8643796  15% /
tmpfs             507916        0    507916   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
tmpfs             507916        0    507916   0% /sys/fs/cgroup
vagrant        343946960 55977016 287969944  17% /vagrant
tmpfs             101584        0    101584   0% /run/user/1000

root@ubuntu-xenial:~# dumpe2fs /dev/sda1 | grep -i block | grep -i size
dumpe2fs 1.42.13 (17-May-2015)
Block size:               4096
Flex block group size:    16

Além disso, o comando fdisk reporta diferentes sector size (os termos sector e block não são intercambiáveis?)

root@ubuntu-xenial:~# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38d40272

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 20971486 20969439  10G 83 Linux


Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Estou em uma máquina vagrant para o que isso importa

    
por pkaramol 18.08.2018 / 10:16

3 respostas

2

... reports different sector size (aren't the terms sector and block interchangeable?)

"Bloco" foi usado para significar muitas coisas diferentes. Você tem que olhar para o contexto específico.

df aumenta ainda mais, dizendo "blocos 1K" para significar unidades de 1 Kilobyte, mesmo quando o (s) sistema (s) de arquivos usam tamanhos de bloco diferentes.

"Setor" significa originalmente o tamanho de bloco que um disco usa. Mas observe que fdisk relata dois tipos diferentes de tamanho de setor, "físico" e "lógico" :-). Então você precisa olhar para o contexto aqui também. [*]

Qual é o tamanho do bloco do sistema de arquivos?

Como as primeiras ferramentas mencionadas foram df e dumpe2fs , imaginei que você esteja procurando o tamanho do bloco do sistema de arquivos. Nesse caso, você quer o valor que dumpe2fs mostra como "Tamanho do bloco".

dumpe2fs é uma ferramenta específica para ext2 / 3/4, mas acredito que isso seja a abordagem mais robusta. Dito isto, isso significa que se você usar um sistema de arquivos diferente, você terá que usar uma ferramenta diferente e confirmar exatamente o que ele usa para "tamanho de bloco".

Pode haver algumas exceções ao tamanho normal do bloco do sistema de arquivos. Um ext4 muito recente pode suportar o armazenamento de dados em linha no inode. Ou seja, arquivos menores que um determinado tamanho podem ser armazenados no inode do arquivo, sem alocar nenhum bloco de dados. Veja Como usar o novo recurso Ext4 Inline Data? (armazenando dados diretamente no inode)

Método de consulta alternativa: statvfs ()

Como alternativa, você pode executar stat -f / para mostrar as informações de statvfs() para seu sistema de arquivos raiz. Foi discutido aqui: tamanhos do sistema de arquivos estatísticos .

stat -f output inclui dois campos diferentes, "Tamanho fundamental do bloco" e "Tamanho do bloco": -).

O tamanho do bloco "fundamental" é a granularidade em que o uso do espaço é relatado - isso se aplicará a df . Você pode esperar que essa seja a mesma granularidade usada para alocar espaço no arquivo. Pelo menos isso é verdade para o seu ext2 / 3/4 e em muitos outros casos.

stat afirma que o outro tamanho de bloco deve ser usado "para transferências rápidas". No ext2 / 3/4, esses dois tamanhos de bloco serão sempre os mesmos.

Se o ext2 já tivesse implementado fragmentos, como o UFS do BSD UNIX, seria possível que os dois tamanhos fossem diferentes. Isso é refletido em dumpe2fs sempre mostrando um valor "Tamanho do fragmento" igual a "Tamanho do bloco". Consulte O que pode f_bsize ser usado para? (É semelhante a st_blksize?)

Como uma ferramenta mais genérica, stat -f pode induzir em erro em alguns casos.

Também não é muito usado; isso pode aumentar o risco. Não ajuda informar dois valores diferentes, nos quais os significados originais não são relevantes para os sistemas de arquivos nativos do Linux. FWIW, os usuários deste site odiavam minha pergunta pedindo para confirmar seu comportamento (o link acima). Eu costumo supor que isso significa que eles ficaram com raiva porque ninguém sabe como responder à pergunta.

stat -f é um recurso do GNU coreutils. (Não é suportado por stat do FreeBSD 7.2).

O "tamanho do bloco" para transferências rápidas "é significativo?

Esta descrição pode ser relevante para sistemas de arquivos que implementam fragmentos. Se eles não implementarem a "alocação atrasada", talvez seja mais eficiente garantir que você use um buffer de gravação do tamanho de um bloco quando aumentar o tamanho de um arquivo. Como sempre, se você está pensando em fazer uma mudança para melhorar o desempenho, você deve confirmar a melhoria com as medidas.

Nos sistemas de arquivos Linux, os dois tamanhos de bloco serão o mesmo valor. Nesse caso, não conheço nenhum motivo para usar esse valor específico para otimização.

Na maioria das vezes, o espaço do usuário não precisa se preocupar muito com o dimensionamento de chamadas de E / S "para transferências rápidas". O agendador de IO pode coalescer I / Os adjacentes para eficiência. O IO não sincronizado através do cache de páginas obtém enormes benefícios de desempenho com o cache de write-back e a leitura antecipada automática. Você pode percorrer um longo caminho usando apenas o tamanho do cache da página ou o 4KB de codificação: -).

Na maioria das transferências, o cache de páginas impõe um tamanho mínimo para o IO físico. O tamanho da página é de 4KB na maioria dos sistemas, e geralmente o IO do arquivo passa pelo cache da página. (Novamente, arquivos pequenos são um caso especial. Ou melhor, a última página de um arquivo é um caso especial, se o tamanho do arquivo não for um múltiplo exato de 4KB).

[*] Por exemplo Considerando as camadas de abstração modernas, às vezes você pode ver um campo que diz "tamanho do setor" relatado como 512, em um disco moderno de "formato avançado" que usa setores físicos de 4KB.

    
por 18.08.2018 / 11:55
4

Você não "obtém tamanho de bloco via df". Isso não é mostrado na saída.

df lista todos os sistemas de arquivos, seu uso e pontos de montagem em uma lista - e os valores mostrados simplesmente se referem a tamanhos (total / usado / disponível) e não a outras propriedades individuais como tipo de sistema de arquivos, tamanho de bloco, etc.

Por padrão, a unidade para representar o tamanho é de blocos de 1K, você pode alterá-la para blocos de 1M ou blocos de 1G ou variável (legível por humanos).

$ df
Filesystem               1K-blocks       Used Available Use% Mounted on
/dev/dm-34                25155584   19811668   5343916  79% /

$ df --block-size=M
Filesystem              1M-blocks     Used Available Use% Mounted on
/dev/dm-34                 24566M   19348M     5219M  79% /

$ df --block-size=G
Filesystem              1G-blocks  Used Available Use% Mounted on
/dev/dm-34                    24G   19G        6G  79% /

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/dm-34                24G   19G  5.1G  79% /

(Observe que a diferença sutil -BG e -h é que a coluna Disponível mostra 6G vs. 5.1G . O tamanho legível para humanos se adapta de acordo com o tamanho, mas não há blocos de fração ao usar um tamanho enorme de blocos ).

Quanto ao sistema de arquivos, ele não precisa funcionar em unidades de 512 bytes apenas porque o dispositivo de armazenamento faz isso. Não importa que muito armazenamento tenha setores maiores hoje em dia, mas ainda finge ser 512 bytes por razões de compatibilidade.

aren't the terms sector and block interchangeable?

Infelizmente, esses termos são usados de maneiras diferentes, dependendo do contexto.

    
por 18.08.2018 / 11:06
0

Depois de cavar, a maneira apropriada de obter o tamanho do bloco é

root@ubuntu-xenial:/proc# blockdev --getbsz /dev/sda
4096

É claro que pode diferir de um dispositivo de bloco para outro.

Em qualquer caso, o valor acima parece ser consistente com a saída de dumpe2fs

    
por 18.08.2018 / 11:16