Вопрос или проблема
как проверить, хранится ли путь, из которого запускается скрипт, на жестком диске (HDD) или твердотельном накопителе (SSD)?
Я читал, что cat /sys/block/sda/queue/rotational
показывает 0
для SSD и 1
для HDD.
if [ "$(< /sys/block/sda/queue/rotational)" = 0 ]; then
echo "SSD"
else
echo "HDD"
fi
Но как это можно совместить с .
или $PWD
для проверки?
Что бы я сделал:
.
— это текущая директория.
#!/bin/bash
dev=$(df -P . | awk 'NR==2 {print $1;exit}')
res=$(lsblk -n -o ROTA $dev)
if ((res == 0)); then
printf '%s\n' 'SSD'
else
printf '%s\n' 'Не SSD'
fi
Примечание
lsblk
обычно уже установлен в ОС GNU/Linux. Это не так в FreeBSD, к примеру.
Более того, /sys/block/sda/queue/rotational
специфичен для Linux.
Ответ или решение
Для проверки, находится ли путь, из которого запускается скрипт, на жестком диске (HDD) или твердотельном накопителе (SSD), вы можете использовать команду lsblk
в сочетании с командой df
. Такой подход позволяет узнать, к какому устройству относится текущий каталог, а затем определить, является ли это устройство накопителем SSD или HDD.
Вот пример скрипта на Bash, который выполняет эту задачу:
#!/bin/bash
# Получаем устройство, на котором расположен текущий каталог
dev=$(df -P . | awk 'NR==2 {print $1; exit}')
# Получаем информацию о типе устройства
res=$(lsblk -n -o ROTA $dev)
# Проверяем значение и выводим результат
if ((res == 0)); then
echo "SSD"
else
echo "HDD"
fi
Пояснение скрипта:
-
Команда
df -P .
- используется для определения файловой системы, к которой относится текущий каталог. Параметр-P
обеспечивает совместимость формата. -
awk 'NR==2 {print $1; exit}'
- выбирает вторую строку вывода (где находится информация о текущем каталоге) и извлекает имя устройства (например,/dev/sda1
). -
lsblk -n -o ROTA $dev
- выполняет вывод информации о блочных устройствах в удобном формате. Опция-n
отключает заголовки, а-o ROTA
указывает, что необходимо вывести значение "ROTAtive", где0
соответствует SSD, а1
- HDD. -
Проверка результата: Если результат равен
0
, то выводится "SSD", иначе - "HDD".
Примечание:
Этот скрипт предназначен для использования на Linux и может не работать на других операционных системах, таких как FreeBSD. В таких системах могут отсутствовать команды lsblk
или df
в представленной форме. Заказать дополнительные инструменты или использовать системные команды для получения информации о накопителе придется индивидуально, в зависимости от платформы.