Einbinden einer neuen Festplatte bei Linux zur Laufzeit

In Zeiten zunehmender Virtualisierung (mit VMware vSphere, KVM, Citrix usw.) wird es immer häufiger notwendig Festplatten im laufenden Betrieb einzubinden, da diese ohne Neustart einfach zu einer virtuellen Maschine hinzufügen wurden. Bei Linux tauchen diese Platten ohne Neustart des Gastes aber nicht so einfach auf. Damit man diese auch im laufenden Betrieb zu Gesicht bekommt, muss der Kernel die Festplattenkonfiguration neu einlesen. Wie dies ohne Neustart geht, möchte ich in diesem Artikel dokumentieren.

Welche Speicher-Adapter kennt das System?

In dem Verzeichnis /sys/class/scsi_host befindensich die dem Kernel bekannten Speicher-Adapter des Systems. Der folgende Befehl zweigt die Adapter an.

ls /sys/class/scsi_host

Wie bringe ich die Speicher-Adapter dazu neue Festplatten zu erkennen?

Mit der folgenden Schleife, bringt man alle Speicher-Adapter des Systems dazu im laufenden Betrieb nach neuen Festplatten zu suchen.

for f in /sys/class/scsi_host/host*; do echo '- - -' > $f/scan; done

Wie bringe ich die Speicher-Adapter dazu Größenänderung bei Festplatten zu erkennen?

Wenn es sich nicht um eine neue neue Festplatte sondern nur um eine geänderte handelt, wird es noch etwas komplizierter. Dank ein bisschen Zauberei mit awk, kann man auch eine Schleife bauen, die bei allen Blockdevices nach Änderungen suchen lässt. Diese sieht dann so aus.

for d in $(lsblk -Sln | awk '{if ( $3 == "disk" ) print $1}'); do echo 1 > /sys/class/block/$d/device/rescan; done