Я создаю сценарий оболочки (который будет вызываться cron), который еженедельно запускает smartctl на загружаемом диске. Есть ли достаточно универсальный способ определения устройства загрузочного блока (IE - / dev / sda, / dev / hdb и т. Д.)? Ожидаемая установка будет стандартной, я думаю, мне удастся избежать использования grep "/" в / etc / fstab, мне просто интересно, есть ли более изящный способ.
Этот сценарий будет специально развернут на Fedora и, возможно, на Ubuntu.
df -P / | tail -n 1 | awk '/.*/ { print $1 }'
Вернет корневое блочное устройство ФС. Однако не обязательно загрузочное устройство.
Лучше спросить, почему вы не сканируете SMART на всех дисках на сервере?
для / boot:
readlink -f / dev / block / $ (точка монтирования -d / загрузка)
для rootfs:
readlink -f / dev / block / $ (точка монтирования -d /)
Объяснение: 1) точка монтирования -d - дает старший: младший номер устройства, установленного в
2) Папка / dev / block - содержит символические ссылки на все блочные устройства по номерам устройств, указывающие на обычный файл устройства в / dev
3) readlink -f - восстановить имя устройства из символьной ссылки
Работает на всех современных Linux
cat /proc/mounts |grep /boot |awk '{print $1}'
Вернет что-то вроде / dev / sda1, если ваш / boot находится не на корневом устройстве.
Объедините это с ответом Криса С.
Вы, вероятно, уже давно отказались от этой задачи, но я пытался сделать что-то подобное и решил, что загляну в недостающую часть вашей головоломки, а именно, чтобы получить обозначение диска (например, /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"