Blue Flower

Иногда возникает необходимость переподключить диск с одной машины на другую. При чем в режиме online. В моем случае это единственный логический том LVM в виртуальной группе. Чтобы не вспоминать каждый раз последовательность команд написал пару скриптов. Первый - lvumount.sh

#!/bin/bash
if [[ $# > 1 ]]; then
echo "Usage $0 or $0 <lvname>"
fi;
if [[ $# == 1 ]]; then
LVNAME=$1;
else
lsblk
read -p 'Enter volume name: ' LVNAME
fi;

VGNAME=$(lvs | grep "$LVNAME" | awk '{print $2}')
if [[ ! `lvs | grep $VGNAME | wc -l` == 1 ]]; then
echo "Volume group $VGNAME contains more then one logical volume."
exit
fi;

DISKS=$(pvs | grep $VGNAME | awk '{print $1}' | sed -r "s/(\/dev\/[sh]d[a-z])[0-9]+/\1/gi")
echo "Unmounting $LVNAME logical volume."
mount | grep $LVNAME | awk '{print $3}' | xargs umount

mount | grep $VGNAME && {
echo "Deactivating $VGNAME volumegroup."
/sbin/vgchange -an /dev/$VGNAME
/usr/bin/sync;
}

for DISK in $DISKS
do
if [[ $(test -b $DISK) -eq true ]]; then
echo "Power off disk $DISK."
echo 1 > /sys/block$DISK/device/delete
fi;
done;

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

Задача второго скрипта, после физического подключения диска, запустить процедуру поиска новых устройств.

#!/bin/bash
for HOST in $(ls -l /sys/class/scsi_host | awk '{print $9}') 
do 
echo "- - -" > /sys/class/scsi_host/$HOST/scan
done;

Дальше остается только активировать виртуальную группу и смонтировать логический том:

vgchange -ay <VGNAME>
mount <MOUNTPOINT>