Tamanho documentado do tamanho do setor de partição do kernel Linux em bytes

2

A minha principal questão é ver autoritariamente se o tamanho do bloco usado no setor conta:

/sys/block/<disk>/<partition>/size

é de fato 512 B, ou se isso pode variar.

Eu achei que seria bastante fácil encontrar uma resposta, mas por exemplo aqui:

link

a pergunta foi feita:

There are /sys/block/<device>/size and 
/sys/block/<device>/<device><partition>/size.

But these values are reported in sectors, not in bytes. As discs with 4K 
sectors are on the horizon now, I don't want to make wrong assumptions on the 
sector size.

So what is the correct sector size for /sys/block/<device>/size?

E um patch foi oferecido na documentação para aparentemente responder de uma vez por todas esta pergunta na documentação: link

As the meaning has not changed for over 13 years, I would like to formalize these attributes such that users can rely on it[1][2]. The sector definition was inspired by the block/stat.txt documentation.

Com o patch:

diff --git a/Documentation/ABI/testing/sysfs-block   b/Documentation/ABI/testing/sysfs-block
+What:      /sys/block/<disk>/<partition>/size
+Date:      October 2002
+Contact:   [email protected]
+Kernel Version:    2.5.43
+Description:
+       Size of the partition in standard UNIX 512-byte sectors
+       (not a device-specific block size).

Tudo parece simples, mas quando eu olho para o documento atual: link

Não há presença deste patch. O que sugere que, na verdade, essa pergunta aparentemente simples pode não ser simples?

Alguém pode me indicar uma resposta autoritativa real para essa pergunta, de preferência usando documentação do kernel ou código com comentários?

Atualmente eu estou confiando na saída de uma ferramenta, mas se isso não é de fato sempre 512B essa saída pode estar errada, o que levaria o código em que estou trabalhando a estar errado também em alguns casos. / p>

Surpreende-me que tenha sido tão difícil encontrar uma resposta verdadeiramente autoritária,

link

Unidades para tamanho em / proc / partitions não faz sentido

Alguns deles apontam para o patch aqui, mas nenhum parece estar ciente de que o patch não parece ter sido aceito, embora pareça ter sido assinado, mas não está no código de documentação, tanto quanto eu pode ver.

Seria legal se pudéssemos de uma vez por todas determinar o que o código interno do kernel realmente está fazendo, e se esse comportamento é documentado, ou simplesmente assumido, o que significa que ele poderia mudar aleatoriamente a qualquer momento.

    
por Lizardx 24.09.2018 / 20:42

1 resposta

0

De comentário do código fonte do Linux:

Linux always considers sectors to be 512 bytes long independently of the devices real block size

Dito isso, acho que a varredura de /sys/block/<disk>/ é a pior (ou pelo menos mais difícil) das disponíveis para obter o tamanho dos discos e das partições:

  • lsblk --bytes --list produz uma saída informativa, não ambígua e passível de análise;
  • cat /proc/partitions fornece informações semelhantes em blocos do tamanho de 1K
  • blockdev --getsize64 <dev> retorna o tamanho do dispositivo em bytes;
  • blockdev --getsz <dev> retorna o tamanho do dispositivo em setores de 512 bytes ;
  • ... certamente outros métodos que não me lembro agora ...
por 24.09.2018 / 22:24