Rebuild eines Software-Raid-1 nach einem Plattenwechsel

Wir gehen in diesem Beispiel davon aus, dass der Server bei einem Hoster steht und die Platte vom Hoster ausgewechselt wurde. Da mir genau das passiert ist, nehme ich dies zum Anlass meine Vorgehensweise hier zu dokumentieren.

Als erstes sollte man sich absolut sicher sein, welche Platte ausgewechselt wurde. Das bekommt man ganz schnell mit folgender Zeile raus. Hier ein Beispiel:

fdisk -l

Disk /dev/sdd: 750.2 GB, 750156374016 bytes
64 heads, 32 sectors/track, 715404 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b6ff7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048     4194303     2096128   fd  Linux raid autodetect
/dev/sdd2         4194304     5242879      524288   fd  Linux raid autodetect
/dev/sdd3         5242880  1465147391   729952256   fd  Linux raid autodetect

Disk /dev/sdb: 120.0 GB, 120034123776 bytes
64 heads, 32 sectors/track, 114473 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077348

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4194303     2096128   fd  Linux raid autodetect
/dev/sdb2         4194304     5242879      524288   fd  Linux raid autodetect
/dev/sdb3         5242880   234440703   114598912   fd  Linux raid autodetect

Disk /dev/sda: 120.0 GB, 120034123776 bytes
64 heads, 32 sectors/track, 114473 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bab38

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     4194303     2096128   fd  Linux raid autodetect
/dev/sda2         4194304     5242879      524288   fd  Linux raid autodetect
/dev/sda3         5242880   234440703   114598912   fd  Linux raid autodetect

Disk /dev/sdc: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e67db

   Device Boot      Start         End      Blocks   Id  System<pre>

Die Festplatten sda, sdb und sdd sind partitioniert und voll einsatzfähig. Die Festplatte sdc ist jedoch leer. Also ist das die Festplatte, die wieder eingebunden werden muss.

Bevor wir diese Platte wieder ins System einbinden, müssen wir die Partitionen auf dieser Platte jedoch erst wieder herstellen. Die Partitionen müssen ja mit denen übereinstimmen, die gespiegelt werden sollen.

<pre>fdisk /dev/sdc/

Neue Partitionen legt man mit n an und die Liste der eingetragenen Partitionen bekommt man mit p angezeigt. In diesem Beispiel legen wir also alle Partitionen so an, wie sie auf sdd angelegt wurden.

Wenn man alle Partitionen angelegt hat, dann schreibt man diese mit w auf die Platte.

In meinem Fall bekomme ich dann folgende Ausgabe angezeigt:

The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Wenn die neue Festplatte exakt die gleiche Größe hat wie die alte, dann kann man auch mit folgendem Befehl eine Kopie der Partitionierung von sdd nach sdc bewirken:

sfdisk -d /dev/sdd | sfdisk /dev/sdc --force

Der Zusatz –force ist dann erforderlich, wenn sich das System aus irgendwelchen Gründen weigert.

Nach der Erstellung der Partitionen habe ich in meinem Fall das System erst einmal mit reboot -f neu gestartet und dann fdisk -l ausgeführt.

Disk /dev/sdc: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6d3efa4f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         262     2096128   fd  Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdc2             262         327      524288   fd  Linux raid autodetect
Partition 2 does not end on cylinder boundary.
/dev/sdc3             327       91202   729952256   fd  Linux raid autodetect

Interessanter Weise sind die Start- und End-Bereiche trotz Kopie mit sfdisk unterschiedlich. Dies ignoriere ich jedoch an dieser Stelle und mache Weiter mit dem Einbinden der Partitionen in das Raid.

mdadm --manage /dev/md0 --add /dev/sdc1
mdadm --manage /dev/md1 --add /dev/sdc2
mdadm --manage /dev/md3 --add /dev/sdc3

Mit cat /proc/mdstat bekomme ich nun angezeigt, dass das Raid wiederhergestellt wird.


Die kurze Geschichte des PC’s

Dies ist eine kurze Dokumentation über die Entstehungsgeschichte der heutigen PCs. Sie ist zwar aus technischer Sicht etwas oberflächlich, aber trotzdem interessant.

Teil 1 von 3

Teil 2 von 3

Teil 3 von 3


Installation von Jenkins unter Ubuntu

Hier eine kleine Anleitung, zur Installation von Jenkins unter Ubuntu. Wenn ihr diese Zeilen eingebt, dann wird Jenkins installiert und in der Regel auch nach der Installation direkt gestartet.

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -

echo "deb http://pkg.jenkins-ci.org/debian binary/" | sudo tee -a /etc/apt/sources.list > /dev/null

sudo apt-get update

sudo apt-get install jenkins

VirtualBox Gasterweiterungen und Treiber für virtuelle Grafikkarte Ubuntu VM

Ich arbeite oft mit virtuellen Maschinen und installiere dort auch in vielen Fällen Ubuntu. Nun hat sich in der Praxis gezeigt, dass sich die Gasterweiterungen von VirtualBox nicht immer problemlos mit dem entsprechenden CD-Image installieren lassen. Aus diesem Grund habe ich hier mal meinen Weg aufgeschrieben.

Als erstes öffnen wir ein Terminal und geben dort diese Installationsanweisung ein:

sudo apt-get install linux-headers-generic dkms

Danach empfehle ich bei einer Desktopumgebung die Installation der Gasterweiterung über “Geräte -> Medium mit Gasterweiterungen einlegen”. Das System erkennt die eingelegte virtuelle CD und fragt, ob wir diese ausführen wollen. Dies bestätigen wir und nach wenigen Minuten ist alles fertig installiert.

Bei einer Installation ohne Desktopumgebung installieren wir die Gasterweiterungen über diesen Installationsbefehl:

sudo apt-get install virtualbox-guest-additions

Nach der Installation starten wir die VM ein mal neu und die Erweiterungen sind installiert.

Wenn man in der VM mit einer Desktopumgebung arbeitet, dann sollte man nun (nach dem Neustart) die Systemeinstellungen aufrufen und dort bei den Zusätzlichen Treibern nach einer anderen Grafikkarte suchen lassen. Diese sollte spätestens jetzt auch gefunden werden.

Wenn man sich (warum auch immer) mittlerweile im Scale Modus befindet und diesen wieder verlassen möchte, dann drückt man einfach die rechte Strg-Taste und C gleichzeitig. Damit wird dieser Modus beendet.

Wenn man in Ubuntu vom Unity-Desktop zurück möchte zum klassischen Gnome-Desktop ohne Effekte (was in einer VM meiner Meinung nach ratsam ist), dann braucht man nur folgende Installationsanweisung ausführen und danach neu starten:

sudo apt-get install gnome-shell

Nach dem Neustart kann man nun in der gewohnten Desktopauswahl den Gnome-Desktop auswählen.


Bootstrap Tutorial Teil 6 – Ein einfaches Grid-Layout

Das wichtigste an einer Webseite ist der Inhalt. Aus diesem Grund sollten wir diesen auf jedem Display möglichst optimal darstellen. In diesem Teil des Tutorials erweitern wir den bestehenden Code um ein Grid-Layout mit bis zu 4 Spalten.

Bitte setzen Sie nach “<p>Die erste Seite in diesem Tutorial.</p>” folgenden Code ein:

<div class="row">
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 1</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 2</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 3</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 4</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 5</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 6</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 7</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 8</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 9</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 10</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 11</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">Feld 12</div>
</div>

Wenn Sie nun das Browserfenster in der Größe ändern, werden Sie feststellen, dass sich die Anzahl der Spalten abhängig von der Fensterbreite ändert.

Die Klassennamen folgen einem festgelegten Muster. Sie beginnen mit “col” gefolgt von der Displaybreite “xs”, “sm”, “md” oder “lg” und enden mit der Spaltenzahl bei dieser Breite. Diese drei Teile werden immer mit einem Bindestrich “-” verbunden.

Die Angabe “xs” steht für Displays unter 768 Bildpunkte Breite, die Angabe “sm” steht für Displays unter 992 Bildpunkte Breite, die Angabe “md” steht für Displays unter 1200 Bildpunkte Breite und “lg” steht für Displays über 1200 Bildpunkte breite.

Die Angaben in diesem Beispiel sorgen also dafür, dass auf großen Bildschirmen ein Grid mit 4 x 3 Zellen dargestellt wird. Auf etwas kleineren ein Grid mit 3 x 4 Zellen. Auf kleinen eins mit 2 x 6 Zellen. Und auf ganz kleinen (wie z.B. Handydisplays) eins mit 1 x 12 Zellen.


Bootstrap Tutorial Teil 5 – Ein Menü mit Collapse-Funktionalität

Nachdem wir im letzten Teil dieses Tutorials ein einfaches Menü erstellt haben, erweitern wir dieses nun um eine Collapse-Funktion. Damit wird es dann auch auf mobilen Endgeräten ordentlich dargestellt.

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap-Tutorial</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/bootstrap.min.css" rel="stylesheet">
        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->
        <script src="js/jquery-1.10.2.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h1>Bootstrap-Tutorial</h1>
            <nav class="navbar navbar-default" role="navigation" style="">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                </div>
                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav">
                        <li><a href="#">Link 1</a></li>
                        <li><a href="#">Link 2</a></li>
                        <li><a href="#">Link 3</a></li>
                        <li><a href="#">Link 4</a></li>
                        <li><a href="#">Link 5</a></li>
                        <li><a href="#">Link 6</a></li>
                        <li><a href="#">Link 7</a></li>
                        <li><a href="#">Link 8</a></li>
                    </ul>
                </div>
            </nav>
            <p>Die erste Seite in diesem Tutorial.</p>
        </div>
    </body>
</html>

Im Vergleich zur Letzten Version haben wir nur wenige Zeilen Code hinzugefügt. Diese reichen jedoch aus um die gewünschte Funktionalität zu bekommen.

Auf kleineren Displays (kleiner 768 Bildpunkte breite) wird nun aus dem horizontalen Menü ein vertikales Menü, dass auf- und zuklappt, wenn man auf den erscheinenden Button klickt.


Bootstrap Tutorial Teil 4 – Ein einfaches Menü

In diesem Teil des Tutorials ergänzen wir unsere Seite um ein einfaches Menü.

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap-Tutorial</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/bootstrap.min.css" rel="stylesheet">
        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->
        <script src="js/jquery-1.10.2.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h1>Bootstrap-Tutorial</h1>
            <nav class="navbar navbar-default" role="navigation">
                <ul class="nav navbar-nav">
                    <li><a href="#">Link 1</a></li>
                    <li><a href="#">Link 2</a></li>
                    <li><a href="#">Link 3</a></li>
                    <li><a href="#">Link 4</a></li>
                    <li><a href="#">Link 5</a></li>
                    <li><a href="#">Link 6</a></li>
                    <li><a href="#">Link 7</a></li>
                    <li><a href="#">Link 8</a></li>
                </ul>
            </nav>
            <p>Die erste Seite in diesem Tutorial.</p>
        </div>
    </body>
</html>

Dieses Menü ist jedoch wirklich sehr einfach und sieht auf mobilen Endgeräten nicht wirklich gut aus.


Bootstrap Tutorial Teil 3 – Die erste Seite mit Bootstrap

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap-Tutorial</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/bootstrap.min.css" rel="stylesheet">
        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->
        <script src="js/jquery-1.10.2.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h1>Bootstrap-Tutorial</h1>
            <p>Die erste Seite in diesem Tutorial.</p>
        </div>
    </body>
</html>

Diesen Code speichern Sie bitte in dem erstellten Verzeichnis mit dem Namen index.html ab.

Mit diesem Code haben Sie die erste Seite mit dem benötigten Grundgerüst für Bootstrap erstellt. Die späteren Seiten werden auf diesem Gerüst aufbauen.

Dieses Grundgerüst ist eine abgewandelte Version der Vorlage von der Bootstrap-Webseite. Es enthält schon alles, was man für eine Webseite mit Responsive-Design braucht, damit diese sowohl auf Desktop-Systemen als auch auf mobilen Endgeräten ordentlich angezeigt wird.

Das DIV mit der Klasse “container” erstellt den Basis-Kontainer in dem wir alle Elemente dieser Seite anordnen. Dieser Kontainer ist schon responsive und von der Breite her auf das 12-Spalten-Layout von Bootstrap (LESS) ausgelegt.

Das ist natürlich bei so wenig Inhalt nicht weiter schwierig ;)


Bootstrap Tutorial Teil 2 – Ziele dieses Tutorials und Vorbereitungen

Ich möchte dem Leser in diesem Tutorial einen schnellen Einstieg in das Arbeiten mit Bootstrap geben ohne ihn lange mit vielen Erklärungen zu langweilen. Aus diesem Grund arbeite ich lieber mit Beispielen und erstelle in diesem Tutorial nach und nach eine Testwebseite “Bootstrap-Tutorial”. Auf dieser Webseite werden die wichtigsten Features und Techniken von Bootstrap an einfachen Beispielen erklärt.

Dieses Tutorial richtet sich an Personen mit Grundkenntnissen in HTML und CSS. Es ist für Einsteiger ohne diese Grundkenntnisse nicht geeignet, da sie die wichtigen grundlegenden Zusammenhänge nicht kennen und daher mit großer Wahrscheinlichkeit nicht verstehen würden, warum manche Sachen wie funktionieren.

Für den Einsatz von Bootstrap benötigen wir zwei Softwarepakete:

1. Bootstrap: http://getbootstrap.com/

2. jQuery: http://jquery.com/download/

Ich empfehle den Download der komprimierten jQuery 1.x Version, da die 2.x Version keine Unterstützung für IE 6,7 und 8 mitbringt. Die unkomprimierte Version ist eigentlich nur dann interessant, wenn man noch Anpassungen machen oder Erweiterungen entwickeln möchte.

Nun erstellen wir einen Ordner “bootstrap-tutorial” und entpacken die Bootstrap-Datei. Anschließend kopieren den Ihnalt des entpackten Bootstrap-Ordners und die jQuery-Datei so in das Verzeichnis “bootstrap-tutorial”, dass wir folgende Struktur erhalten:

bootstrap-tutorial/
├── css/
│   ├── bootstrap.css
│   ├── bootstrap.min.css
│   ├── bootstrap-theme.css
│   └── bootstrap-theme.min.css
├── js/
│   ├── bootstrap.js
│   └── bootstrap.min.js
└── fonts/
    ├── glyphicons-halflings-regular.eot
    ├── glyphicons-halflings-regular.svg
    ├── glyphicons-halflings-regular.ttf
    ├── glyphicons-halflings-regular.woff
    └── jquery-1.10.2.js

Jetzt haben wir ein Grundgerüst, auf das wir aufbauen können.


Bootstrap Tutorial Teil 1 – Was ist Bootstrap und wofür wird es benutzt?

Bootstrap ist eine Sammlung verschiedener Hilfsmittel für die einfache Erstellung von Responsive-Designs für Websites und Webanwendungen. Es basiert auf HTML und CSS und bringt unter anderem Gestaltungsvorlagen für Schriften, Tabellen, Formulare, Buttons und Navigationssysteme mit. Bootstrap ist dabei modular aufgebaut und basiert im Kern auf den bekannten LESS-Stylesheets. Das bedeutet, dass es auf einem 12-Spalten-Layout basiert.

Für die JavaScript-Erweiterungen benötigt man zusätzlich noch jQuery, da diese komplett auf jQuery basieren. Sie erweitern die Funktionalität von Bootstrap um so nützliche Features wie z.B. Dialogfenster, Tooltips, Karussels oder eine Autovervollständigung für Eingabefelder.

Mit Bootstrap kann man sehr einfach Websites und Webanwendungen mit einem ansprechenden Responsive-Design erstellen. Es gibt zahlreiche fertige Designs, die man kostenlos laden und nutzen kann. So können auch Anfänger mit wenig Erfahrung im Bereich CSS sehr schnell zu brauchbaren bis guten Ergebnissen kommen.