Na serverových platformách AMD EPYC (generácie Rome aj Milan) nefunguje hot-swap SATA diskov v defaultnej konfigurácii Ubuntu 22.04 LTS alebo Proxmox VE 7.x. Príčinou je kernelová voľba CONFIG_SATA_MOBILE_LPM_POLICY=3. Riešením je boot parameter ahci.mobile_lpm_policy=1.
⚡ TL;DR (Rýchla pomoc): Pridaj
ahci.mobile_lpm_policy=1doGRUB_CMDLINE_LINUX_DEFAULTv/etc/default/grub→ spustisudo update-grub→ restartuj server. Detaily nájdeš nižšie.
Čo sa deje? (Technické pozadie)
Príčina problému
Pri kompilácii Linux kernelu je možné nastaviť SATA Link Power Management (LPM) politiku pre čipsety prostredníctvom voľby CONFIG_SATA_MOBILE_LPM_POLICY. Ubuntu 22.04 Kernel 5.15 je skompilovaný s voľbou CONFIG_SATA_MOBILE_LPM_POLICY=3.
Toto nastavenie sa nazýva “Medium power with Device Initiated PM” a spôsobuje, že počas boot/PCI scanu sa odpoja nevyužité SATA porty a prejdú do režimu s nízkou spotrebou. Šetrí to energiu, čo je dôležité pre mobilné zariadenia, ale na serveroch znemožňuje hot-plug detekciu.
Dostupné voľby CONFIG_SATA_MOBILE_LPM_POLICY
| Hodnota | Popis | Aj. názov |
|---|---|---|
| 0 | Ponechať nastavenia firmvéru (vanilla default) | ATA_LPM_UNKNOWN |
| 1 | Maximálny výkon | ATA_LPM_MAX_POWER |
| 2 | Stredná úspora | ATA_LPM_MED_POWER |
| 3 | Stredná úspora + Device Initiated PM | ATA_LPM_MED_POWER_WITH_DIPM ← Ubuntu 22.04 |
| 4 | Minimálna spotreba | ATA_LPM_MIN_POWER |
⚠️ Poznámka: Voľba 4 je známa problémami s niektorými SSD/HDD a nemala by sa používať.
Prečo sa to nestalo v kerneli v5.19?
V linuxovom kerneli v5.19 sa síce zvažovalo nastaviť CONFIG_SATA_MOBILE_LPM_POLICY=3 ako globálny default, no kvôli problémom s hot-plugom sa od toho zámeru upustilo.
Ako sa prejavuje problém?
Symptóm 1: Hot-add (pripojenie disku)
Pri zapojení SATA disku za behu kernel nový disk vôbec nezdetekuje bez manuálneho rescanu.
Symptóm 2: Hot-removal (odpojenie disku)
Odpojenie disku za behu nie je kernelom spočiatku zaregistrované. Chyba sa objavuje až pri pokuse o read/write prístup na daný disk:
1[ 248.127538] ata5.00: exception Emask 0x10 SAct 0x1000000 SErr 0x90202 action 0x6 frozen
2[ 248.129086] ata5: SError: { RecovComm Persist PHYRdyChg 10B8B }
3[ 248.129859] ata5.00: failed command: READ FPDMA QUEUED
4[ 248.132985] ata5: hard resetting link
5[ 248.447963] ata5: SATA link down (SStatus 0 SControl 300)
Hardware, na ktorom bol problém testovaný
- Základná doska: Supermicro H12SSL-NT (revízia 1.01 aj 1.02)
- BIOS: Verzia 2.3 a 2.4
- Šasi: SC825TQC-R802LPB s backplane BPN-SAS3-825TQ
- Disk: SATA disk cez Slim-SAS kábel alebo priame pripojenie
- Poznámka: S dedikovaným HBA (napr. Microsemi Adaptec 1000-8i) sa problém neobjavuje
Výskyt problému
Hot-swap problémy sa vyskytujú iba na AMD EPYC s defaultnou konfiguráciou Ubuntu 22.04 bez aplikovaného boot parametru. Na Intel Xeon Scalable 3. gen (testované na Supermicro X12DPi-N6) hot-swap funguje bez problémov.
Ako riešiť problém?
Manuálne nástroje (bez reštartu)
Ak potrebujete manuálne zdetekovať zapojený disk bez rebootu, môžete použiť tieto príkazy:
Variant 1: Cez utility nástroj (vyžaduje balík sg3-utils):
1sudo rescan-scsi-bus
Variant 2: Priame spustenie z shellu:
1sudo echo "0 0 0" | tee /sys/class/scsi_host/host*/scan
Permanentné riešenie: Zmena GRUB Boot Parametrov
Na Ubuntu, Debiane a väčšine distribúcií, ktoré používajú GRUB ako bootloader, sa boot parametre kernelu konfigurujú globálnym konfiguračným súborom /etc/default/grub.
Krok 1: Otvorenie GRUB konfigurácie
Otvor súbor v textovom editore:
1sudo nano /etc/default/grub
Krok 2: Úprava GRUB_CMDLINE_LINUX_DEFAULT
Vyhľadaj riadok začínajúci na GRUB_CMDLINE_LINUX_DEFAULT. Štandardne vyzerá:
1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Pridaj parameter ahci.mobile_lpm_policy=1 na koniec (vnútri úvodzoviek):
1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ahci.mobile_lpm_policy=1"
Tip (nano): Zmeny ulož pomocou
Ctrl + O(Enter), editor uzavri pomocouCtrl + X.
Krok 3: Regenerácia GRUB konfigurácie
Aby sa zmeny zapísali do bootovacieho obrazu, spusti:
Na Ubuntu:
1sudo update-grub
Na čistom Debiane:
1sudo grub-mkconfig -o /boot/grub/grub.cfg
Krok 4: Reboot
1sudo reboot
⚠️ DÔLEŽITÉ: Zmeny sa prejavia až po reštarte operačného systému.
Verifikácia
Po úspešnom reštarte servera si over, že kernel naozaj beží s parametrom. Vypíš bootovací príkazový riadok:
1cat /proc/cmdline
Očakávaný výstup: Vo vypísanom riadku by si mal vidieť reťazec ahci.mobile_lpm_policy=1. Ak tam je, SATA hot-swap je funkčný. ✓
Kontextuálne poznámky
Windows kompatibilita: Na Microsoft Windows (Server 2022, Server 2019, Windows 10) sa žiadne hot-swap problémy nevyskytujú, pretože Windows používa svoj vlastný IRST (Intel Rapid Storage Technology) driver s odlišným prístupom k SATA LPM.
Diskréne HBA: Ak máš dedikovaný HBA kolektor (napr. Microsemi Adaptec 1000-8i), problém sa zvyčajne neobjavuje, pretože HBA má vlastný SATA controler nezávislý od FCH.
Referencie a zdroje
- Hlavný článok: AMD EPYC Server with Ubuntu - Enable SATA Hot-Swap (Thomas-Krenn Wiki)
- Súvisiace hlásenie chyby (Bug Report): Ubuntu Bug 1971576 - SATA hot plug not working on AMD EPYC Rome/Milan with Ubuntu 22.04 LTS (Launchpad.net)
- Zmeny v Linuxovom jadre (Kernel Commits & Discussions):
- PATCH 1/2: ahci: Add PhyRdy Change control on actual LPM capability (Linux-IDE Mailing List)
- PATCH 3/3: ahci: Document the loss of hotplug by new LPM policy (Linux-IDE Mailing List)
- Dokumentácia konfigurácie jadra:
- Definície v kóde Linuxovom jadra (Bootlin Elixir):
- Návody na manuálnu detekciu bez reštartu (vynútený rescan):