Meu disco é sda e tenho esses arquivos de tamanho:
/sys/dev/block/8:0/size
/sys/class/block/sda/size
/sys/block/sda/size
Qual devo usar? O primeiro é usado por lsblk
. Existem diferenças?
Meu disco é sda e tenho esses arquivos de tamanho:
/sys/dev/block/8:0/size
/sys/class/block/sda/size
/sys/block/sda/size
Qual devo usar? O primeiro é usado por lsblk
. Existem diferenças?
Confira
Você verá que todos os três apontam para o mesmo diretório.
Não há diferença entre os arquivos, além do caminho.
Se você tiver um caminho para um arquivo de dispositivo de bloco como
/dev/sda
,/dev/disk/by-id/whatever
,some/path/to/my/loop/device
, há várias opções para obter seu tamanho no Linux, incluindo:open () o dispositivo e emita o arquivo
BLKGETSIZE64
ioctl()
. Isso é o queblockdev --getsize64 path/to/block/device
faz.open () o dispositivo e emitir o
BLKGETSIZE
ioctl()
mesmoblockdev --getsz path/to/block/device
, e multiplique isso por 512 (não o que oBLKSSZGET
ioctl () (asblocksize --getss path/to/block/device
) retorna).open() o dispositivo, lseek() ao final que retornará a posição atual do cursor. Por exemplo, em
zsh
:Supondo que o sysfs esteja montado em
/sys
, encontre o caminho correspondente para o arquivo do dispositivo, leia osize
arquivo e multiplique por 512 (não os valores em nenhum dosqueue/*size
arquivos).Para 1 a 3 acima, você precisa de pelo menos permissão de leitura ou gravação no dispositivo de bloco.
Para 4, como o nome do arquivo de dispositivo de bloco pode ser qualquer coisa, a maneira confiável de identificar o caminho /sys e o que
lsblk
você descobriu é confiar nos números de dispositivo principal e secundário que você obtém fazendo umastat()
chamada em o caminho para o dispositivo de bloco (para o qual você só precisa de acesso de pesquisa ao diretório pai) e, em seguida, use/sys/dev/block/<major>:<minor>
o que será um link simbólico para o diretório na/sys/devices
árvore do dispositivo de bloco com<major>
e<minor>
como número principal/secundário.Por exemplo, com
zsh
:Ou você pode simplesmente
lsblk
fazer isso por você:/sys/dev/block/8:0
,/sys/class/block/sda
e/sys/block/sda
são apenas links simbólicos apontando para o mesmo local, portanto, não importa qual você usa.