bash - проверка того, не разбит ли диск на разделы

bash - проверка того, не разбит ли диск на разделы

В настоящее время я работаю над созданием сетевого хранилища, которое объединяет свободное дисковое пространство с помощью mhddfs.

Теперь мне нужно, например, при наличии отсека с возможностью горячей замены, чтобы при вставке нового неразмеченного диска я автоматически разбивал диск на разделы с помощью скрипта bash и монтировал новый раздел mhddfs.

Та же ситуация возникает, если сервер выключается, вставляется новый диск и сервер снова включается.

Итак, вопрос: как обнаружить неразмеченный диск с помощью bash-скрипта?

Вопрос также включает в себя то, что не должно быть ложных срабатываний. Например, если вставлен зашифрованный диск, он не должен автоматически переразбиваться на разделы и форматироваться. Этот момент представляет наибольший интерес в вопросе.

решение1

Одним из вариантов выполнения проверки и разбиения на разделы является partedкоманда. Чтобы получить информацию о разделах на всех дисковых блочных устройствах в системе в «человечески понятном» формате:

/sbin/parted -l

или, в «машиночитаемом» формате, используйте:

/sbin/parted -lm

Вам необходимо будет проанализировать выходные данные, чтобы определить, имеет ли диск действительную таблицу разделов.

Затем используйте что-то вроде:

/sbin/parted <device> --script mkpart primary 1 -- -1

чтобы создать один раздел, используя весь диск. Синтаксис подкоманды mkpart взят из памяти, и у меня нет системы с доступным диском, чтобы проверить его правильность.

решение2

Вот способ, который я использую для резервного копирования.

if [ $(/sbin/sfdisk -d ${DEV} 2>&1) == "" ]; then echo "Device not partitioned"; fi

где ${DEV} — опрашиваемое устройство (лучше всего запускать из скрипта udev.)

решение3

Я предполагаю, что вы делаете это на ядре Linux.

Используйте fdiskили sfdiskиз util-linuxупаковки:

fdisk -l /path/to/disk

или:

sfdisk -l /path/to/disk

для вывода списка текущей таблицы разделов.

Linux обнаруживает доступные разделы, поэтому /dev/diskдля ваших нужд может быть достаточно поиска в каталогах.

решение4

Мне очень понравился ответ, опубликованный напереполнение стекачто предполагает:

parted --script

Нравиться:

parted --script /dev/sdb print

Связанный контент