df -P / | хвост -n 1 | awk '/.*/ {print $ 1}'
Возвращает корневое блочное устройство FS. Однако это не обязательно загрузочное устройство.
Лучше спросить, почему вы не сканируете SMART на всех дисках сервера?
cat /proc/mounts |grep /boot |awk '{print $1}'
Вернет что-то вроде / dev / sda1, если ваш / boot не находится на корневом устройстве.
Объедините это с ответом Криса С.
для / boot:
readlink -f / dev / block / $ (mountpoint -d / boot)
для rootfs:
readlink -f / dev / block / $ (точка монтирования -d /)
Объяснение: 1) точка монтирования -d - дает major: младшие номера устройств, смонтированных в
2) Папка / dev / block - содержит символические ссылки на все блочные устройства по номерам устройств, указывающие на обычный файл устройства в / dev
3) readlink -f - восстановить имя устройства из символьной ссылки
Работает на всех современных Linux
Вы, наверное, давно отказались от этой задачи, но я пытался сделать что-то подобное и решил, что посмотрю на недостающую часть вашей головоломки, а именно, чтобы получить обозначение диска (например, / dev / sda
) вместо обозначения раздела (например, ] / dev / sda1
).
Я начал с отличного ответа Криса С. (который также решил задачу, которую я стремился выполнить), а затем просто использовал старые добрые манипуляции со строками в bash чтобы обрезать число с конца (оставляя вас с диском вместо раздела):
# first, save the output (e.g. /dev/sda1) to a variable
rootpart=$(df -P / | tail -n 1 | awk '/.*/ { print $1 }')
# now you can trim the number off:
echo ${rootpart//[[:digit:]]/}
# if ${rootpart} was "/dev/sda1", output would be "/dev/sda"