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

Bei einem Linux unter VMware im laufenden Betrieb eine Festplatte einbinden

Oft ergibt sich die Notwendigkeit auf einem Server mit Linux im laufenden Betrieb eine neue Festplatte anzuschließen. Z.B. wenn der Server virtuell unter VMware läuft und man diesem eine neue Festplatte zuordnet hat und diese ohne Neustart des Servers einbinden möchte.

Um dies bei einem Server mit Linux zu machen benötigt man als erstes die Nummer des HBA (Host Bus Adapter). Diese findet man am besten über das sysfs raus.  Jeder HBA hat ein Verzeichnis unterhalb des Ordners /sys/class/scsi_host/.  Der HBA mit der Nummer 0 hat somit den Ordner /sys/class/scsi_host/host* usw.. In jedem dieser Ordner existiert eine Datei mit dem Namen proc_name. In dieser befindet sich der name des Treibers des jeweiligen HBA. Mit dem Wissen das der Treiber für den LSI Controller von VMware mptspi heißt, muss man jetzt nur noch den HBA, der einen Treiber mit diesem Namen hat. Um nicht in allen Dateien von Hand nachzusehen, kann man dies am besten den Befehl grep fürs ich erledigen lassen. Mit dem folgten Befehlt erhält man eine Ausgabe aller HBA, die die Buchstabenfolge mpt enthalten.

grep mpt /sys/class/scsi_host/host*/proc_name

Wenn die Ausgabe wie folgt aussieht, hat der HBA die Nummer 32.

/sys/class/scsi_host/host32/proc_name:mptspi

Nachdem man die Nummer des HBA rausgefunden hat, muss man den HBA seine Geräte neu scannen lassen. Mit dem folgenden Befehl bittet man den HBA mit der Nummer 32, seine Geräte im laufenden Betrieb neu zu scannen.

echo "- - -" > /sys/class/scsi_host/host32/scan

Danach sollte man mit dmesg sich die Kernelmeldungen ausgeben lassen. Ganz unten bei der Ausgabe sollte der Fund der neuen Festplatte gemeldet werden. Wenn die letzten Zeilen z.B. wie folgt aussehen, ist die Festplatte als Device /dev/sdb von Linux erkannt worden.

Mar  1 14:52:07 portal kernel: [ 1287.033631] scsi 32:0:1:0: Direct-Access     VMware   Virtual disk     2.0  PQ: 0 ANSI: 6
Mar  1 14:52:07 portal kernel: [ 1287.033641] scsi target32:0:1: Beginning Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034017] scsi target32:0:1: Domain Validation skipping write tests
Mar  1 14:52:07 portal kernel: [ 1287.034020] scsi target32:0:1: Ending Domain Validation
Mar  1 14:52:07 portal kernel: [ 1287.034046] scsi target32:0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 127)
Mar  1 14:52:07 portal kernel: [ 1287.034346] sd 32:0:1:0: [sdb] 104857600 512-byte logical blocks: (53.7 GB/50.0 GiB)
Mar  1 14:52:07 portal kernel: [ 1287.034422] sd 32:0:1:0: [sdb] Write Protect is off
Mar  1 14:52:07 portal kernel: [ 1287.034425] sd 32:0:1:0: [sdb] Mode Sense: 61 00 00 00
Mar  1 14:52:07 portal kernel: [ 1287.034444] sd 32:0:1:0: [sdb] Cache data unavailable
Mar  1 14:52:07 portal kernel: [ 1287.034447] sd 32:0:1:0: [sdb] Assuming drive cache: write through
Mar  1 14:52:07 portal kernel: [ 1287.034908] sd 32:0:1:0: Attached scsi generic sg2 type 0
Mar  1 14:52:07 portal systemd-udevd[1657]: Process '/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'' failed with exit code 2.
Mar  1 14:52:07 portal kernel: [ 1287.042034] sd 32:0:1:0: [sdb] Attached SCSI disk

Wenn die Festplatte als /dev/sdb erkannt wurde, können wir mit dem einrichten einer Partition weiter machen. Dazu muss zunächst eine Partitionstabelle auf der Festplatte angelegt und dann eine Partition erstellt werden. Dies kann man für die Festplatte /dev/sdb aus unserem Beispiel z.B. mit dem folgenden Befehlt erreichen.

cfdisk /dev/sdb

Nach eingäbe dieses Befehlt wird man zunächst gefragt welche Partitionstabelle man anlegen möchte. Ich empfehle die neuere und modere gpt anstelle der älteren dos zu wählen. Danach kann man in einem kleinen Menü eine neue Partition anlegen und speichern. Auf dieser Partition kann man dann mit mkfs ein Dateisystem anlegen und dieses kann man dann mit dem Befehlt mount in das laufende Linux einbinden. Und voilà, die neue Platte steht ohne Neustart zur verfügung.

VMware-Tools oder lieber open-vm-tools verwenden?

Die VMware-Tools sind Programme und Treiber, mit denen die Gastbetriebssysteme in einer virtuellen Maschine unter VMware zusätzliche Funktionalitäten erhalten. Durch diese wird die Arbeit erleichtert und die Leistung verbessert. Seit dem Jahr 2007 hat VMware weite Teile der VMware Tools als Open Source Software unter dem Namen open-vm-tools (Open Virtual Machine Tools) freigegeben.

Bei aktuellen Linux Distributionen sind die open-vm-tool in den Repositorys enthalten und können bequem über das Paket Management installiert werden.  Bei Ubuntu sind die open-vm-tools z.B. seit Version 14.04 mit dabei. Bei Debian ab der Version 7.

Bei der Installation eines Gastbetriebssystems stellt sich somit heute immer die Frage: Soll man die originalen VMware-Tools oder die open-vm-tools der jeweiligen Distribution installieren?

VMware empfiehlt in dem Knowledge Base Artikel 2073803 nach Möglichkeit die bei den Linux-Distributionen mitgelieferten open-vm-tools und nicht die VMware Tools von VMware zu verwenden. Hier heißt es dazu: „VMware recommends using OVT redistributed by operating system vendors.“

Fazit

Wenn man Linux als Betriebssystem bei einer virtuellen Maschine unter VMware verwendet, sollte man wenn möglich immer die open-vm-tools aus den Repositorys der verwendeten Distribution benutzen. Bei Windows und Linux-Distributionen die keine open-vm-tools in ihrem Repository bereitstellen, sollte man die WMware-Tools von VMware installieren.

Einzelnachweise

Installationsanleitungen