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 nastavená kernelová voľba CONFIG_SATA_MOBILE_LPM_POLICY=3 v Ubuntu kerneli, ktorá slúži na zníženie spotreby mobilných zariadení. Problém rieši kernel boot parameter ahci.mobile_lpm_policy=1. Pri použití Microsoft Windows (Server 2022, Server 2019, Windows 10) sa žiadne problémy s hot-swapom nevyskytujú.
Aktivácia SATA Hot-Swap
Pre povolenie hot-swapu slúžia nasledujúce boot parametre kernelu:
ahci.mobile_lpm_policy=0ahci.mobile_lpm_policy=1ahci.mobile_lpm_policy=2
Základné informácie
Možnosti konfigurácie CONFIG_SATA_MOBILE_LPM_POLICY
Pri kompilácii Linux kernelu je možné zvoliť predvolenú politiku správy napájania SATA linky (SATA Link Power Management - LPM) pre čipsety („South Bridges“) pomocou CONFIG_SATA_MOBILE_LPM_POLICY.
Na výber sú nasledujúce politiky:
| CONFIG_SATA_MOBILE_LPM_POLICY | Popis | ata_lpm_policy_names[] / ata_lpm_policy |
|---|---|---|
| 0 | Ponechať nastavenia firmvéru (Vanilla Kernel Default) | ATA_LPM_UNKNOWN |
| 1 | Maximálny výkon (Maximum performance) | ATA_LPM_MAX_POWER |
| 2 | Stredná úspora (Medium power) | ATA_LPM_MED_POWER |
| 3 | Stredná úspora so zapnutým Device Initiated PM | ATA_LPM_MED_POWER_WITH_DIPM |
| 4 | Minimálna spotreba (Minimum power) | ATA_LPM_MIN_POWER |
Poznámka: Nastavenie “Minimum power” (4) je známe tým, že spôsobuje problémy s niektorými SSD/HDD, a preto by sa nemalo používať.
Ubuntu 22.04 Kernel 5.15 je skompilovaný s voľbou CONFIG_SATA_MOBILE_LPM_POLICY=3. Toto nastavenie odpája nevyužité porty počas bootu. Šetrí to energiu a je to dôležité najmä pre mobilné zariadenia na predĺženie výdrže batérie. Na serverových systémoch však kvôli tomuto nastaveniu nefunguje hot-swap. Počas vývoja Linux kernelu v5.19 sa uvažovalo o globálnom nasadení CONFIG_SATA_MOBILE_LPM_POLICY=3 ako defaultu, no kvôli problémom s hotplugom sa od tohto zámeru upustilo.
Príklady problémov so SATA hot-swapom
Nasledujúce ukážky boli testované na tomto hardvérovom labe/setupe:
- Základná doska Supermicro H12SSL-NT (revízia hardvéru 1.01 aj 1.02)
- Verzia BIOSu 2.3 a 2.4
- Šasi SC825TQC-R802LPB
- Backplane BPN-SAS3-825TQ (problém sa prejavuje aj pri priamom zapojení bez backplane)
- SATA disk pripojený priamo do dosky cez Slim-SAS kábel (pozn.: pri použití dedikovaného HBA Microsemi Adaptec 1000-8i k žiadnym problémom s hot-swapom nedochádza)
Hot-swap problémy sa vyskytujú výhradne na AMD EPYC systémoch s defaultnou konfiguráciou Ubuntu 22.04 (teda bez aplikovaného boot parametru ahci.mobile_lpm_policy=1).
Pri testoch na doske Supermicro X12DPi-N6 s procesormi Intel Xeon Scalable 3. generácie bežal hot-swap v defaultnej konfigurácii Ubuntu 22.04 úplne bez problémov.
Hot-add test (pripojenie disku)
Pri zapojení SATA disku za behu kernel nový disk automaticky vôbec nezdetekuje.
Hot-removal test (odpojenie disku)
Odpojenie disku za behu (hot-removal) nie je Ubuntu kernelom spočiatku vôbec zaregistrované.
Až vo chvíli, keď sa systém pokúsi o read/write prístup na daný disk, vyhodí kernel nasledujúce chybové hlášky v dmesg:
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.130630] ata5.00: cmd 60/00:c0:00:00:00/01:00:00:00:00/40 tag 24 ncq dma 131072 in
5res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x14 (ATA bus error)
6[ 248.132201] ata5.00: status: { DRDY }
7[ 248.132985] ata5: hard resetting link
8[ 248.447963] ata5: SATA link down (SStatus 0 SControl 300)
Manuálny rescan z CLI
Ak potrebujete manuálne zdetekovať zapojený disk bez rebootu, môžete použiť tieto príkazy:
- Cez utils nástroj (vyžaduje balík
sg3-utils):1sudo rescan-scsi-bus - Alebo priamy trigger do
sysfsz shellu:1sudo echo "0 0 0" | tee /sys/class/scsi_host/host*/scan
Ako zmeniť kernel parametre na Ubuntu / Debiane
Na Ubuntu, Debiane a väčšine distribúcií, ktoré používajú ako bootloader GRUB, sa boot parametre kernelu konfigurujú prostredníctvom globálneho konfiguračného súboru GRUB-u.
Tento postup vyžaduje administrátorské práva (sudo). Nižšie nájdeš presný návod, ako permanentne pridať parameter ahci.mobile_lpm_policy=1 pre spojazdnenie SATA hot-swapu.
Postup krok za krokom
1. Otvorenie konfiguračného súboru GRUB
Otvor konfiguračný súbor v textovom editore (napr. nano):
1sudo nano /etc/default/grub
2. Úprava riadku s parametrami
V súbore vyhľadaj riadok začínajúci na GRUB_CMDLINE_LINUX_DEFAULT. Štandardne vyzerá takto:
1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Pridaj nový parameter na koniec zoznamu (vnútri úvodzoviek) a oddeľ ho medzerou:
1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ahci.mobile_lpm_policy=1"
Tip: Ak edituješ súbor cez
nano, zmeny uložíš pomocou skratkyCtrl + O(potvrď klávesomEnter) a editor ukončíš pomocouCtrl + X.
3. Regenerácia konfigurácie GRUBu
Aby sa zmeny zapísali do reálneho bootovacieho obrazu, aktualizuj GRUB:
- Na Ubuntu:
1sudo update-grub - Na čistom Debiane (ak alias
update-grubnie je k dispozícii):1sudo grub-mkconfig -o /boot/grub/grub.cfg
4. Reboot systému
Zmeny sa prejavia až po reštarte operačného systému:
1sudo reboot
Verifikácia (Overenie funkčnosti)
Po úspešnom reštarte servera si over, či kernel naozaj beží s novo pridaným parametrom. Vypíš aktuálny procesný bootovací riadok (cmdline):
1cat /proc/cmdline
Očakávaný výstup:
Vo vypísanom riadku by si mal jasne vidieť reťazec ahci.mobile_lpm_policy=1. Ak tam je, SATA hot-swap je aktívny a plne funkčný.
Referencie a zdroje
- Hlavný článok: AMD EPYC Server with Ubuntu - Enable SATA Hot-Swap (Thomas-Krenn Wiki) – Praktický návod pre administrátorov, ako povoliť Hot-Swap pridaním bootovacieho parametra zbernice do GRUB-u.
- 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) – Technická diskusia používateľov a inžinierov o tom, ako agresívna úspora energie LPM na platformách AMD natrvalo vypína neaktívne SATA porty.
- Zmeny v Linuxovom jadre (Kernel Commits & Discussions):
- PATCH 1/2: ahci: Add PhyRdy Change control on actual LPM capability (Linux-IDE Mailing List) – Oprava v ovládači AHCI pre prípady, kedy serverový a klientsky hardvér zdieľajú rovnaké ID, čo viedlo k prenosu mobilných úsporných politík na servery.
- PATCH 3/3: ahci: Document the loss of hotplug by new LPM policy (Linux-IDE Mailing List) – Dokumentačný patch odkazujúci na AHCI špecifikáciu, podľa ktorej musí byť hotplug vypnutý, ak je povolené aktívne LPM.
- Dokumentácia konfigurácie jadra:
- CONFIG_SATA_MOBILE_LPM_POLICY – Definuje predvolenú politiku správy napájania linky (LPM) pre mobilné čipsety.
- drivers/ata/Kconfig na git.kernel.org – Zdrojový kód konfigurácie ATA subsystému v Linuxovom jadre.
- CONFIG_SATA_LPM_POLICY – Globálna konfiguračná voľba definujúca správanie správy napájania linky (LPM) pre nízkoenergetické čipsety.
- Definície v kóde Linuxovom jadra (Bootlin Elixir):
- ata_lpm_policy_names – Priradenie textových názvov k číselným politikám LPM.
- ata_lpm_policy – Dátová štruktúra definujúca stavy správy napájania pre SATA zbernicu.
- ATA_HORKAGE_NOLPM – Chybový príznak (quirk) v jadre používaný na vynútené vypnutie LPM pre problémový hardvér.
- Návody na manuálnu detekciu bez reštartu (vynútený rescan):
- How to reset and detect plug-in HDD/SSD via IDE or SATA without rebooting? (AskUbuntu) – Komunitné riešenie na preskenovanie radičov pomocou príkazu
rescan-scsi-bus. - Hotplug SATA drive not being detected automatically while system is On/Up/Booted already (Reddit) – Postup na manuálne prebudenie drajverov a zberníc cieleným zápisom skenovacieho príkazu (0 0 0) do sysfs rozhrania.
- How to reset and detect plug-in HDD/SSD via IDE or SATA without rebooting? (AskUbuntu) – Komunitné riešenie na preskenovanie radičov pomocou príkazu