Raum ist in der kleinsten Hütte…

Das zumindest denkt sich Veeam Backup & Replication, wenn es eng wird im Repository – zumindest zu eng für ein weiteres Vollbackup.

Bei der klassischen “Forward Incremental” Methode, bestehend aus einer (z.B. wöchentlichen) Vollsicherung und mehreren (täglichen) inkrementellen Sicherungen kann man in einem zu klein dimensionierten Backup Repository schon mal schnell an die Grenzen stossen.

Ich sehe es leider viel zu oft bei meinen Kunden, dass der Speicherplatz viel zu knapp bemessen wurde, so dass stellenweise weniger als drei Vollsicherungen gleichzeitig Platz finden. Daran, dass Veeam ja auch noch etwas rangieren muss, gerade wenn Synthetic Fulls erstellt werden, denken leider die wenigsten Entscheider.

Die Inkrements sind dabei natürlich alle abhängig von sämtlichen vorherigen Backups im aktuellen Zyklus, so dass der Verlust einer Sicherungsdatei alle darauf folgenden vollkommen unbrauchbar macht.

Aber zurück zum Titel dieses Posts: Steht am Wochenende mal wieder eine Vollsicherung an, obwohl nicht ausreichend Speicherplatz im Repository vorhanden ist, wird Veeam stattdessen eine weitere inkrementelle Sicherung starten, getreu dem Motto “Besser als gar keine Sicherung!” und “Einer geht noch!”.

So weit, so gut, aber dadurch wird das Problem weiter nach hinten geschoben und früher oder später ist das letzte Kilobyte geschrieben und der Backup Job läuft vor den berühmten Hammer.

Genau das ist mir heute zum wiederholten Male begegnet. Der Backup Job war für 30 Restore Points konfiguriert, vorhanden waren 160 – alle in ein- und demselben Backupzyklus, alle abhängig von ihren Vorgängern. Eine unangenehme Situation, wenn man dem Kunden erklären muss, dass er sich von seiner kompletten Datensicherung trennen muss, um eine aktuelle zu erstellen. Glücklich, wer dann die 3-2-1 Regel befolgt hat und über weitere Kopien verfügt.

Wo aber ist der Unterschied zur “Forever Forward Incremental” Methode, in der ja auch niemals eine aktuelle Vollsicherung erstellt und der ursprüngliche Zyklus bis in alle Ewigkeit weitergeführt wird?

Die Antwort liegt in der Konfiguration der Restore Point Anzahl versteckt. Während bei der klassischen Methode ganz optimistisch davon ausgegangen wird, dass schon irgendwann wieder Platz für ein weiteres Full sein wird, und ältere Sicherungsdateien aufgrund ihrer Retention automatisch gelöscht werden können, ist bei “Forever” ja von vorneherein klar, dass die Kette unendlich weitergeht.
Um also das Repository nicht platzen zu lassen und gleichzeit die geforderte Anzahl an Restore Points vorzuhalten, wendet Veeam nach der eigentlichen Sicherung die Methode der “Transformation” an. Dabei werden die Datenblöcke des ältesten inkrementellen Restore Points in das am Anfang der Kette stehenden “Full” injiziert und die danach nicht mehr benötigte inkrementelle Sicherung aus dem Repository gelöscht.
Dadurch hat man immer exakt die eingestellte Anzahl an Wiederherstellungspunkten, bei 30 Stück also eine Vollsicherung und 29 Inkremente.

Die gute Nachricht ist: Ich kann jederzeit aus meinem Forward Incremental Backup ein Forever Forward Incremental machen, indem ich in der Job Konfiguration (unter Storage -> Advanced) einfach die Haken für Synthetic Full und Active Full entferne und den Job ein weiteres Mal laufen lasse (siehe Screenshot).

Gesetzt den Fall, dass mein Repository noch ein bisschen Platz zum Rangieren hat, erzeugt das erst eine weitere inkrementelle Sicherungsdatei und transformiert anschliessend die ältesten Restore Points in eine “neue” Vollsicherung.

In den letzten 9 Stunden sind mittels dieser Vorgehensweise aus den oben genannten 160 Restore Points mittlerweilen 116 geworden – die 30 sind dann wohl irgendwann am Wochenende auch erreicht…

Schwerer Bug in OpenSSL – Serverüberprüfen

Wie ja sicherlich einige von Euch schon gehört haben, gibt es zur Zeit einen sehr gefährlichen Bug im OpenSSL: http://www.heise.de/newsticker/meldung/Der-GAU-fuer-Verschluesselung-im-Web-Horror-Bug-in-OpenSSL-2165517.html Wer seine Webseite Überprüfen möchte kann hier das Webinterface benutzen: http://filippo.io/Heartbleed/ Quelle: http://filippo.io/Heartbleed/ Ist euer Server Angreifbar? Nutzt die Kommentarfunktion!

Wie ja sicherlich einige von Euch schon gehört haben, gibt es zur Zeit einen sehr gefährlichen Bug im OpenSSL: http://www.heise.de/newsticker/meldung/Der-GAU-fuer-Verschluesselung-im-Web-Horror-Bug-in-OpenSSL-2165517.html
Wer seine Webseite Überprüfen möchte kann hier das Webinterface benutzen: http://filippo.io/Heartbleed/
image
Quelle: http://filippo.io/Heartbleed/
Ist euer Server Angreifbar? Nutzt die Kommentarfunktion! Zwinkerndes Smiley

Remote syslog für Oracle VM

Beim Betrieb einer Oracle VM-Umgebung ist es hilfreich, die syslog-Meldungen der OVM-Server auf einen Host zentral zu sammeln. Da nicht jeder einen syslog-Server im Einsatz hat, möchte ich nachfolgend beschreiben, wie man sehr einfach einen solchen Server aufsetzen kann. Ich verwende dafür meist den OVM-Manager, da dieser für eine OVM-Umgebung benötigt wird und man so … Continue reading “Remote syslog für Oracle VM”

Beim Betrieb einer Oracle VM-Umgebung ist es hilfreich, die syslog-Meldungen der OVM-Server auf einen Host zentral zu sammeln. Da nicht jeder einen syslog-Server im Einsatz hat, möchte ich nachfolgend beschreiben, wie man sehr einfach einen solchen Server aufsetzen kann.
Ich verwende dafür meist den OVM-Manager, da dieser für eine OVM-Umgebung benötigt wird und man so alle notwendigen Loginformationen auf einen Server vereinen kann.
Auf OracleLinux6 wird schon im Rahmen der OS-Installation rsyslog mit installiert, so das nur noch Konfigruationsarbeit notwendig ist.
Auf dem OVM-Manager muß lediglich folgende Datei angelegt werden. In der ‘if’-Zeile muß noch der Hostname vom OVM-Manager eingetragen werden, damit die Remotemeldungen in die zusätzlichen Logs geschrieben werden. Andernfalls landen sie im syslog unter /var/log/messages
vi /etc/rsyslog.d/remotehost.conf

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$template RemoteHost,"/var/log/remote-hosts/%HOSTNAME%/%HOSTNAME%.log"
if ($hostname != 'OVM-Manager Hostname') then ?RemoteHost
& ~

Nun noch das Verzeichnis für die Remotelogs erzeugen:

mkdir /var/log/remote-hosts

Syslog neu starten:

service rsyslog restart

Nun noch den logrotate konfigurieren:
vi /etc/logrotate.d/syslog-remote

/var/log/remote-hosts/*/*.log
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

Nun ist der Syslogserver konfiguriert.
Auf den OVM-Servern muß der syslog noch angepaßt werden, damit er die Meldungen an den neuen Syslogserver schickt:
vi /etc/syslog.conf

*.info;mail.none;authpriv.none;cron.none @192.168.100.234
*.info;mail.none;authpriv.none;cron.none /var/log/messages

Die untere Zeile existiert bereits in syslog.conf. Die Zeile darüber muß mit der IP vom OVM-Manager eingefügt und der syslog neu gestartet werden.

service syslog reload
logger test

Der syslog-Eintrag mit logger sollte nun auf dem syslogserver im Verzeichnis /etc/logrotate.d/syslog-remote/.log sichtbar werden.
Nun sind wir mit der Konfiguration fertig. 🙂

Informations about CPU- and RAM-HotPlug at VMs on VMware vSphere 5

Enable CPU-Hot Plug and RAM-Hot Add at Virtual machines on VMware vCenter 5 Update 12.02.2013 / Gabrie post in the comments a important extra info about Hot-Add and post the link to the blog from Duncan Epping: http://www.yellow-bricks.com/2012/01/16/enabling-hot-add-by-default-cc-gabvirtualworld/ it’s important to read this!!! vSphere Virtual Machine Administration, Chapter 8 “Configuring Virtual Machines”, Section “Change CPU Hot Plug Settings … Continue reading “Informations about CPU- and RAM-HotPlug at VMs on VMware vSphere 5”

Enable CPU-Hot Plug and RAM-Hot Add at Virtual machines on VMware vCenter 5
Update 12.02.2013 / Gabrie post in the comments a important extra info about Hot-Add and post the link to the blog from Duncan Eppinghttp://www.yellow-bricks.com/2012/01/16/enabling-hot-add-by-default-cc-gabvirtualworld/ it’s important to read this!!!
vSphere Virtual Machine Administration, Chapter 8 “Configuring Virtual Machines”, Section “Change CPU Hot Plug Settings in the … Client”, page 94.
cpu-and-ram-hot-add
Some conditions and requirements for CPU Hot Plug

  • If possible, use hardware version 8 virtual machines.
  • Hot-adding multicore virtual CPUs is supported only with hardware version 8 virtual machines.
  • Not all guest operating systems support CPU hot add.
  • To use the CPU hot-add feature with hardware version 7 virtual machines, set the Number of cores per socket to 1.
  • Adding CPU resources to a running virtual machine with CPU hot plug enabled disconnects and reconnects all USB passthrough devices connected to that virtual machine.
  • For Linux guest operating VMware Tools must be installed.
  • The virtual machine must powered off to configure he Hot CPU settings.
  • Hot remove of Memory is not supported.
  • Hot remove of CPU is not supported.

To enable new CPU after adding a new CPU. You can use this script:
Hot add cpu to supported Linux guestOS

#!/bin/bash
# William Lam
# http://engineering.ucsb.edu/~duonglt/vmware/
# hot-add cpu to LINUX system using vSphere ESX(i) 4.0
# 08/09/2009
for CPU in $(ls /sys/devices/system/cpu/ | grep cpu | grep -v idle)
do
CPU_DIR="/sys/devices/system/cpu/${CPU}"
echo "Found cpu: "${CPU_DIR}" ..."
CPU_STATE_FILE="${CPU_DIR}/online"
if [ -f "${CPU_STATE_FILE}" ]; then
STATE=$(cat "${CPU_STATE_FILE}" | grep 1)
if [ "${STATE}" == "1" ]; then
echo -e "t${CPU} already online"
else
echo -e "t${CPU} is new cpu, onlining cpu ..."
echo 1 > "${CPU_STATE_FILE}"
fi
else
echo -e "t${CPU} already configured prior to hot-add"
fi
done

Hot adding memory in Linux

ONLY for Suse Linux Enterprise Linux 11
Note: These instructions work for SLES OS. Other distributions may be different.
To enable acpi_memhotplug, run this command within the SLES virtual machine:

modprobe acpi_memhotplug

Using vSphere Client, edit the virtual machine settings to increase the memory assigned to the virtual machine. For more information, see Increasing the amount of memory assigned to a virtual machine (1004059).
Bring the memory online in /sys/devices/system/memory with the command:

echo online > /sys/devices/system/memory/memory[number]/state

Run this command to check the state of the memory, looking for memory that appears offline:

grep line /sys/devices/system/memory/*/state

If memory appears as offline, set it to online with the command:

echo online > /sys/devices/system/memory/memory[number]/state

Verify that you can see the extra memory with the command:

free -m

Expert Mode: PowerCLI

This Works when System is online, but need one “cold” start to enable this function.
Enable-MemHotAdd and Enable-vCpuHotAdd

Function Enable-MemHotAdd($vm){
$vmview = Get-vm $vm | Get-View
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$extra = New-Object VMware.Vim.optionvalue
$extra.Key="mem.hotadd"
$extra.Value="true"
$vmConfigSpec.extraconfig += $extra
$vmview.ReconfigVM($vmConfigSpec)
}
Function Enable-vCpuHotAdd($vm){
$vmview = Get-vm $vm | Get-View
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$extra = New-Object VMware.Vim.optionvalue
$extra.Key="vcpu.hotadd"
$extra.Value="true"
$vmConfigSpec.extraconfig += $extra
$vmview.ReconfigVM($vmConfigSpec)
}

 

Good information about hot-add cpu and memory can found here

 

Nagios-Plugin für Oracle Grid-Infrastructure und Oracle-Restart

Hallo, neben dem Thema Virtualisierung beschäftige ich mich noch viel mit Oracle Grid-Infrastructure und Nagios. Ich habe mir heute mal die Zeit genommen und ein entsprechendes Plugin geschrieben. Getestet habe ich das Skript mit Oracle Restart 11.2.0.3 und Grid-Infrastructure 11.2.0.3. Es wird mindestens die Version 11.2.0.1 benötigt, da mit der Grid-Infrastructure die Syntax von crsctl … Continue reading “Nagios-Plugin für Oracle Grid-Infrastructure und Oracle-Restart”

Hallo,
neben dem Thema Virtualisierung beschäftige ich mich noch viel mit Oracle Grid-Infrastructure und Nagios.
Ich habe mir heute mal die Zeit genommen und ein entsprechendes Plugin geschrieben.
Getestet habe ich das Skript mit Oracle Restart 11.2.0.3 und Grid-Infrastructure 11.2.0.3. Es wird mindestens die Version 11.2.0.1 benötigt, da mit der Grid-Infrastructure die Syntax von crsctl grundlegend geändert wurde.
Folgende Punkte werden im Plugin berücksichtigt:

  • Support für Oracle Restart und Grid-Infrastructure
    wird automatisch erkannt
  • Anzahl Voting-Disks bei Grid-Infrastructure überwachen
    verlorene Voting-Disk führt zur CRITICAL-Meldung
    Überwachung der Voting-Disks nur bei Grid-Infrastructure
  • Resourcen im Status OFFLINE oder INTERMEDIATE die nicht im AUTO_START=never sind führen zum CRITICAL
  • ora.gsd und ora.ons werden bei der Statusauswertung ignoriert
  • sudo für Clusterbefehle erforderlich

Im Kopfbereich des Plugins befindet sich ein Beispiel für die sudo-Konfiguration
Parallel habe ich das Plugin auf http://exchange.nagios.org eingereicht, warte dort aber noch auf die Veröffentlichung.
Gruß
Thorsten
Update: 23.01.2012
Das Plugin steht nun auch auf Nagiosexchange zur Verfügung:
http://exchange.nagios.org/directory/Plugins/Clustering-and-High-2DAvailability/Check-Oracle-Grid-2DInfrastructure-or-Oracle-Restart/details
Continue reading “Nagios-Plugin für Oracle Grid-Infrastructure und Oracle-Restart”

(Raid-)Monitoring in Zabbix LSI MegaRAID SAS 9260-4i

Beim Betrieb eines RAID-1 möchte man üblicherweise über einen Ausfall einer Platte möglichst sofort informiert werden, um sie schnellstmöglich tauschen lassen zu können. Nach Installation des CIM-Providers von LSI für den LSI MegaRAID SAS 9260-4i wird auf der Hardware-Monitoring-Seite im vSphere-Client der Status des RAID angezeigt. Eine aktive Alarmierung ist aber nur in der kostenpflichtigen Version … Continue reading “(Raid-)Monitoring in Zabbix LSI MegaRAID SAS 9260-4i”

Beim Betrieb eines RAID-1 möchte man üblicherweise über einen Ausfall einer Platte möglichst sofort informiert werden, um sie schnellstmöglich tauschen lassen zu können.
Nach Installation des CIM-Providers von LSI für den LSI MegaRAID SAS 9260-4i wird auf der Hardware-Monitoring-Seite im vSphere-Client der Status des RAID angezeigt. Eine aktive Alarmierung ist aber nur in der kostenpflichtigen Version und bei Betrieb eines vCenter möglich – der vSphere-Client allein hat keine Alarmierungsfunktionalität.
Als Alternative installieren wir das “MegaCli” (ein Kommandozeilentool zum Management des RAID-Controllers) auf dem Host und richten ein Skript ein, das regelmäßig Hardwarestatus-Informationen zusammenstellt und per SCP an einen Server schickt, auf dem die Informationen weiter ausgewertet werden können.
In unserem Beispiel verwenden wir die Monitoring-Software “Zabbix”, für die wir ein Skript, User-Parameter und ein Template zur Verfügung stellen. Mit etwas Erfahrung sollten sich die Skripts aber auch für andere Monitoring-Systeme anpassen lassen.

Skriptinstallation auf dem ESXi-Host

MegaCli installieren

In diesem Abschnitt der Installationsanleitung ist beschrieben, wie wir den MegaCli installieren.

Verzeichnis für die Skripts einrichten

Da der Großteil des ESXi-Dateisystems beim Booten neu zusammengesetzt und vorige Inhalte damit gelöscht werden, brauchen wir einen “sicheren Ort” für unsere Skripts und Dateien. Wir entschließen uns, ein Unterverzeichnis des Datastores zu benutzen, hier /vmfs/volumes/datastore1/lsi. Dieses legen wir an.
[bash]mkdir /vmfs/volumes/datastore1/lsi[/bash]

SSH-Key vom Monitoring-Server übertragen

Die fertigen RAID-Informationen sollen per SCP auf den Monitoring-Server geschickt werden. Damit dies automatisiert und ohne Kennworteingabe geht, brauchen wir ein “Identity-File”, sprich den SSH Private Key des gewünschten Users auf dem Monitoring-Server.
In unserem Beispiel hat der Monitoring-Server den Hostnamen centaurus.tianet.de und der User heißt zabbix
Mit dem Kommando ssh-keygen erzeugen wir auf dem Monitoring-Server ein solches, falls der User noch keins hat. Die Passphrase lassen wir leer, da der ESXi-Host ohne Kennworteingabe den Key benutzen können muß.
[bash]zabbix@centaurus:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zabbix/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zabbix/.ssh/id_rsa.
Your public key has been saved in /home/zabbix/.ssh/id_rsa.pub.
The key fingerprint is:
4c:60:c9:cb:0f:e4:92:c4:2a:40:60:86:af:82:0f:7b zabbix@centaurus
The key’s randomart image is: […][/bash]
Die Datei id_rsa kopieren wir per SCP auf den ESXi-Host ins richtige Verzeichnis. Dazu brauchen wir das Root-Kennwort.
[bash]zabbix@centaurus:~$ scp .ssh/id_rsa root@esxi.tianet.de:/vmfs/volumes/datastore1/lsi/centaurus_zabbix_id
The authenticity of host ‘esxi.tianet.de (5.9.86.110)’ can’t be established.
RSA key fingerprint is 77:d8:25:f8:40:16:e6:6c:36:c1:ed:5f:8f:99:6e:b0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘esxi.tianet.de,5.9.86.110’ (RSA) to the list of known hosts.
Password:
id_rsa 100% 1675 1.6KB/s 00:00[/bash]
Continue reading “(Raid-)Monitoring in Zabbix LSI MegaRAID SAS 9260-4i”

fdisk und LVM automatisieren

Hallo, als Ergänzung zum Artikel von Sven , habe ich ein Shellskript geschrieben, das den Einsatz vom LVM deutlich einfacher werden läßt. Ich persönlich bevorzuge die Variante, auf den Festplatten immer eine Partition zu erzeugen, auch wenn das unter LVM nicht zwingend erforderlich ist. Solltet Ihr mal in den Genuß von Oracle ASM kommen, wird … Continue reading “fdisk und LVM automatisieren”

Hallo,
als Ergänzung zum Artikel von Sven , habe ich ein Shellskript geschrieben, das den Einsatz vom LVM deutlich einfacher werden läßt.
Ich persönlich bevorzuge die Variante, auf den Festplatten immer eine Partition zu erzeugen, auch wenn das unter LVM nicht zwingend erforderlich ist. Solltet Ihr mal in den Genuß von Oracle ASM kommen, wird schnell klar, warum Partitionen sinnvoll sind.
Der Punkt ist, wie man die Festplatten von LVM und ASM noch unterscheiden soll, wenn keine Partitionen angelegt wurden. Hier kann man sich sehr schnell Daten zerstören, wenn auf der falschen Platte gearbeitet wird. Es sollte darauf geachtet werden, das die Partitionen einen sinnvollen Partitionstyp haben. Dann kann mittels ‘fdisk -l’ sehr leicht erkannt werden, wofür welche Festplatte genutzt wird. Mit ‘pvs’ sieht man zwar auch die Physical-Volumes aber wenn ich ein Physical-Volume mittels pvcreate beschreibe das zu ASM gehört, ist das Chaos perfekt…
Bei mir gibt es keine Festplatten ohne Partitionen bzw. Partitionstabellen mehr!
Einen Nachteil darf man dabei aber nicht vergessen. Es gibt Probleme, wenn man eine Festplatte vergrößern möchte, da dann die Partitionstabelle geändert werden muß, was zur Laufzeit meist nicht möglich ist, wenn noch ein File-Handle auf der Festplatte oder einer zugehörigen Partition vorhanden ist.
Dieser Nachteil ist bei genauer Betrachtung kein Problem, da unter Oracle-ASM oder LVM eine Volume-Gruppe durch zusätzliche Platten erweiterbar ist. Grundsäzlich empfehle ich das Ergänzen von Festplatten vor dem Erweitern, da bei letzterem schon einige Daten-GAUs passiert sind…
Nun zum Skript. Was macht das?
prüfe ob eine Partitionstabelle auf dem Device vorhanden ist.
Falls ja, wird die Festplatte nicht verändert. Es könnte ja sein, das man beim Device einen Fehler gemacht hat…
prüfe mittels blkid ob etwas ‘brauchbares’ auf der Platte vorhanden ist – könnte ja jemand ein Filesystem ohne Partition angelegt haben
Lege eine 1. primäre Partition an
Erzeuge ein physical Volume auf der Partition
Prüfe ob eine Volume-Gruppe mit dem Namen vorhanden ist
ja, erweitere die bestehende Volume-Gruppe
nein, lege eine neue Volume-Gruppe an
Wie sieht das in der Prayis aus?
Neue Volume-Gruppe erzeugen:
[sourcecode language=”bash”][root@rac1 fdisk]# ./sfdisk_lvm_vg.sh /dev/xvdj testvg
Disk /dev/xvdj: 652 cylinders, 255 heads, 63 sectors/track
/dev/xvdj: unrecognized partition table type
Old situation:
No partitions found
New situation:
Warning: The partition table looks like it was made
for C/H/S=*/181/40 (instead of 652/255/63).
For this listing I’ll assume that geometry.
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/xvdj1 2048 10485759 10483712 8e Linux LVM
/dev/xvdj2 0 – 0 0 Empty
/dev/xvdj3 0 – 0 0 Empty
/dev/xvdj4 0 – 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table …
Creating a Label for LVM on /dev/xvdj1
Writing physical volume data to disk "/dev/xvdj1"
Physical volume "/dev/xvdj1" successfully created
Check for an existing Volume-Group
Volume group "testvg" not found
Volume group "testvg" successfully created
Change the maximum number of physical disks for the new Volume-Group
Volume group "testvg" successfully changed[/sourcecode]
Bestehende Volume-Gruppe erweitern:
[sourcecode language=”bash”][root@rac1 fdisk]# ./sfdisk_lvm_vg.sh /dev/xvdi testvg
Disk /dev/xvdi: 65270 cylinders, 255 heads, 63 sectors/track
/dev/xvdi: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/xvdi1 2048 1048575999 1048573952 8e Linux LVM
/dev/xvdi2 0 – 0 0 Empty
/dev/xvdi3 0 – 0 0 Empty
/dev/xvdi4 0 – 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table …
Creating a Label for LVM on /dev/xvdi1
Writing physical volume data to disk "/dev/xvdi1"
Physical volume "/dev/xvdi1" successfully created
Check for an existing Volume-Group
Volume group "testvg" successfully extended[/sourcecode]
Das Skript benötigt sfdisk, das unter OracleLinux, RHEL und SLES11 (andere Distributionen habe ich nicht geprüft) automatisch mit installiert wird.
[bash]
#!/bin/bash
# $Id: sfdisk_lvm_vg.sh 633 2013-01-19 19:50:41Z tbr $
#
# (c) Thorsten Bruhns (tbruhns@gmx.de)
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# ICH UEBERNEHME KEINE GARANTIE FUER DIE FUNKTION DES SKRIPTES
# FALSCHES ANWENDEN KANN ERHEBLICHEN DATENVERLUST NACH SICH ZIEHEN!
# Das Skript erzeugt auf einem Device eine 1. primaere Partition
# ueber den gesammten Bereich mit dem Typ LVM
# Disk Alignment wird dabei beruecksichtigt.
# sfdisk muss als Befehl verfuegbar sein!
#
# Im Anschluss wird eine Volume-Gruppe angelegt. Sollte die Gruppe
# bereits vorhanden sein wird sie entsprechend erweitert.
#
# ACHTUNG!!!
# Eine Disk ohne Partition wird dabei ueberschrieben. Disks mit
# bestehenden Partitionen werden nicht veraendert!
#
# Parameter 1: Device fuer sfdisk
# Parameter 2: Name der Volume-Gruppe
# todo: Ueberpruefung mittels blkid zur Sicherrung das kein Device genutzt wird!
set_env()
{
# we need 2 parameter!
if [ ${#} -ne 2 ]
then
echo " "
echo `basename $0`" <physical Device> <Volume-Group>"
echo " "
echo "Example: "`basename $0`" /dev/xvds testvg"
echo " "
echo "This script creates a 1st primary partition on given disc for LVM when no partition table is existing"
echo "The partition will labeled for LVM after then."
echo "Finaly we create a Volume-Group with the new partition or extend an existing Volume-Group"
exit 99
fi
sdpartition=${1}
volumegroup=${2}
pvpartition=${sdpartition}1
}
do_create_pv()
{
# check for an existing partition
# sfdisk prints the device only 1 times when no partition-table is existing
countpart=`sfdisk -lR ${sdpartition} | grep ${sdpartition} | wc -l`
if [ ${countpart:-0} -eq 1 ]
then
# todo!!
blkid ${sdpartition} > /dev/null
retcode=${?}
if [ ${retcode} -eq 0 ]
then
# found a valid filesystem or something else
# => we can’t create a parti tion table here
echo "blkid (blkid ${sdpartition}) found something on "${sdpartition}
echo "Aborting script!"
exit 20
fi
pvdisplay ${sdpartition} > /dev/null 2>&1
if [ ${retcode} -eq 0 ]
then
# We found a valid physical volume on the disc!
echo "Valid Label for LVM found on "${sdpartition}
echo "Aborting script!"
exit 30
else
# we have no physical volume on this disc!
# => We can create a partition!
echo "2048,,8e"|sfdisk -uS -q –force ${sdpartition}
if [ ${?} -eq 0 ]
then
blkid -g
# sleep 2 seconds, because SLES11 SP2 doesn’t find the partition for pvcreate
sleep 2
# we only create a physical volume when sfdisk was able to create the partition!
# we can create the physical volume on the new partition
echo "Creating a Label for LVM on "${pvpartition}
pvcreate ${pvpartition}
fi
fi
fi
}
do_make_vg()
{
# is the device for LVM a block-device?
if [ ! -b ${pvpartition} ]
then
echo "Cannot work on Volume-Group "${volumegroup}" because partition "${pvpartition}" is not a block device!"
echo "Skript aborted!"
exit 10
fi
# extend existing Volume Group or create a new one
echo "Check for an existing Volume-Group"
vgdisplay ${volumegroup} > /dev/null 2>&2
retcode=${?}
if [ ${retcode} -eq 0 ]
then
# Volume Group exists!
vgextend ${volumegroup} ${pvpartition}
else
# creating a new Volume Group
vgcreate ${volumegroup} ${pvpartition}
# change max number of physical volumes for the new volume group
echo "Change the maximum number of physical disks for the new Volume-Group"
vgchange ${volumegroup} -p 0
fi
}
set_env ${*}
do_create_pv
do_make_vg
[/bash]
Update: 15.01.2013
Im Rahmen einer Diskussion bekam ich noch den Tipp mit blkid. So erreicht man eine höhere Sicherheit vor dem Überschreiben von möglicherweise genutzten Partition.
Viel Spaß
Thorsten