Zum festhalten: parted, LVM, virsh

Um Partitionen groesser als 2TB zu erstellen muss man GPT labels benutzen. fdisk und Konsorten koennen damit nicht umgehen, deswegen nimmt man dafuer parted. Mit den folgenden Befehlen stellt man den Partitionstabellentyp auf gpt um, und erstellt eine Partition ueber die komplette Platte und formatiert diese mit xfs:

  • parted /dev/sdX -> mklabel gpt -> quit
  • parted -s — /dev/sdX mkpart primary 0 -1
  • mkfs.xfs /dev/sdX

Noch kurz die grundlegenden wichtigsten Befehle zum erstellen eines LVM:

  • /dev/sdX als physikalisches Volume initialisieren: pvcreate /dev/sdX
  • erstellen eine Volume Group mit dem Namen VG-NAME: vgcreate VG-NAME /dev/sdX
  • Ansehen kann man sich das dann mit vgscan oder vgs
  • Erstellen eines neuen Volumes mit dem Namen VOLNAME: lvcreate -n VOLNAME –size 10GB VG-NAME
  • Formatieren, mounten, angucken:
    mkfs.ext3 /dev/VG-NAME/VOLNAME
    mkdir /mnt/VOLNAME
    mount /dev/VG-NAME/VOLNAME /mnt/VOLNAME
  • Anzeigen von Logischen Volumes: lvdisplay
  • Vergroessern/Verkleinern eines Volumes:
    lvextend -L+10G /dev/VG-NAME/VOLNAME
    lvreduce -L-10GB /dev/VG-NAME/VOLNAME
    e2fsck -f /dev/VG-NAME/VOLNAME
    resize2fs /dev/VG-NAME/VOLNAME
  • Loeschen von Volumes: lvremove /dev/VG-NAME/VOLNAME

Abschliessend sei noch gesagt, dass virsh echt cool ist. Dabei ist eben festzuhalten, dass das Speichern u Wiederherstellen aller vms (z.B. vor oder nach einem reboot) einfach geht z.B. mit:

  • for i in `virsh list | grep running | awk {‚print $2‘}` ; do virsh save $i /vms/$i ; done
  • for i in `ls /vms` ; do virsh restore /vms/$i ; done

Wenn man mit virsh console VM auf eine Maschine moechte, duerfen dafuer auf dem Gast in der /etc/inittab die Zeilen mit T0 und T1 nicht auskommentiert sein.

Die Infos hier sind von da und da und dem.

Samba Interdomain Trust

Wer Samba PDC-Server betreut, der weiss wovon ich nun rede: Man richtet einen entsprechenden PDC-Server ein, hebt die Clients in die Domaene. Nun kommt eine weitere Abteilung hinzu, es kommt ein weiterer PDC und beides laeuft friedlich nebeneinander her. Nun fangen die beiden Abteilungen an staerker zusammenzuarbeiten, User wechseln hin und her, Raeumlichkeiten werden gemeinsam genutzt, aber im Anmeldebildschirm von Windows erscheint neben dem lokalen Computer immer nur die Domaene in die der Client gehoben wurde.

Abhilfe schafft dort das einrichten eines entsprechenden Interdomain Trust. Dafuer muessen auf den PDC Servern jeweils vertraute Domaenenkontos (mit [I]-Flag) erstellt und anschliessend der Trust hergestellt werden. Dafuer (wenn Samba mit LDAP)

  • smbldap-useradd -i DOMAENENNAME
  • net rpc trustdom establish DOMAENENNAME

Wichtig ist noch, dass winbind laufen muss. Unter Debian muss das mit aptitude install winbind nachinstalliert werden. Ob dann alles funktioniert hat und ob die Benutzerkonten abfragbar sind kann man mit dem Befehl wbinfo -u nachpruefen. Es sollte dann eine Liste angezeigt werden nach dem Schema „DOMAENENNAME\USERNAME“

Zum Nachlesen in der Samba Doku:

Nagios und EventHandler via NRPE

Bei meiner VM auf der dieser Blog laeuft ist in den letzten Tage oefter mal MySQL abgestuerzt. Das ist ziemlich aergerlich da dann der Blog und einige andere Dinge auch nicht mehr funktionieren. Da ich nur eingeschraenkt vor dem Rechner sitze und es ueber mein Handy sehr umstaendlich ist mittels MidpSSH sich einzuloggen und den Dienst neuzustarten, hab ich mich kurz mit den EventHandlern bei Nagios auseinandergesetzt und im folgenden eine kurze Anleitung was ich gemacht habe:

Lesen: das und das und viele andere Dinge bis ich schliesslich bei dem Artikel „Event Handlers heute mal dynamisch“ (PDF) von RomanK im Nagios-Portal Forum gelandet bin.

Alle im folgenden hier genannten Skripte sind nicht mein Werk, sondern stammen aus besagtem Artikel und wurden von mir auf die Debian-Verhaeltnisse meines Servers und auf meine Problematik angepasst.

Definition des Befehls in der /etc/nagios3/commands.cfg:

define command{
	command_name	do_event
	command_line	/usr/lib/nagios/libexec/event/run_command  $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ $ARG1$
	}

Das Skript run_command in dem Ordner /usr/lib/nagios/libexec/event/ ablegen:

#!/bin/bash
case "$1" in
 
OK)
	;;
 
WARNING)
	;;
 
UNKNOWN)
	;;
 
CRITICAL)
 
	case "$2" in
	SOFT)
 
		case "$3" in
 
		3)
		echo -n "Restarting Service (3rd soft critical state)..."
		/usr/lib/nagios/plugins/check_nrpe -H "$4" -c "$5"
			;;
			esac
		;;
	HARD)
		echo -n "Restarting Service..."
		/usr/lib/nagios/plugins/check_nrpe -H "$4" -c "$5"
		;;
	esac
	;;
esac
exit 0

Auf dieser VM habe ich dann zwei neue NRPE-Checks in der /etc/nagios/nrpe_local.cfg eingerichtet, einen zum ueberpruefen ob MySQL laeuft, und einen der als Event Handler ausgefuehrt wird:

command[check_mysql]=sudo /usr/lib/nagios/plugins/check_mysql
command[restart_mysqld]=sudo /etc/init.d/mysql restart

und die dafuer erforderlichen Eintraege in der /etc/sudoers:

nagios     pregos =  NOPASSWD: /usr/lib/nagios/plugins/check_mysql
nagios     pregos =  NOPASSWD: /etc/init.d/mysql

Nun auf dem Nagios-Server den Servicecheck mit entsprechendem Event Handler definieren:

define service{
        use                             jan-service
        host_name                       pregos.info
        service_description             MySQL
        max_check_attempts              4
        event_handler                   do_event!restart_mysqld
        check_command                   check_nrpe_1arg!check_mysql
        }
}

Nun kann man noch ueberpruefen ob das ganze funktioniert, indem man einfach den MySQL-Dienst beendet und per Webinterface einige male hintereinander den Servicecheck manuell anstoesst.
Wenn man an der max_check_attempts in der config was aendern will, muessen natuerlich auch evtl. Aenderungen in der run_command bei der case-Anweisung gemacht werden.

Wann is noch der naechste routinemaessige fsck?

Einige von euch kennen sicherlich das Problem: Ein wichtiges Kernelupdate zwingt zum Reboot der Serverinfrastruktur. Per SSH wird das Update eingespielt und ein Reboot abgesetzt, aber nicht alle Server koennen ueber DRAC-Karten oder Web-KVM ueberwacht werden. Von Zeit zu Zeit bleibt einem das Herz dann stehen wenn ein Server nicht wiederkommt, die Pings kommen zurueck mit einem „Destiniation or Host unreachable“ oder vergleichbar…
Waerend man seine Jacke anzieht, Schuhe zubindet und parallel dazu fieberhaft ueberlegt was das Problem sein koennte und was da schiefgelaufen ist, schweift auf dem Weg zur Wohnungstuer noch ein letzter Blick zum Monitor und genau in dem Moment geht dann doch gerade der so herbeigesehnte erste Ping durch. Man rennt an den Rechner zurueck, loggt sich per SSH ein, ueberprueft das alles laeuft und waerend der Adrenalinspiegel sinkt kommt einem in den Sinn, dass das nur ein routinemaessiger Dateisystemcheck gewesen sein wird…

Wann der naechste check ausgefuehrt wird, kann man leicht mit dumpe2fs herausfinden. Bin ich aber ehrlich gesagt zu faul zu und vergesse ich auch jedes mal. Darum habe ich mir (nach einem entsprechenden Herzstillstand) ein kleines Skript geschrieben mit dem Namen nextfscheck, was ich unter /usr/local/sbin/ abgelegt habe und das ich vor einem Reboot aufrufen kann um zu wissen ob es einen fsck geben wird oder nicht. Das Skript ist simpel, das Skript ist billig. Als Parameter wird ein gueltiges gemountetes Device angegeben und dann bekomme ich die Info wieviele remounts noch zum naechsten fsck sind, bzw. an welchem Datum der naechste routinemaessige Dateisystemcheck durchgefuehrt wird. Fuer alle die die ebenfalls Interesse an dem Skript haben, hier:

#!/bin/bash
#
# Give information about the next filesystem check 
#
# 2009-11-08:	initial Version   / Jan Toenjes <mail@jan-toenjes.de>
# 2009-11-09:    changed dumpe2fs to "tune2fs -l" as suggested by kero / Jan Toenjes <mail@jan-toenjes.de>
 
 
# check if skript is run as root for tune2fs 
if [ `id -u` != "0" ] ; then 
  echo ""
  echo "     Usage: $0 /dev/disk"
  echo ""
  echo "     Error: You need to be root to run this skript"
  echo ""
  exit 3
fi
 
 
# check if needed programs are installed
which bc 1>/dev/null 
if [ $? -ne 0 ]; then
  echo "    ERROR: Cant find bc"
  exit 3        
fi        
 
 
# check if we got a parameter 
if [ "$1" == "" ] ; then
  echo ""
  echo "     Usage: $0 /dev/disk"
  echo ""
  echo "     Error: You need to give a valid mounted device as parameter i.e. /dev/sda1" 
  echo ""
  exit 3
fi
 
 
 
 
# check if the device given as a parameter exists
DEVEXIST=`mount | grep -ir "$1" | grep "/dev/" | wc | awk {'print $1'}`
if [ "$DEVEXIST" == "0" ] ; then
  echo ""
  echo "     Usage: $0 /dev/disk/"
  echo ""
  echo "     Error: The given parameter  \"$1\"  is not a valid mounted device."
  echo ""
  exit 3
fi
 
 
 
# get remaining mounts
MOUNTCOUNT=`tune2fs -l $1 2>&1 | grep "Mount count:" | awk {'print $3'}`
MAXIMUMMOUNTCOUNT=` tune2fs -l $1 2>&1 | grep "Maximum mount count:" | awk {'print $4'}`
REMAININGMOUNTS=`echo $MAXIMUMMOUNTCOUNT-$MOUNTCOUNT|bc`
 
 
 
# check if we have a fsck after a specific time value and give wanted information
TIMECHECK=`tune2fs -l $1 2>&1 | grep "Check interval:" | awk {'print $3'}`
if [ "$TIMECHECK" == "0" ] ; then
  echo "The next filesystem check of $1 will be after another $REMAININGMOUNTS mounts."
 
else
  NEXTCHECKAFTER=`tune2fs -l $1 2>&1 | grep "Next check after:" | sed 's/Next check after:[ \t]*$//g'`
  echo "The next filesystem check of $1 will be on $NEXTCHECKAFTER or after another $REMAININGMOUNTS mounts."
 
fi