Criando arquivos do dispositivo da unidade de disco em / dev / disk / by-path

2

Nosso aplicativo consiste em testar unidades de disco rígido e unidades são inseridas e removidas após o teste. Quando uma unidade é inserida em nosso testador, o udev criou um arquivo no / dev / disk / by-path. Nosso aplicativo analisa esses arquivos para determinar quando uma nova unidade é inserida ou removida. O nome contém o slot ou bay físico em que o drive está conectado, por isso sabemos quais drives estão onde. Um controlador HBA que estamos procurando cria esse arquivo de acesso sob esse diretório, mas usa um LUN que não está relacionado ao slot ou ao compartimento físico no qual a unidade está. Com apenas o LUN, não sabemos onde a unidade está localizada fisicamente. nosso testador. Minha pergunta é quem criou o nome do arquivo? São as unidades de HBA? Eu tenho o código-fonte do driver, então estou esperando que eu possa modificá-lo para criar um nome de arquivo com o slot ou bay físico em vez do LUN.

As unidades estão sendo inseridas e removidas em tempo real o tempo todo.

    
por William Seamon 31.07.2017 / 22:50

1 resposta

2

Os "arquivos" em /dev/disk/by-* são symlinks criados por udev , usando informações sobre o (s) dispositivo (s) de bloco fornecido (s) pelo kernel. Os links simbólicos apontam para os nós de dispositivos reais das unidades. Por exemplo:

/dev/disk/by-path/pci-0000:00:11.0-ata-1 -> ../../sdn

e

/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 -> ../../sdb

O driver não os cria e o kernel não os cria. eles são inteiramente da responsabilidade de udev .

udev usa regras definidas em /etc/udev/rules.d/ (para as regras e sobreposições do administrador do sistema local) e /lib/udev/rules.d/ (padrões do sistema) para criá-las.

Por exemplo: /lib/udev/rules.d/60-persistent-storage.rules . No meu sistema debian, as primeiras linhas desse arquivo são:

# do not edit this file, it will be overwritten on update

# persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path}
# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <[email protected]>

Se você quiser escrever suas próprias regras personalizadas para unidades nesse HBA, tente executar udevadm info /dev/disk/by-id/.... . Isso pode fornecer informações suficientes para criar um link simbólico que identifica o compartimento da unidade.

por exemplo. em uma das minhas unidades (uma unidade SATA conectada a um IBM M1015, um LSI SAS2008, parte de um dos meus pools do ZFS):

# udevadm info /dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
P: /devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
N: sdb
S: disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
S: disk/by-id/wwn-0x50014ee2023dc46f
S: disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0
E: DEVLINKS=/dev/disk/by-path/pci-0000:07:00.0-sas-phy0-lun-0 /dev/disk/by-id/ata-WDC_WD10EACS-00ZJB0_WD-WCASJ2114122 /dev/disk/by-id/wwn-0x50014ee2023dc46f
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/pci0000:00/0000:00:0b.0/0000:07:00.0/host0/port-0:1/end_device-0:1/target0:0:1/0:0:1:0/block/sdb
E: DEVTYPE=disk
E: ID_ATA=1
E: ID_ATA_DOWNLOAD_MICROCODE=1
E: ID_ATA_FEATURE_SET_AAM=1
E: ID_ATA_FEATURE_SET_AAM_CURRENT_VALUE=254
E: ID_ATA_FEATURE_SET_AAM_ENABLED=0
E: ID_ATA_FEATURE_SET_AAM_VENDOR_RECOMMENDED_VALUE=128
E: ID_ATA_FEATURE_SET_HPA=1
E: ID_ATA_FEATURE_SET_HPA_ENABLED=1
E: ID_ATA_FEATURE_SET_PM=1
E: ID_ATA_FEATURE_SET_PM_ENABLED=1
E: ID_ATA_FEATURE_SET_PUIS=1
E: ID_ATA_FEATURE_SET_PUIS_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY=1
E: ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
E: ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=276
E: ID_ATA_FEATURE_SET_SMART=1
E: ID_ATA_FEATURE_SET_SMART_ENABLED=1
E: ID_ATA_SATA=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN1=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
E: ID_ATA_WRITE_CACHE=1
E: ID_ATA_WRITE_CACHE_ENABLED=1
E: ID_BUS=ata
E: ID_MODEL=WDC_WD10EACS-00ZJB0
E: ID_MODEL_ENC=WDC\x20WD10EACS-00ZJB0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_PART_TABLE_TYPE=gpt
E: ID_PART_TABLE_UUID=53ad1007-a736-ca41-a1fb-98ec491cc00a
E: ID_PATH=pci-0000:07:00.0-sas-phy0-lun-0
E: ID_PATH_TAG=pci-0000_07_00_0-sas-phy0-lun-0
E: ID_REVISION=01.01B01
E: ID_SERIAL=WDC_WD10EACS-00ZJB0_WD-WCASJ2114122
E: ID_SERIAL_SHORT=WD-WCASJ2114122
E: ID_TYPE=disk
E: ID_WWN=0x50014ee2023dc46f
E: ID_WWN_WITH_EXTENSION=0x50014ee2023dc46f
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: UDISKS_ATA_SMART_IS_AVAILABLE=1
E: UDISKS_IGNORE=1
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=2
E: UDISKS_PARTITION_TABLE_SCHEME=gpt
E: UDISKS_PRESENTATION_HIDE=1
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=15128136
    
por 01.08.2017 / 05:14