Иногда возникает необходимость переподключить диск с одной машины на другую. При чем в режиме online. В моем случае это единственный логический том LVM в виртуальной группе. Чтобы не вспоминать каждый раз последовательность команд написал пару скриптов. Первый - lvumount.sh
#!/bin/bashif [[ $# > 1 ]]; then echo "Usage $0 or $0 <lvname>"fi;if [[ $# == 1 ]]; then LVNAME=$1;else lsblk read -p 'Enter volume name: ' LVNAMEfi;
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." exitfi;
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 $DISKSdo if [[ $(test -b $DISK) -eq true ]]; then echo "Power off disk $DISK." echo 1 > /sys/block$DISK/device/delete fi;done;
Скрипт по имени логического тома определяет имя виртуальной группы и если он там один, то размонтируется файловая система, деактивируется виртуальная группа, сбрасываются все закешированные блоки данных на диск и тушатся все диски, которые используются этой виртуальной группой. После выполнения скрипта диски готовы к физическому извлечению из сервера.
Задача второго скрипта, после физического подключения диска, запустить процедуру поиска новых устройств.
#!/bin/bashfor HOST in $(ls -l /sys/class/scsi_host | awk '{print $9}') do echo "- - -" > /sys/class/scsi_host/$HOST/scandone;
Дальше остается только активировать виртуальную группу и смонтировать логический том:
vgchange -ay <VGNAME>mount <MOUNTPOINT>
