5

В настоящее время я работаю над сетевым хранилищем «Сделай сам», который собирает свободное дисковое пространство с помощью mhddfs.

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

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

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

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

5 ответов5

3

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

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

где $ {DEV} - устройство, которое вы опрашиваете (лучше всего запускать из сценария udev.)

3

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

/sbin/parted -l

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

/sbin/parted -lm

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

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

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

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

0

Проверьте команду gpart (угадайте разделы жесткого диска типа ПК, нужен root). Другой вопрос: как запускается ваш скрипт, когда вставляется новый диск?

0

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

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

fdisk -l /path/to/disk

или же:

sfdisk -l /path/to/disk

перечислить текущую таблицу разделов.

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

0

Мне очень понравился ответ, размещенный на stackoverflow, который предлагает:

parted --script

Подобно:

parted --script /dev/sdb print

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .