# strace hdparm -i /dev/sda
…
ioctl(3, HDIO_GET_IDENTITY, 0x7fffa930c320) = 0
brk(0) = 0x1c42000
brk(0x1c63000) = 0x1c63000
write(1, "\n", 1
) = 1
write(1, " Model=…
Portanto, hdparm
obtém suas informações do HDIO_GET_IDENTITY
ioctl , não do sysfs. Isso não significa que as informações não podem ser acessadas de sysfs, é claro.
Em seguida, podemos procurar HDIO_GET_IDENTITY
na origem do kernel. LXR é conveniente para isso. O hit relevante mostra uma chamada para ata_get_identity
. Esta função pesquisa o modelo na descrição do dispositivo no deslocamento ATA_ID_PROD
na descrição do dispositivo.
Olhando para onde mais ATA_ID_PROD
é usado, e com o sysfs em mente, encontramos um hit em ide-sysfs.c
, em uma função chamada model_show
. Esta função é referenciada pela chamada de macro logo abaixo DEVICE_ATTR_RO(model)
, portanto, se o driver ata estiver expondo a interface IDE, existe um arquivo chamado model
no diretório sysfs do dispositivo que contém essa informação.
Se o driver ata estiver expondo a interface SCSI, rastrear a origem do kernel é muito mais complicado, porque o código usa diferentes maneiras de extrair as informações do hardware. Mas, como se constata, há também um um campo model
no diretório sysfs do dispositivo.
Quanto ao diretório sysfs do dispositivo, existem várias maneiras de acessá-lo. O arquivo sysfs.txt
na documentação do kernel documenta isso, não muito bem. A maneira mais simples de acessá-lo é por meio de /sys/block
, que contém uma entrada para cada dispositivo de bloco:
$ cat /sys/block/sda/device/model
Existem muitos links simbólicos em /sys
. O local “físico” desse diretório depende de como o disco está conectado ao sistema; por exemplo, ele tem o formato /sys/devices/pci…/…/ata…/host…/target…/…
para um dispositivo ATA com uma interface SCSI conectada a um barramento PCI.