Как проверить, на каком диске (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) находится текущий скрипт, вы можете использовать информацию, получаемую из системных файлов и команд Linux. Давайте более подробно рассмотрим, как это сделать.

Ваша идея о использовании команды df для получения информации о файловой системе текущего каталога, а затем использование lsblk для определения типа устройства, кажется правильной. Вот как вы можете реализовать это в Bash-скрипте:

#!/bin/bash

# Получаем устройство, на котором находится текущий каталог
dev=$(df -P . | awk 'NR==2 {print $1; exit}')

# Проверяем, является ли устройство SSD или HDD
res=$(lsblk -n -o ROTA $dev)

# Выводим результат
if (( res == 0 )); then
    echo "SSD"
else
    echo "HDD"
fi

Объяснение кода:

  1. df -P .: Эта команда выводит информацию о файловой системе, где находится текущий каталог (представленный точкой .). Опция -P делает вывод более предсказуемым.

  2. awk 'NR==2 {print $1; exit}': Мы берем вторую строку из вывода df, которая содержит информацию об устройстве. Первое поле – это имя устройства.

  3. lsblk -n -o ROTA $dev: Команда lsblk используется для получения информации о блочных устройствах. Опция -n предотвращает вывод заголовка, а -o ROTA показывает, является ли устройство вращающимся (HDD=1) или нет (SSD=0).

  4. if (( res == 0 )): Если результат (res) равен 0, то диск – это SSD, иначе – HDD.

Важно учитывать:

  • Данный скрипт предназначен для работы в средах Linux. Команду lsblk обычно можно найти в большинстве дистрибутивов Linux, в то время как она может отсутствовать в других операционных системах (например, FreeBSD).

  • Учтите, что данный подход основывается на стандартных путях и командах, специфичных для Linux. Если вы работаете с другой системой, вам, вероятно, нужно будет найти другие средства для получения аналогичной информации.

Этот скрипт обеспечивает простой и эффективный способ определения типа диска, на котором размещен текущий скрипт, и может быть использован в различных сценариях автоматизации и тестирования.

Оцените материал
Добавить комментарий

Капча загружается...