Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Awk|Bash – odmontowanie nie podpiętych dysków z systemu.

Dodano: 2012-12-07

System Ubuntu w przypadku odłączenia dysku/partycji automatycznie odmontowuje elementy z systemu, zdarzają się sytuacje, że nie wykona tej operacji dla wszystkich odłączonych partycji i przez to blokowana jest litera dysku.

Jeżeli wiemy jakie elementy zostały nie pomyślnie odmontowane i nadal istnieją ich instancje w systemie, możemy je usunąć ręcznie korzystając z komendy umount [nameDisk]. W celu podglądnięcia jakie elementy są zamontowane należy wpisać komendę df -H.

Jeżeli nie chcemy wykonywać tej operacji sami, można skorzystać z skryptu poniżej. Najpierw skrypt przeszukuje jakie dyski fizycznie są podpięte w systemie używając komendy lshw -class disk, następnie porównuje je z zamontowanymi dyskami używając komendy df -H. Po wykryciu elementów nie istniejących wykonuje komendę umount [nameDisk].

Skrypt poniżej:

#!/bin/bash

# The script umount not physically connected disk.

ubTemp=ubpart.exists;
ubMount=ubpart.mounted;

if [ -f "$ubTemp" -o -f "$ubMount" ]; then
	echo "Some file exist:";
	echo "- "#ubTemp;
	echo "- "#ubMount;
	echo "overwrite? [y]";
	read option;
	if [ "$option" != "y" ]; then
		exit 0;
	fi

	rm -f "$ubTemp";
	rm -f "$ubMount";
fi

echo "lshw -class disk";
sudo lshw -class disk | awk 'BEGIN{}{
	if ($1 == "logical"){
		print $3 >> "'$ubTemp'";
	}
}'

echo "df -H";
df -H | grep "/dev/" | awk 'BEGIN{}{
	print $1 >> "'$ubMount'";
}'

awk 'BEGIN{}{
	print "Check partition/disk: "$0;
	isPart = 0;
	while((getline line < "'$ubTemp'") > 0){
		if (index($0, line) != 0){
			isPart = 1;
			break;
		}
	}
	close("'$ubTemp'");

	if (isPart == 0){
		print "Partition/disk is mounted but not exist.";
		print "sudo umount "$0;
		system("sudo umount "$0);
	} else
		print "Partition/disk OK.";
}' $ubMount;