Derrubando dispositivos de armazenamento serial de forma segura.

Alan Victor Quarta, 21 de Agosto de 2019


Uma boa prática para manuseio e procedimento de backup, principalmente em discos magnéticos é "só desplugar fisicamente o disco após o seu desligamento lógico".

Isso evita problemas, como exemplo, desgaste ocasionado pelo mal comportamento do braço de leitura na superficie do disco.

Tive essa necessidade e escrevi um script shell para executar um procedimento razoavelmente seguro para remoção do disco de backup, eu o chamo de hotswap...

#!/bin/bash
# Script: Hotswap
# Revisao: 0.6
# Desc: Conecta e Desconecta dispositivos de armazenamento serial
# Autor: Alan Victor, alanvictorjp gmail com
# Criado: 04/02/2018
# Modificado: 21/08/2019

help='
	USO: hotswap [argumento]
	EXEMPLO:

		hotswap -s | --scan
			Levanta dispositivos de armazenamento serial.

		hotswap -d | --delete
			Desmonta e remove com segurança.

		hotswap -h | --help
			Mostra Esse help!
'

clear

echo -en "\n\tHOTSWAP\n"

arg1=$1
case $arg1 in
	-s|--scan)
		a=$(ls /dev/sd[a-z])
			for portas in $(ls -d /sys/class/scsi_host/host* | sed 's/^.*host//') ; do
				echo "- - -" > /sys/class/scsi_host/host$portas/scan
			done
		b=$(ls /dev/sd[a-z])


		for i in $b ; do
		        saida=$(echo $a | grep -q $i || echo $i)
		done

		[[ -z $saida ]] && {
			echo "Nenhum dispositivo a ser levantado!";
		}||{
			echo "Dispositivo levantado: $saida"
		}
	;;

	-d|--delete)

		a=1
		ls=$(fdisk -l 2> /dev/null | grep '^Disco\|Disk \/dev' | sed 's/,\s[0-9]\{4,\}.*//g')
		lines=$(echo "$ls" | wc -l)

		echo "$ls" | \
		while read i ; do
			echo [ $a ] $i
			a=$(($a + 1))
		done

		read -p 'Opção: ' opt

		[[ $opt =~ ^[0-9]$ && $opt -le $lines ]] || { echo "Opção invalida!"; exit 0 ; }

		dev=$(echo "$ls" | sed -n "${opt}p" | sed 's/^.*dev\/\(sd[a-z]\).*/\1/')

		[[ -d /sys/block/$dev ]] || {
			echo 'Dispositivo não conectado!';
			exit;
		}

		read -p 'Parece tudo pronto para desconectar, Continuar? [S/n]: ' opt
		[[ -z $opt ]] && opt=s

		case $opt in
			s|S)
			umount /dev/${dev}* 2> /dev/null
			sleep 2
			echo offline > /sys/block/$dev/device/state && sleep 1 && \
			echo 1 > /sys/block/$dev/device/delete && \
			echo 'Dispositivo pode ser removido com segurança!'
			;;

			*)
			echo 'Saindo...';
			exit;
			;;
		esac
	;;

	-h|--help|*)
		clear ; echo "$help"
		;;
esac

Repositório: https://github.com/alanvictorjp/hotswap.git