Wie werden die Namen von disk-artigen Geräten festgelegt?

Im Rahmen einer komplizierten Datenrettung stosse ich auf unbekannte Phänomene, die ich in einzelne Themen ausführe, weil sie keinen erkennbaren Zusammenhang haben.

Auf einem Dell mit fuss13 sind 3 sata-Ports mit 3 Platten

  • ata1: eine ssd für das System
  • ata2: eine große Harddisk, um die Daten aufzunehmen
  • ata6: eine defekte 1 TB 2,5" Disk, deren Daten zu retten sind

Die ata-Angaben sind vom Log, ata3-5 sind nicht ausgeführt.

Aufgrund von Fehlern wird die 1TB-Disk abgemeldet (disabled). Ein reboot ist notwendig, um sie wieder einzubinden. Dabei stellte ich fest, dass sich die Namen der Platten ändern. Für die ersten beiden macht das nichts aus, denn sie sind in der fstab mit UUID definiert. Da Dell die Probleme mit der Platte feststellen kann, nahm ich an, dass die Namensänderungen im Zusammenhang mit den Fehlern der 1TB-Platte stehen.

Dies ist nicht der Fall, zumindest wird die Platte bei den Tests gar nicht angesprochen und dennoch wechseln die Bezeichnungen der 3 Platten eher willkürlich. Es ist lästig, aber kein ko-Kriterium.

  • Wie wird die Namensgebung definiert?
  • Kann man sie beeinflussen?
  • Ist das bekannt und nur ich habe es bisher nicht bemerkt?

Ich kenne mich nicht so gut aus, aber zwei Antworten kann ich liefern.

  1. Die Namen hängen i.d.R. vom Treiber ab, der verwendet wird um die Festplatte/Anschluss/Schnittstelle zu lesen.
    Beispielsweise steht ata für SATA → “Serial ATA” und verwendet den libata Treiber. Nach dem Namen kommt der Suffix, der in numerischer oder alphabetischer Reihenfolge die Anschlüsse anordnet (/dev/ata1/, /dev/ata2/,…)
    Neben ata gibt es auch das viel verwendete SCSI für “SCSI Disks” kurz “SD”. Im Dateisystem hat sd eine numerische Reihenfolge: /dev/sda, /dev/sdb, /dev/sdc…
    Ich habe in meinem Laptop nvme Speicher. Diese werden im Linux Kernel vom nvme Treiber gelesen und heißen daher /dev/nvme1, /dev/nvme2.
    Die Geschichte ist aber nicht ganz so einfach. Es gibt auch ata Schnittstellen, die vom SCSI Treiber gelesen werden und umgekehrt. Des Weiteren wird heutzutage die Abkürzung “sd*” allgemein für Storage Disk verwendet. So kann ein eingehangener USB-Stick im Dateisystem als /dev/sda/ angezeigt werden, auch wenn der USB-Stick nichts mit SCSI zu tun hat. (Nebenbei: USB Anschlüsse, deren Treiber noch nicht geladen wurden sind manchmal im /dev/bus/usb/ zu finden. Wird der Treiber geladen, dann tauchen sie als /dev/sda/ auf oder z.B. als /dev/video/ für USB-Webcams.)
    Zusammengefasst gibt es keine genaue Nomenklatur. Auch nicht bei den Partitionen. Unter sd* wird nach dem Buchstaben eine Zahl angeführt für die Partition. Beispiel: /dev/sda1, /dev/sda2… Hingegen bei nvme wird die Partition durch ein “p” getrennt: /dev/nvme1p0, /dev/nvme1p1.

  2. Die Reihenfolge hängt davon ab, wann die Festplatte/Schnittstelle geladen wird. Ist die Reihenfolge beim booten immer unterschiedlich, dann werden sie in unterschiedlicher Geschwindigkeit initialisiert.

LG
Noah
PS: schreibe das gerade am Handy, deshalb hat der Text leider kaum Formatierung.

1 Like

Danke @Noah.runggaldier !

Ich zeige 2 Log-Ausschnitte zum Thema, die zu anderen Ergebnissen kommen. Den 1. vollständig beim 2. nur noch die relevanten Einträge.

ata1, at2 und ata6 sind die 3 ausgeführten sata-Anschlüsse an den die 3 Platten hängen mit

  • ata1.00: ATA-9: SAMSUNG MZ7TE256HMHP-00004
  • ata2.00: ATA-10: ST6000DM003-2CY186
  • ata6.A-10: ST1000LM048-2E7172

denen werden scsi-Adressen zugeordnet, startend bei 0 statt bei 1

  • scsi 0:0:0:0: Direct-Access ATA SAMSUNG MZ7TE256
  • scsi 1:0:0:0: Direct-Access ATA ST6000DM003-2CY1
  • scsi 5:0:0:0: Direct-Access ATA ST1000LM048-2E71

Soweit statisch von der Verkabelung vorgegeben. Dann wird den scsi-Geräten der Name zu gewiesen, allerdings nicht immer gleich.

Log 1 mit Namen in erwarteter Reihenfolge
Dez 01 18:59:39 optiplex3020 kernel: hub 4-0:1.0: 2 ports detected
Dez 01 18:59:39 optiplex3020 kernel: scsi host0: ahci
Dez 01 18:59:39 optiplex3020 kernel: scsi host1: ahci
Dez 01 18:59:39 optiplex3020 kernel: scsi host2: ahci
Dez 01 18:59:39 optiplex3020 kernel: scsi host3: ahci
Dez 01 18:59:39 optiplex3020 kernel: scsi host4: ahci
Dez 01 18:59:39 optiplex3020 kernel: scsi host5: ahci
Dez 01 18:59:39 optiplex3020 kernel: ata1: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a100 irq 28 lpm-pol 3
Dez 01 18:59:39 optiplex3020 kernel: ata2: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a180 irq 28 lpm-pol 3
Dez 01 18:59:39 optiplex3020 kernel: ata3: DUMMY
Dez 01 18:59:39 optiplex3020 kernel: ata4: DUMMY
Dez 01 18:59:39 optiplex3020 kernel: ata5: DUMMY
Dez 01 18:59:39 optiplex3020 kernel: ata6: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a380 irq 28 lpm-pol 3
Dez 01 18:59:39 optiplex3020 kernel: ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
Dez 01 18:59:39 optiplex3020 kernel: ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
Dez 01 18:59:39 optiplex3020 kernel: ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: ATA-9: SAMSUNG MZ7TE256HMHP-00004, EXT0300Q, max UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: NCQ Send/Recv Log not supported
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: 500118192 sectors, multi 16: LBA48 NCQ (depth 32), AA
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: Features: Dev-Sleep
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: NCQ Send/Recv Log not supported
Dez 01 18:59:39 optiplex3020 kernel: ata1.00: configured for UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
Dez 01 18:59:39 optiplex3020 kernel: scsi 0:0:0:0: Direct-Access     ATA      SAMSUNG MZ7TE256 300Q PQ: 0 ANSI: 5
Dez 01 18:59:39 optiplex3020 kernel: tsc: Refined TSC clocksource calibration: 3292.375 MHz
Dez 01 18:59:39 optiplex3020 kernel: clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x2f75298baf3, max_idle_ns: 440795322961 ns
Dez 01 18:59:39 optiplex3020 kernel: clocksource: Switched to clocksource tsc
Dez 01 18:59:39 optiplex3020 kernel: ata2.00: ATA-10: ST6000DM003-2CY186, 0001, max UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: ata2.00: 11721045168 sectors, m00: ATulti 16: LBA48 NCQ (depth 32), AA
Dez 01 18:59:39 optiplex3020 kernel: ata6.A-10: ST1000LM048-2E7172, SDM1, max UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: ata2.00: configured for UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: scsi 1:0:0:0: Direct-Access     ATA      ST6000DM003-2CY1 0001 PQ: 0 ANSI: 5
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 32), AA
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
Dez 01 18:59:39 optiplex3020 kernel: ata6.00: configured for UDMA/133
Dez 01 18:59:39 optiplex3020 kernel: scsi 5:0:0:0: Direct-Access     ATA      ST1000LM048-2E71 SDM1 PQ: 0 ANSI: 5
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] 500118192 512-byte logical blocks: (256 GB/238 GiB)
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] Write Protect is off
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] Preferred minimum I/O size 512 bytes
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] 4096-byte physical blocks
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] Write Protect is off
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] Mode Sense: 00 3a 00 00
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 18:59:39 optiplex3020 kernel: sd 5:0:0:0: [sdc] Preferred minimum I/O size 4096 bytes
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] 11721045168 512-byte logical blocks: (6.00 TB/5.46 TiB)
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] 4096-byte physical blocks
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] Write Protect is off
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] Preferred minimum I/O size 4096 bytes
Dez 01 18:59:39 optiplex3020 kernel:  sda: sda1 sda2 sda3
Dez 01 18:59:39 optiplex3020 kernel: sd 0:0:0:0: [sda] Attached SCSI disk
Dez 01 18:59:39 optiplex3020 kernel:  sdb: sdb1
Dez 01 18:59:39 optiplex3020 kernel: sd 1:0:0:0: [sdb] Attached SCSI disk
Dez 01 18:59:39 optiplex3020 kernel:  sdc: sdc1

Log 2 mit anderer Reihenfolge
Dez 01 23:14:04 optiplex3020 kernel: ata1: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a100 irq 27 lpm-pol 3
Dez 01 23:14:04 optiplex3020 kernel: ata2: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a180 irq 27 lpm-pol 3
Dez 01 23:14:04 optiplex3020 kernel: ata3: DUMMY
Dez 01 23:14:04 optiplex3020 kernel: ata4: DUMMY
Dez 01 23:14:04 optiplex3020 kernel: ata5: DUMMY
Dez 01 23:14:04 optiplex3020 kernel: ata6: SATA max UDMA/133 abar m2048@0xf7d1a000 port 0xf7d1a380 irq 27 lpm-pol 3
Dez 01 23:14:04 optiplex3020 kernel: ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
Dez 01 23:14:04 optiplex3020 kernel: ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Dez 01 23:14:04 optiplex3020 kernel: ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: ATA-9: SAMSUNG MZ7TE256HMHP-00004, EXT0300Q, max UDMA/133
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: NCQ Send/Recv Log not supported
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: 500118192 sectors, multi 16: LBA48 NCQ (depth 32), AA
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: Features: Dev-Sleep
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: NCQ Send/Recv Log not supported
Dez 01 23:14:04 optiplex3020 kernel: ata1.00: configured for UDMA/133
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
Dez 01 23:14:04 optiplex3020 kernel: scsi 0:0:0:0: Direct-Access     ATA      SAMSUNG MZ7TE256 300Q PQ: 0 ANSI: 5
Dez 01 23:14:04 optiplex3020 kernel: ata2.00: ATA-10: ST6000DM003-2CY186, 0001, max UDMA/133
Dez 01 23:14:04 optiplex3020 kernel: ata2.00: 11721045168 sectors, multi 16: LBA48 NCQ (depth 32), AA
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: ATA-10: ST1000LM048-2E7172, SDM1, max UDMA/133
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 32), AA
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: ACPI cmd f5/00:00:00:00:00:00(SECURITY FREEZE LOCK) filtered out
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: ACPI cmd b1/c1:00:00:00:00:00(DEVICE CONFIGURATION OVERLAY) filtered out
Dez 01 23:14:04 optiplex3020 kernel: ata6.00: configured for UDMA/133
Dez 01 23:14:04 optiplex3020 kernel: scsi 5:0:0:0: Direct-Access     ATA      ST1000LM048-2E71 SDM1 PQ: 0 ANSI: 5
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] 11721045168 512-byte logical blocks: (6.00 TB/5.46 TiB)
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] 4096-byte physical blocks
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] Write Protect is off
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] 500118192 512-byte logical blocks: (256 GB/238 GiB)
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] Write Protect is off
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] Preferred minimum I/O size 4096 bytes
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] Mode Sense: 00 3a 00 00
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] 4096-byte physical blocks
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] Preferred minimum I/O size 512 bytes
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] Write Protect is off
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] Mode Sense: 00 3a 00 00
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] Preferred minimum I/O size 4096 bytes
Dez 01 23:14:04 optiplex3020 kernel:  sdc: sdc1 sdc2 sdc3
Dez 01 23:14:04 optiplex3020 kernel: sd 0:0:0:0: [sdc] Attached SCSI disk
Dez 01 23:14:04 optiplex3020 kernel:  sdb: sdb1
Dez 01 23:14:04 optiplex3020 kernel: sd 1:0:0:0: [sdb] Attached SCSI disk
Dez 01 23:14:04 optiplex3020 kernel:  sda: sda1
Dez 01 23:14:04 optiplex3020 kernel: sd 5:0:0:0: [sda] Attached SCSI disk

Normalerweise fällt so ein Verhalten nicht auf, weil die Geräte inder fstab meist mit UUID eingebunden werden. Sticks und externe Festplatten werden meist im Dateimanager eingebunden und sind dann im Verzeichnisbaum, dér Gerätename interessiert dann nicht mehr.

Kann man sie [die Namen der Festplatten] beeinflussen?

Direkt kann man die Namen nicht ändern (also ATA1 soll immer /dev/ata1 sein), aber im Userspace von Linux kann man mit dem udev manager “udev” (was für “userspace /dev” steht) einen Symlink im Dateisystem erstellen, um so z.B. eine Festplatte immer an einen vordefinierten Verzeichnis zu koppeln. Mehr dazu hier: udev › Wiki › ubuntuusers.de

Im Grunde kann man bei einer Festplatte den Namen (z.B. /dev/ata6) nicht ändern. Dieser wird vom Linux Kernel vorgegeben und ist nicht statisch. Die UUID hingegen ist pemantent, aber veränderbar. Die UUID kann man für ext-Dateisysteme das Programm tune2fs verwenden und für btrfs-Dateisysteme das Programm btrfstune.

Des weiteren kann man das LABEL der Festplatte ändern, beispielsweise mit dem Programm e2label. Hier eine Liste mit Programmen für eine Vielzahl von Dateisystemen: https://askubuntu.com/questions/1103569/how-do-i-change-the-label-reported-by-lsblk

Zurückkommend zu udev:
Mit udev-Regeln kann man einen symlink erstellen, damit z.B. eine Seriennummer immer als /dev/speicher-hdd eingehakt wird.
Dazu muss man als erstes die Seriennummer herausfinden. Dies kann man auf ganz viele Wege.
Zum Beispiel:

udevadm info --query=all --name=/dev/ata? | grep ID_SERIAL
oder
hdparm -I /dev/ata? | grep 'Serial\ Number'
oder
lshw -class disk
oder
lsblk -o MODEL,SERIAL,SIZE,STATE --nodeps

Dann kann man die udev-Regel i.d.R. im /etc/udev/rules.d/ Verzeichnis deklarieren (z.B. /etc/udev/rules.d/01-ata-disk.rules).
Das Grundschema bei udev ist “Kriterium, Aktion”:

KERNEL=="ata*", ATTRS{serial}=="ABCD1234", SYMLINK+="linked-ata"

Mit obiger Regel wird /dev/ata-1 als /dev/linked-ata eingehakt.
Man kann neben ATTRS{serial} auch nach dem Modell ATTRS{model}== und den Hersteller ATTRS{vendor}== filtern sowie nach KERNEL==, SUBSYSTEM==, DRIVER==.

anschließend ladet man die Regeln neu.

sudo udevadm control --reload
sudo udevadm trigger

Beispiel in deinem Fall für ata1.00: ATA-9: SAMSUNG MZ7TE256HMHP-00004:

KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="SAMSUNG MZ7TE256", ATTRS{scsi_device}=="0:0:0:0", SYMLINK+="ssd_system"

Heraus käme:
/dev/ssd_system/

LG,
Noah

https://www.stefanux.de/wiki/doku.php/linux/udev
https://wiki.ubuntuusers.de/udev/
https://wiki.archlinux.org/title/Udev