Eu tenho uma amostra de informações do bloco emmc de um dispositivo Android
A partir de
/proc/partitions
major minor #blocks name
179 1 5120 mmcblk0p1
Usando minha pouca inteligência, estou assumindo que /proc/partitions
usa blocos, pois diz que a partição 1 tem 5120 blocos
A partir de
/sys/dev/block/179:0/mmcblk0p1/size
10240
Parece que os valores da partição em /sys/…/size são o dobro dos valores de /proc/partitions. Portanto, por que eles são diferentes, portanto, quais são as unidades em ambos?
/proc/partitions
mostra o tamanho em blocos de 1024 bytes./sys/dev/block/*/*/size
mostra o tamanho em setores de 512 bytes.Ambos independentemente do tamanho do bloco/setor lógico/físico do dispositivo.
Para o 1º, você pode olhar na página de
proc(5)
manual:Para o segundo, certamente deve ser documentado em algum lugar , mas você também pode olhar diretamente para o código-fonte do Linux em
block/partition-generic.c
:e como ele se relaciona com o código que gera as
/proc/partitions
informações emblock/genhd.c
:Ambos estão usando
part_nr_sects_read()
o que para o caso de/proc/partitions
é dividido por 2 (com>> 1
).part_nr_sects_read()
recupera onr_sects
campo dostruct hd_struct
, que está sempre em setores de 512 bytes, independentemente do tamanho do setor/bloco do dispositivo. Por exemplo, você pode ver comodrivers/block/nbd.c
usa aset_capacity()
função (que define o mesmonr_sects
campo) com o tamanho do byte dividido por 512 (com>> 9
):