Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Samstag
17
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu - LVM einrichten

Für die neue Datensenke hab ich mich entschlossen LVM einzusetzen. LVM steht für Logical Volume Management und bietet ein flexibleres Handling von Partitionen als die traditionelle Variante der Partitionierung. Nicht das ich das unbedingt bräuchte, aber damit umgehen zu können kann ja nicht schaden. Wer weiß wann man es mal braucht :-)

Ein großer Vorteil von LVM ist, dass man viele Operationen im laufenden Betrieb machen kann ohne das System offline nehmen zu müssen. Ich habe gelesen, dass es sogar möglich ist  während des laufenden Betriebs seine Root-Partition auf eine andere Festplatte umziehen und das ohne den Rechner dafür auch nur eine Minute vom Netz nehmen zu müssen.

LVM bietet auch die Möglichkeit Partitionen auf beliebige Festplatten auszudehnen, ähnlich wie bei einem Raid 0. Natürlich gilt dabei auch das gleiche Risiko des Datenverlustes wie bei einem Raid 0 wenn eine der Logical Volumes ein Problem hat. Hat man also ein Logical Volume das über mehrere Festplatten geht immer auf die Datensicherung achten.

Ein richtig Interessantes Feature sind die Snapshots. Damit ist es möglich den Zustand eines Logischen Volumes zu einem bestimmten Zeitpunkt zu speichern und ggf. wiederherzustellen und das ebenfalls im laufenden Betrieb. Das ist zum Einspielen von Updates oder dist-upgrades natürlich Gold wert.

Grundlagen

Grundsätzlich gibt es drei Begriffe, die man kennen und verstehen sollte.

Volume Group

Eine Volume Group ist ein Verbund von physikalischen oder logischen Datenträgern.

Physical Volumes

Unter Physical Volumes versteht man Datenträger wie Festplatten, die Platz bieten um Logical Volumes aufzunehmen.

Logical Volumes

Ein Logical Volume entspricht einer Partition. Diese enthält ein Dateisystem und kann sich über mehrere Physical Volumes erstrecken.

Einrichtung

Die Ubuntu Server Installations CD bietet dem Anwender von vornherein an das System auf eimem LVM zu installieren.

Möchte man weitere Volumes anlegen muss man diese entsprechend vorbereiten. Für diejenigen die mit der Kommandozeile nicht so versiert sind und die die einfach nur zu faul zum tippen sind :-) gibt es eine GUI für die Konfiguration des LVMs:

sudo apt-get install system-config-lvm
sudo system-config-lvm

Im folgenden werden die Schritte auf der Kommandozeile beschrieben:

Physical Volume anlegen

Zuerst muss man die Festplatte vorbereiten. Dazu legt man eine Partition auf der Festplatte an und markiert diese als lvm. In gparted geht das über Rechtsklick -> Markierungen bearbeiten -> lvm und in fdisk setzt man den type auf 8e.

Ist die Partition angelegt muss man diese initialisieren um als Physical Volume verwendet werden zu können. Dies geschieht mit:

sudo pvcreate /dev/sdb1

Damit wird der LVM Header auf die Partition geschrieben, der diese Platte als Physical Volume identifiziert.

Volume Group anlegen

Im Normalfall hat man im einem Rechner nur eine Volume-Group. Das macht Sinn, wenn man nur eine Platte oder ein Festplattenverbund wie ein Raid5 verwendet. Ich verwende einzelne Festplatten und werde daher die Volume Groups in System und Daten unterteilen.

sudo vgcreate data /dev/sdb1

Das erzeugt eine Volume Group mit dem Namen data und beinhaltet genau ein Phyiscal Volume /dev/sdb1.

Logical Volume anlegen

Im Normalfall würde man hergehen und die Festplatten mit größtmöglichen Partitionen versehen. Bei Verwendung eines Festplattenverbunds wie eines Raid5 muss man das nicht. Da die Manipulation an den Partitionen so einfach ist, kann man auch erst mal so viel Partitionieren wie man denkt dass man braucht und den Rest unpartitioniert lassen. Den freien Platz kann man dann entsprechend so vergeben wie sich das System entwickelt.

Da ich in meinem Fall nicht so viele Partitionen habe und Daten und System getrennt habe werde ich allen Platz vollständig verwenden.

sudo lvcreate -n data_1 -l 100%FREE data

Der Parameter -n legt den Namen des Logical Volumes fest und der Parameter -l kann benutzt werden, wenn man eine prozentuale Angabe verwenden möchte, wie hier 100% der noch freien Kapazität in der Volume Group. Alternativ kann man mit dem Parameter -L auch eine Partitionsgröße in kB/MB/GB/TB/PB/EB angeben.

Wieviel Platz in einer Volume Group vorhanden ist lässt sich herausfinden mit:

sudo vgdisplay

Die Blockdevices für die so angelegten Logical Volumes findet man unter /dev/data/data_1 als auch unter /dev/mapper/data-data_1

Informationen zu den Physical Volumes sowie zu den Logical Volumes kann man ähnlich wie bei vgdisplay abrufen. Die Befehle dafür lauten pvdisplay und lvdisplay.

Änderungen an Volume Groups

Im Laufe der Zeit wird immer irgendwo der Speicherplatz knapp. Um darauf reagieren zu können gibt es im folgenden ein paar Erklärungen wie man welche Änderungen an den Volume Groups durchführen kann.

Größe einer Partition ändern

Geht der Platz auf einem Logical Volume zur Neige, und hat man noch Platz in der Volume Group kann man das Volume erweitern mit:

sudo lvextend -L 150G data/data_1

Das erweitert das Logical Volume data_1 aus der Volume Group data auf 150 GB. Damit ist aber nur das Logical Volume vergrößert muss noch das Dateisystem vergrößert werden. Das macht man bei ext3 und ext4 so:

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
sudo resize2fs /dev/data/data_1
mount /dev/data/data_1

Lässt man den fscheck weg geht das auch ohne die Partition aushängen zu müssen.

Analog kann man auch eine Partition verkleinern. Dazu muss erst das Dateisystem und dann das Logical Volume verkleinert werden. Beim verkleinern des Dateisystems die Größe in Blöcken (Bei Ubuntu 14.04 4096 Bytes) angeben. Um also auf 10 GB zu verkleinern 10000000000 Bytes / 4096 Bytes = 2441406.

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
resize2fs /dev/data/data1 2441406
lvreduce -L10G /dev/data/data_1
mount /dev/data/data_1

Damit wird die Partition auf 10 GB verkleinert. Um die Blockgröße der Partition herauszufinden kann man folgenden Befehl verwenden:

sudo dumpe2fs -h /dev/data/data_1 | grep -i "block size"

Leider geht das nicht ohne Unterbrechung des Systems, da man für e2fsck die Partition aushängen muss. Bei der Root Partition muss man das mit einer Live CD machen.

Partitionen verschieben

Noch ein tolles Feature ist das Verschieben von Partitionen. Sollte die Festplatte einmal nicht mehr ausreichen und soll gegen eine größere ersetzt werden, kann man die Partition auf die neue Partition verschieben, ohne das man das System offline nehmen muss. Um das Logical Volume data_1 von /dev/sdb1 zu entfernen und auf /dev/sdc1 zu verschieben benutzt man den Befehl:

sudo pvmove -b -n data_1 /dev/sdb1 /dev/sdc1

Lässt man die Zielangabe /dev/sdc1 weg, werden die normalen Verteilungsstrategien verwendet um die Partitionen an einen anderen freien Speicher zu verschieben. Lässt man den Parameter -n data_1 weg, werden alle Logical Volumes auf /dev/sdb1 verschoben. Der Parameter -b lässt den Vorgang im Hintergrund ablaufen. Den Fortschritt kann man bei Ausführung im Hintergrund mit dem Befehl lvs anzeigen lassen.

Volume Group erweitern

Gibt es innerhalb der Volume-Group keinen freien Speicher mehr, auf dem Logical Volumes angelegt oder vergrößert werden können, muss man eine neue Partition auf einem Physikalischen Datenträger wie z.B. einer Festplatte der Volume Group hinzufügen.

pvcreate /dev/sdc1
vgextend data /dev/sdc1

Um die Volume Group zu verkleinern und eine bestimmte Partition aus der Gruppe zu entfernen muss man diese Partition zuerst leeren. Dazu muss in der Volume Group natürlich genügend freier Speicher vorhanden sein.

sudo pvmove /dev/sdb1

Ist die Partition leer, kann man diese aus der Volume Group entfernen

vgreduce data /dev/sdb1

Snapshots

Wenn ich das richtig verstanden habe erzeugt man für einen Snapshot eines Logical Volumes ein weiteres Logical Volume auf das alle Daten des Ausgangs-Volumes geschrieben werden, bevor diese verändert werden. Ausserdem verhält sich der Snapshot Volume wie ein Klon des Ausgangs-Volumes. Damit hat man auf dem Snapshot Volume sozusagen eine Sicherungskopie des Ausgangs-Volumes.

Das Snapshot-Volume belegt anfangs keinen Speicher, aber je mehr Daten geändert werden um so größer wird das Volume. Läuft das Snapshot-Volume voll ist dieser Snapshot defekt und kann nicht mehr verwendet werden. Man hat dann nur noch das modifizierte Ausgangs-Volume.

Um ein Snapshot Volume mit dem Namen snap vom dem Logical Volume root in der Volume Group system zu erstellen führt man folgendes aus:

sudo lvcreate -s -n snap -l 100%FREE system/root

Das Snapshot Volume snap verfügt jetzt über den gesamten noch freien Speicherplatz. Hat man noch viel freien Speicher kann man auch statt -l 100%FREE mit -L 5G eine 5 GB große Partition erzeugen. Das sollte dann ausreichen um als Sicherung zu dienen wenn man Pakete oder ggf. das ganze System aktualisieren muss.

Man kann die Partition auch mounten um ggf. zu schauen wie das Dateisystem vorher ausgehen hat

sudo mount /dev/sytem/snap /mnt/

Möchte man das Logical Volume snap wieder entfernen:

sudo lvremove /dev/system/snap

Sollte man feststellen, dass z.B. das Upgrade fehlgeschlagen ist oder das System in einen nicht funktionsfähigen Zustand versetzt wird kann man das Upgrade wieder rückgängig machen mit:

sudo lvconvert --merge system/snap

Wenn das Volume system/snap in Verwendung ist, wie es bei einem Snapshot des root Laufwerks der Fall ist muss man das System neu starten, da der Prozess startet, sobald die Volumes das nächste mal aktiviert werden.

Montag
12
Mai 2014
Klaus Moser
Klaus Moser

VirtualBox Guest Additions auf Ubuntu Server

Zum Testen der Pakete für die NAS habe ich erst mal deren Installation auf einer VirtualBox getestet. Dabei ist die Installation der Guest Additions immer fehlgeschlagen.

Folgende Pakete müssen installiert sein, damit das Erzeugen der Module funktioniert:

sudo apt-get install -y dkms build-essential linux-headers-generic linux-headers-$(uname -r)

Jetzt lassen sich die Module bauen.

sudo /media/me/VBOXADDITIONS_4.3.10_93012/VBoxLinuxAdditions.run

Installation über Repository

In seltenen Fällen hat die Vorgehensweise trotzdem nicht funktioniert. Eine weitere Möglichkeit an die Guest Additions zu kommen, ist über das Ubuntu Software Repository. Die Pakete hier sind allerdings nicht die aktuellsten. Aber besser nicht aktuell wie gar keine, vor allem wenn auf der Tagesordnung etwas anderes steht als dieses Problem zu fixen.

sudo apt-get install virtualbox-guest-dkms

Guest Additions entfernen

Sollte man das Gefühl haben jetzt ist alles völlig verbogen, kann man mit einem uninstall-Script die Guest Additions wieder entfernen um ggf. nochmal von vorne anfangen zu können:

/opt/VBoxGuestAdditions-4.3.10/uninstall.sh

Sonstiges

Etwas das ich noch nicht ausprobiert habe ist den Treiber hier zu aktivieren:

software-properties-gtk --open-tab=4
Sonntag
04
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu 14.04 - DLNA - MediaTomb

Bin zwischenzeilich zu einer anderen Lösung gekommen mit der ich jetzt sehr zufrieden bin. Einfach einen Raspberry Pi nehmen und Kodi installieren. Dann reichen auch normale Dateifreigaben per NFS oder SMB um die eigene Mediensammlung abzuspielen.

DLNA (Digital Living Network Alliance) ist ein Standard für Geräte in der digitalen Unterhaltungselektronik, mit dem es möglich ist unterschiedliche Geräte mit Multimedia-Inhalten zu versorgen.

Unter Ubuntu gibt es eine ganze Reihe freier und kommerzieller DLNA Server. In diesem Beitrag werde ich den DLNA Server MediaTomb testen. Dieser Server wird wohl nicht mehr weiterentwickelt (Projektseite). Laut ChangeLog war die letzte Änderung 2010.

Eine gute Anleitung gibt es wie immer unter ubuntuusers.de.

Installation

Die Installation ist sehr einfach aus den offiziellen Quellen möglich:

sudo apt-get install mediatomb

Konfiguration

Die Konfiguration erfolgt in der Datei /etc/mediatomb/config.xml, welche im XML Format vorliegt und ist etwas anspruchsvoller als z.B. bei minidlna oder ushare.

sudo nano /etc/mediatomb/config.xml

In der Konfigurationsdatei kann man ziemlich viel konfigurieren. Als wichtigste Einstellung legt man den Basispfad der Mediendateien unter config > server > home fest. Also z.B.

<home>/media/data/mediafiles</home>

Umlautprobleme

In der Standardkonfiguration werden Dateinamen mit Umlauten am ersten Umlaut abgeschnitten. Die Lösung hierfür war aber schnell gefunden. Die folgenden Zeilen müssen zusätzlich in die config > import - Sektion in der Konfigurationsdatei /etc/mediatomb/config.xml

<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<playlist-charset>UTF-8</playlist-charset>

Danach muss außerdem die Datenbank neu erstellt werden.

Datenbank neu erzeugen

Falls man man die Datenbank neu erzeugen lassen will muss man den Server stoppen

sudo service mediatomb stop

Dann benennt man die alte DB-Datei um. Der Pfad zu der Datei mediatomb.db ist in der der Konfigurationsdatei /etc/mediatomb/config.xml unter

config > server > home

definiert.

cd /var/lib/mediatomb/
sudo mv mediatomb.db mediatomb.db.bak

Startet man jetzt den Server jetzt neu, wird eine neue leere Datenbank angelegt. Hat man keine Verzeichnisse die überwacht werden sollen in der Konfiguration definiert, muss man diese noch über das Web-Interface hinzufügen. Damit ist die Datenbank neu erzeugt.

Verzeichnisse festlegen

Verzeichnisse mit Multimedia-Inhalten kann man entweder über die Web-Oberfläche hinzufügen oder direkt in der Konfigurationsdatei festlegen indem man folgende Zeilen in die <import> - Sektion hinzufügt.

<autoscan use-inotify="auto">
<directory location="/home/media" mode="inotify" recursive="yes" hidden-files="no"/>
</autoscan>

Damit wird das Verzeichnis /home/media und dessen Unterverzeichnisse mittels inotify zu den Autoscan Verzeichnissen hinzugefügt.

Firewall

Sollte eine Firewall auf dem Server aktiv sein, müssen folgende Ports freigeschalten werden:

Weboberfläche

Die Weboberfläche kann man aktivieren indem man in der Konfigurationsdatei das Attribut

ui enabled="yes"

unter config > server > ui setzt. Über die Weboberfläche kann man weitere zu scannende Verzeichnisse festlegen.

Port Protokoll Richtung
1900 TCP beide
1900 UDP beide
49152 TCP beide

Praxis

Auf meinem Samsung UE55H6290 lassen sich mp3s abspielen und es werden auch die AlbumArt Thumbs angezeigt. Vorwärts und rückwärts spulen lässt sich jedoch nicht. Mit BubbleUPNP auf einem Android Gerät funktioniert das Springen innerhalb von mp3 Tracks.

Fehlersuche

Für die Fehlersuche empfiehlt es sich das Log unter /var/log/mediatomb.log im Auge zu behalten:

tail -f /var/log/mediatomb.log

Außerdem kann man mediatomb auch manuell starten und die Debug-Ausgabe aktivieren. Vorher deaktiviert man den Service und führt mediatomb dann über die Kommandozeile aus.

sudo service mediatomb stop
sudo mediatomb -D -u mediatomb -c /etc/mediatomb/config.xml

Das startet mediatomb mit der Konfiguration unter /etc/mediatomb/mediatomb.xml (-c) und mit dem Benutzer mediatomb (-u) und gibt zusätzlich Debug Infos aus (-D).

Auf diese Weise konnte ich feststellen, dass die Abstürze von mediatomb beim Abspielen von Medien-Inhalten verursacht wurden von der Einstellung <mark-played-items> in der Konfigurationdatei. Siehe dazu auch den Bugreport auf launchpad.net.

Fügt man einen Content - Typ innerhalb der <mark-played-items> - Sektion in der Konfigurationsdatei hinzu stürzt mediatomb nicht mehr ab:

<mark-played-items enabled="yes" suppress-cds-updates="yes">
  <mark>
    <content>video</content>
  </mark>
  <string mode="prepend">*</string>
</mark-played-items>

Da diese Funktion tatsächlich nur richtig Sinn bei z.B. TV-Serien macht, habe ich diese auch nur für Video aktiviert.

Transcoding

Script

INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="4096k"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="192k"
AUDIO_SAMPLERATE="48000"
AUDIO_CHANNELS="2"
FORMAT="dvd"
exec /usr/bin/ffmpeg -threads 2 -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \
-acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} -ac  {AUDIO_CHANNELS} \
-f ${FORMAT} - > "${OUTPUT}" #2>/dev/null

bla

avconv -i - -codec:v libx264 -s vga -preset ultrafast -f mpegts -codec:a libmp3lame -ac 2 -y OUTFILE

bla

<transcoding enabled="yes">
  <mimetype-profile-mappings>
    <transcode mimetype="video/x-matroska" using="video-common"/>
  </mimetype-profile-mappings>
  <profiles>
    <profile name="video-common" enabled="yes" type="external">
      <mimetype>video/mpeg</mimetype>
      <accept-url>yes</accept-url>
      <first-resource>yes</first-resource>
      <accept-ogg-theora>yes</accept-ogg-theora>
      <agent command="mediatomb-transcode-video-ffmpeg" arguments="%in %out"/>
      <buffer size="10485760" chunk-size="262144" fill-size="524288"/>
    </profile>
  </profiles>
</transcoding>

bla

Parameter Erklärung
-i Lesen von stdin
-codec:v libx264 Benutze den libx264 Codec für die Videoausgabe
-s vga Erzeuge eine Ausgabe in VGA Größe (in a bid to lower computation cost) (qvga, vga, svga)
-preset ultrafast Argument für den libx264 Codec der bestimmt lieber schnell als genau zu sein
-f mp4 Ausgabeformat ist mp4
-codec:a libmp3lame Audio in mp3 kodieren
-ac 2 benutze die ersten beiden Audiokanäle und verwerfe den Rest (x264 doesn't handle >2 audio channels)
-y Überschreiben ohne zu fragen. Ohne kann der Prozess in mediatomb hängen bleiben.

Fazit

 

Ähnliches gilt für uShare. Er ist recht einfach zu installieren nur es fehlen einfach die Zusatzfunktionen, insbesondere auch wieder das Transcoding.

Mediatomb ist der vielseitigste freie DLNA Server mit einem hohen Funktionsumfang. Dafür verlangt er auch ein bisschen mehr Konfigurationsaufwand. Mit der Standardkonfiguration kann man aber schon gut leben, sofern man mal den Bug mit den Abstürzen im Griff hat. Leider scheint mediatomb nicht mehr weiterentwickelt zu werden. Die letzten Änderungen waren 2010. Sehr schade...

Blog

Kmoser's Tech-Blog