Как проверить, на каком накопителе (HDD или SSD) хранится путь, откуда запускается скрипт?

Вопрос или проблема

как проверить, хранится ли путь, из которого запускается скрипт, на жестком диске (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

Пояснение скрипта:

  1. Команда df -P . - используется для определения файловой системы, к которой относится текущий каталог. Параметр -P обеспечивает совместимость формата.

  2. awk 'NR==2 {print $1; exit}' - выбирает вторую строку вывода (где находится информация о текущем каталоге) и извлекает имя устройства (например, /dev/sda1).

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

  4. Проверка результата: Если результат равен 0, то выводится "SSD", иначе - "HDD".

Примечание:

Этот скрипт предназначен для использования на Linux и может не работать на других операционных системах, таких как FreeBSD. В таких системах могут отсутствовать команды lsblk или df в представленной форме. Заказать дополнительные инструменты или использовать системные команды для получения информации о накопителе придется индивидуально, в зависимости от платформы.

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

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