Portál AbcLinuxu, 10. května 2025 11:15
smartctl -a
i pro zjištění ne-SMART informací (model, sériové číslo…). To musíš pustit na všechny disky, buď bych enumeroval očekávané soubory (/dev/sd* a /dev/nvme*) nebo lsblk
(což mi teda vypisuje i síťové NBD disky, kde se výrobce dozvíš těžko; ale všiml jsem si, že to ukazuje major a minor device number, tak z toho by asi šlo zjistit že tě zajímá jenom SATA a NVMe). (jo a ještě jsou SD karty v /dev/mmcblk*, pokud to je čtečka co neemuluje mass storage)
Koukni např. na zdrojáky aplikace KInfoCeter – je tam modul zobrazující disky a ten používá knihovnu Solid. Můžeš se napojit na ni nebo se podívat dovnitř a udělat to podobně. Tuším, že se tam používá knihovna UDisks2 – ta má taky nějaké API, na které by ses mohl napojit.
Další možnost je jít na to přes D-Bus, což je generické API, díky kterému můžeš mít trochu volnější vazbu a nelinkovat přímo na ty konkrétní knihovny. Ale stejně se ve výsledku napojíš na ten Udisk2. Spusť si třeba qdbusviewer
a proklikej si na záložce System Bus, co tam všechno je – ne jen disky, ale všechno možné a není to jen pro čtení, dají se tím i volat metody a ty věci různě konfigurovat nebo na nich vyvolávat nějaké akce, případně poslouchat události (tzn. je to něco jako SNMP nebo JMX v Javě).
A pak můžeš taky číst ze souborového systému:
cat '/sys/dev/block/8:0/device/model'
kde vyčteš název/model disku a další věci. Výhoda je, že nepotřebuješ žádné knihovny a jen traverzuješ po adresářích a souborech, takže ti stačí čisté C++. Ale zase to bude fungovat jen na systému s jádrem Linux.
Záleží na tobě, kolik abstrakcí a knihoven tam chceš mít, jak moc obecné a multiplatformní to má být, nebo jestli to píšeš jen pro GNU/Linux – pak bych asi klidně četl z těch souborů v /sys
.
sudo lshw -class diskČi to pokryje aj napr. iSCSI alebo FC alebo iné enterprise som na notebooku nesledoval. Pri logických sa to skomplikuje lebo kadejaké loopbacky pre snapy, cryptsetupy, LVM, next gen FS (BTRFS, ZFS) alebo Clustered multinode FS.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.