- Linux
- Залізо
- Жорсткі диски
- GCC
Пишу програму для тестування заліза, і для тестування жорстких дисків необхідно отримати список жорстких дисків і їх відповідність точкам монтування (якщо вони є) і зрозуміло файлу пристрою типу
Для цих цілей, я використовував зручну програму lsblk. яка при запиті дає все що у ній запитують:
Зручно можна вбудувати в код програми і далі парсити її висновок і мучити відповідний жорсткий диск (відбираючи рядок містить disk)
Біда прийшла звідти, звідки не чекали. Цієї програми немає на збірці Дебіан, на якій буде проводиться тест (в репах теж немає). Поміняти збірку можна. Чи є якісь альтернативні і прості варіанти отримати подібний список, наприклад через / proc або / sys?
ну просто робимо так на системі, де тулза є:
strace -o /tmp/lsblk.dump lsblk -io KNAME, TYPE, SIZE, MODEL, MOUNTPOINT
grep 'open' /tmp/lsblk.dump
І там досить чітко видно логіку роботи lsblk:
беремо папку / sys / block.
Перераховуємо в ній спершу пристрої sd *
Для кожного дивимося файл dev (наприклад, / sys / block / sda / dev) - бачимо рядок, наприклад, / sys / dev / block / 8: 0
заходимо в папку з цього шляху і дивимося там вміст файлів:
size - розмір диска
device / type - тип (0 - жорсткий диск)
device / model - модель
і т.д.
якщо справа не з цілим диском, а з розділом - виглядають / proc / swaps і / proc / mounts на предмет, чи не там де.
Тільки все одно краще в вихідні глянути, бо він складні випадки теж обробляє. Наприклад, у мене коректно дивиться крізь ці абстраціі LVM і бачить логічний тому через VG і PV на конкретному фізичному диску