<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://docs.opennet-initiative.de/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AMdbw%2FLustreFS</id>
	<title>Benutzer:Mdbw/LustreFS - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://docs.opennet-initiative.de/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AMdbw%2FLustreFS"/>
	<link rel="alternate" type="text/html" href="https://docs.opennet-initiative.de/index.php?title=Benutzer:Mdbw/LustreFS&amp;action=history"/>
	<updated>2026-10-07T11:02:41Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Opennet</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://docs.opennet-initiative.de/index.php?title=Benutzer:Mdbw/LustreFS&amp;diff=14643&amp;oldid=prev</id>
		<title>MediaWiki default am 5. Februar 2009 um 08:36 Uhr</title>
		<link rel="alternate" type="text/html" href="https://docs.opennet-initiative.de/index.php?title=Benutzer:Mdbw/LustreFS&amp;diff=14643&amp;oldid=prev"/>
		<updated>2009-02-05T08:36:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;LustreFS ist ein Clusterfilesystem für Linux. Wurde von der Firma Cluster File Systems entwickelt die 2007 von Sun gekauft wurde. Die Daten eines LustreFS liegen auf einer oder mehreren Rechnern. Der Datendurchsatz ergibt sich daher aus dem Durchsatz alles Notes über die eine Datei verteilt wurde. Der Durchsatz kann bei mehreren GB/s liegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Lustre verteilt die Metadaten auf einem Server (MDS=Meta Data Server) hier ist ein active/passiv Cluster möglich. Die Objektdaten können per Stripping auf mehrere Server (OSS=Objekt Storage Server) verteilt werden. &lt;br /&gt;
&lt;br /&gt;
Fällt ein OSS aus sind die auf ihm gespeicherten Daten nicht verfügbar. Benötigt man hier Redundanz muß man aus zwei OSS jeweils auch wieder ein active/active oder active/passiv Cluster machen. Entweder mit einem Shared-Storage oder mit einer Lösung wie [[DRBD]]. Ein natives RAID1/5 der Objektdaten ist in [http://wiki.lustre.org/index.php?title=Lustre_FAQ#Do_you_plan_to_support_OSS_failover_without_shared_storage.3F Planung].&lt;br /&gt;
&lt;br /&gt;
Als Backend verwendet Lustre ein leicht angepasstes ext3 (ext4?) Dateisystem das auch direkt als ext3 gemountet werden kann. Hier finden sich dann Dateien mit Nummern als Namen (die Objekt-ID&amp;#039;s).&lt;br /&gt;
&lt;br /&gt;
LustreFS ist besonders für folgende Anwendungen sinnvoll:&lt;br /&gt;
* Es wird besonders hoher Datendurchsatz benötigt&lt;br /&gt;
* Das Filesystem ist sehr groß oder wächst schnell oder es müssen sehr große Dateien gespeichert werden (maximale Größe einer Datei ist 1.48 PByte)&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.lustre.org/index.php?title=Lustre_FAQ Siehe FAQ]&lt;br /&gt;
&lt;br /&gt;
== Anforderungen / Empfehlungen ==&lt;br /&gt;
&lt;br /&gt;
* OSS Backend Storage Raid 6&lt;br /&gt;
* MDS Backend Storage Raid 10 (Empfohlen Linux MD Raid1 und darauf ein Stripe mit LVM. Weiterhin Kernel größer 2.6.15 mit &amp;#039;&amp;#039;bitmap RAID rebuild features&amp;#039;&amp;#039;)&lt;br /&gt;
* OSS Memory min. 3GB&lt;br /&gt;
* MDS Memory min. 4GB&lt;br /&gt;
&lt;br /&gt;
Siehe auch [http://manual.lustre.org/manual/LustreManual16_HTML/RAID.html#50548852_72075 Lustre Manual]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.lustre.org/index.php?title=Lustre_Quick_Start Quick Start]&lt;br /&gt;
* [http://wiki.lustre.org/index.php?title=Debian_Install Installation unter Debian]&lt;br /&gt;
&lt;br /&gt;
Die Lustre Pakete finden sich aktuell in Debian Lenny. Die Patches in linux-patch-lustre sind nur für Kernel 2.6.12, 2.6.18 oder 2.6.22. Kernel 2.6.18 (oder wohl auch darunter) kann man nicht mehr mit gcc 4.3.x kompilieren ([http://bbs.archlinux.org/viewtopic.php?id=45589 Optimierungsprobleme]). Unter Lenny steht nur gcc 4.3.2 zu Verführung. Also muß man das Lenny Paket unter etch kompilieren. Kernel 2.6.22.5 habe ich als Vanilla Version zusammen mit den Debian Patches erfolgreich unter etch kompiliert.&lt;br /&gt;
&lt;br /&gt;
Auf einem Debian etch System mit gcc kleiner 4.3 installiert man die Lenny Sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://mirror.scl.ameslab.gov/debian/ etch main non-free contrib&lt;br /&gt;
deb-src http://mirror.scl.ameslab.gov/debian/ lenny main contrib non-free&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.5.tar.bz2&lt;br /&gt;
tar xjf linux-2.6.22.5.tar.bz2&lt;br /&gt;
cp config-2.6.18-4-686 linux-2.6.22.5/.config&lt;br /&gt;
cd linux-2.6.22.5&lt;br /&gt;
make oldconfig&lt;br /&gt;
make menuconfig # scsi einkommentiert (optional)&lt;br /&gt;
make-kpkg --rootcmd fakeroot --added-patches=lustre --append-to-version &amp;quot;-lustre-1.6.5.1&amp;quot; --revision=20090130  kernel_image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun gibt es weitere Probleme. Zu dem Kernel braucht man nun noch die Lustre Kernel Module. Um die Module zu bauen braucht man das Programm dh_lintian aus dem Paket debhelper das erst in Lenny verfügbar ist. Also muß man den Kernel Source-Tree wieder zurück auf einen Lenny System kopieren und dort das Kernel Modul bauen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tar tjf lustre.tar.bz2&lt;br /&gt;
cd modules/lustre&lt;br /&gt;
m-a a-i lustre&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach ist das Modul-Paket schon installiert und man kann das Modul mit &amp;#039;&amp;#039;modprobe lustre&amp;#039;&amp;#039; laden.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
=== Quick ===&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;options lnet networks=tcp0&amp;quot; &amp;gt;&amp;gt; /etc/modprobe.d/aliases&lt;br /&gt;
modprobe lnet&lt;br /&gt;
lctl network up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun ist das Netz konfiguriert und &amp;#039;&amp;#039;lctl list_nids&amp;#039;&amp;#039; sollte sowas ähnliches wie &amp;#039;&amp;#039;192.168.0.191@tcp&amp;#039;&amp;#039; ausgeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lenny:~# dmesg|grep Lustre&lt;br /&gt;
Lustre: Added LNI 192.168.0.191@tcp [8/256]&lt;br /&gt;
Lustre: Accept secure, port 988&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das LNET stoppen und die Module entladen geht folgendermaßen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lctl network unconfigure&lt;br /&gt;
lctl modules | awk &amp;#039;{print $2}&amp;#039; | xargs rmmod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun legen wir ein MDT MGS sowie ein OST auf dem gleichen Host an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext2 /dev/sdb&lt;br /&gt;
mkfs.lustre --mdt --mgs --fsname=large-fs /dev/sdb&lt;br /&gt;
mount -t lustre /dev/sdb /mnt/mdt&lt;br /&gt;
mkfs.ext2 /dev/sdc&lt;br /&gt;
mkfs.lustre --ost --fsname=large-fs --mgsnode=lenny@tcp0 /dev/sdc&lt;br /&gt;
mount -t lustre /dev/sdc /mnt/ost1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Client ====&lt;br /&gt;
&lt;br /&gt;
Das Filesystem können wir nun auf einem Client mounten.  Es wird nicht empfohlen den Client und den Server auf dem gleichen Host zu beteiben. Es funktioniert kann aber zu [http://manual.lustre.org/manual/LustreManual16_HTML/LustreOperatingTips.html#50548871_25080 Problemen] führen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lenny:~# lctl list_nids&lt;br /&gt;
192.168.0.191@tcp&lt;br /&gt;
lenny:~# mount -t lustre 192.168.0.191@tcp:/large-fs /mnt/testfs&lt;br /&gt;
lenny:~# df -h&lt;br /&gt;
Dateisystem          GrÃ¶Ãe Benut  Verf Ben% EingehÃ¤ngt auf&lt;br /&gt;
[some more]&lt;br /&gt;
192.168.0.191@tcp:/large-fs&lt;br /&gt;
                     1008M   34M  924M   4% /mnt/testfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
=== Speicherplatz anzeigen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lenny:~# lfs df -h&lt;br /&gt;
UUID                     bytes      Used Available  Use% Mounted on&lt;br /&gt;
large-fs-MDT0000_UUID    895.9M     44.7M    800.0M    4% /mnt/testfs[MDT:0]&lt;br /&gt;
large-fs-OST0000_UUID   1007.9M    302.2M    654.4M   29% /mnt/testfs[OST:0]&lt;br /&gt;
&lt;br /&gt;
filesystem summary:    1007.9M    302.2M    654.4M   29% /mnt/testfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Speicher erweitern ===&lt;br /&gt;
&lt;br /&gt;
Man kann den Speicher sehr einfach erweitern in dem man weitere OST&amp;#039;s hinzufügt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.ext2 /dev/sdd&lt;br /&gt;
mkfs.lustre --fsname=large-fs --ost --mgsnode=lenny@tcp0 /dev/sdd&lt;br /&gt;
mkdir /mnt/ost2&lt;br /&gt;
mount -t lustre /dev/sdd /mnt/ost2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach steht der Speicher sofort auf dem Client zu Verfügung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lenny:~# lfs df -h&lt;br /&gt;
UUID                     bytes      Used Available  Use% Mounted on&lt;br /&gt;
large-fs-MDT0000_UUID    895.9M     44.7M    800.0M    4% /mnt/testfs[MDT:0]&lt;br /&gt;
large-fs-OST0000_UUID   1007.9M    302.2M    654.4M   29% /mnt/testfs[OST:0]&lt;br /&gt;
large-fs-OST0001_UUID   1007.9M     33.5M    923.2M    3% /mnt/testfs[OST:1]&lt;br /&gt;
&lt;br /&gt;
filesystem summary:       2.0G    335.7M      1.5G   16% /mnt/testfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ausfall eines OST ===&lt;br /&gt;
&lt;br /&gt;
Wenn ein OST ausfällt friert das Dateisystem bzw. alle Zugriff darauf ein. Nach dem die Verbindung zu dem OST wieder hergestellt ist verbinden sich die Clients wieder mit dem ausgefallenen OST und beenden die angefangenen Dateioperationen.&lt;br /&gt;
&lt;br /&gt;
Aushängen eines OST um einen Ausfall zu simulieren:&lt;br /&gt;
&lt;br /&gt;
 OSS2:~# umount /mnt/ost3&lt;br /&gt;
&lt;br /&gt;
Daraufhin versucht der Client der Verbindung wieder aufzubauen. Ein der weile laufender &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; hält an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lustre:~# cat /proc/fs/lustre/osc/*/ost_server_uuid &lt;br /&gt;
large-fs-OST0000_UUID   FULL&lt;br /&gt;
large-fs-OST0001_UUID   FULL&lt;br /&gt;
large-fs-OST0002_UUID   CONNECTING&lt;br /&gt;
&lt;br /&gt;
lustre:~# lfs df -h&lt;br /&gt;
UUID                     bytes      Used Available  Use% Mounted on&lt;br /&gt;
large-fs-MDT0000_UUID    895.9M     35.9M    808.8M    4% /mnt/testfs[MDT:0]&lt;br /&gt;
large-fs-OST0000_UUID   1007.9M     65.6M    891.1M    6% /mnt/testfs[OST:0]&lt;br /&gt;
large-fs-OST0001_UUID   1007.9M     71.1M    885.5M    7% /mnt/testfs[OST:1]&lt;br /&gt;
&lt;br /&gt;
filesystem summary:       2.0G    136.7M      1.7G    6% /mnt/testfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach einem Remount des OST findet der Client das OST nach ein paar Sekunden wieder und beendet den angehaltenen &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; Prozess.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lustre:~# cat /proc/fs/lustre/osc/*/ost_server_uuid &lt;br /&gt;
large-fs-OST0000_UUID   FULL&lt;br /&gt;
large-fs-OST0001_UUID   FULL&lt;br /&gt;
large-fs-OST0002_UUID   FULL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Speicher reduzieren ===&lt;br /&gt;
&lt;br /&gt;
Um den Speicher zu reduzieren bzw ein OST zu entfernen (weil ein Server z.B. ausgemustert werden soll) wird das Target auf dem MDS als Readonly markiert. Nun ermittelt man die Files die auf dem zu entfernenden OST gespeichert sind und kopiert diese an eine andere Stelle. Dabei werden sie von dem als Readonly markierten OST entfernt.&lt;br /&gt;
&lt;br /&gt;
* OST auf dem MGS deaktivieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lenny:~# lctl device_list&lt;br /&gt;
  0 UP mgs MGS MGS 9&lt;br /&gt;
  1 UP mgc MGC192.168.0.191@tcp 28829736-ae29-b0e7-f4b7-0e78e5bb5202 5&lt;br /&gt;
  2 UP mdt MDS MDS_uuid 3&lt;br /&gt;
  3 UP lov large-fs-mdtlov large-fs-mdtlov_UUID 4&lt;br /&gt;
  4 UP mds large-fs-MDT0000 large-fs-MDT0000_UUID 5&lt;br /&gt;
  5 UP osc large-fs-OST0000-osc large-fs-mdtlov_UUID 5&lt;br /&gt;
  6 UP osc large-fs-OST0001-osc large-fs-mdtlov_UUID 5&lt;br /&gt;
  7 UP ost OSS OSS_uuid 3&lt;br /&gt;
  8 UP obdfilter large-fs-OST0000 large-fs-OST0000_UUID 7&lt;br /&gt;
  9 UP obdfilter large-fs-OST0001 large-fs-OST0001_UUID 7&lt;br /&gt;
 10 UP osc large-fs-OST0002-osc large-fs-mdtlov_UUID 5&lt;br /&gt;
lenny:~# lctl --device 10 deactivate&lt;br /&gt;
lenny:~# cat /proc/fs/lustre/osc/*/ost_server_uuid&lt;br /&gt;
large-fs-OST0000_UUID   FULL&lt;br /&gt;
large-fs-OST0001_UUID   FULL&lt;br /&gt;
large-fs-OST0002_UUID   FULL    DEACTIVATED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Auf einem Client kann man sich nun eine Liste mit den Files erstellen die auf dem OST gespeichert sind.&lt;br /&gt;
&lt;br /&gt;
 lfs find --obd large-fs-OST0002_UUID /mnt/testfs/&lt;br /&gt;
&lt;br /&gt;
* Diese Liste kopiert man nun um die Daten von dem deaktivierten OST auf die anderen zu übertragen (am besten per Script)&lt;br /&gt;
&lt;br /&gt;
 mv /mnt/testfs/test-daten /mnt/testfs/test-daten.tmp&lt;br /&gt;
 cp /mnt/testfs/test-daten.tmp /mnt/testfs/test-daten&lt;br /&gt;
 rm -r /mnt/testfs/test-daten.tmp&lt;br /&gt;
&lt;br /&gt;
* Während des kopierens sieht man wie der belegte Speicher auf den noch aktiven OST&amp;#039;s zu nimmt. Nach dem löschen der alten Daten sollte der belegte Speicher auf der zu entfernenden OST nahe null sein. Das wirklich keine Files mehr dort gespeichert sind überprüfen wir mit einem erneuten Find.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lustre:~# lfs df -h&lt;br /&gt;
UUID                     bytes      Used Available  Use% Mounted on&lt;br /&gt;
large-fs-MDT0000_UUID    895.9M     49.3M    795.4M    5% /mnt/testfs[MDT:0]&lt;br /&gt;
large-fs-OST0000_UUID   1007.9M    241.6M    715.0M   23% /mnt/testfs[OST:0]&lt;br /&gt;
large-fs-OST0001_UUID   1007.9M    236.6M    720.0M   23% /mnt/testfs[OST:1]&lt;br /&gt;
large-fs-OST0002_UUID   1007.9M     34.0M    922.6M    3% /mnt/testfs[OST:2]&lt;br /&gt;
&lt;br /&gt;
filesystem summary:       3.0G    512.2M      2.3G   16% /mnt/testfs&lt;br /&gt;
&lt;br /&gt;
lustre:~# lfs find --obd large-fs-OST0002_UUID /mnt/testfs/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nun können wir das OST auch auf den Clients deaktivieren und gefahrlos abschalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lustre:/mnt/testfs# lctl device_list&lt;br /&gt;
  0 UP mgc MGC192.168.0.191@tcp f5499735-0871-711c-f11b-0e01bc8ee056 5&lt;br /&gt;
  1 UP lov large-fs-clilov-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 4&lt;br /&gt;
  2 UP mdc large-fs-MDT0000-mdc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5&lt;br /&gt;
  3 UP osc large-fs-OST0000-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5&lt;br /&gt;
  4 UP osc large-fs-OST0001-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5&lt;br /&gt;
  5 IN osc large-fs-OST0002-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5&lt;br /&gt;
&lt;br /&gt;
lustre:/mnt/testfs# lctl --device 5 deactivate&lt;br /&gt;
&lt;br /&gt;
lustre:/mnt/testfs# lfs df -h&lt;br /&gt;
UUID                     bytes      Used Available  Use% Mounted on&lt;br /&gt;
large-fs-MDT0000_UUID    895.9M     49.3M    795.4M    5% /mnt/testfs[MDT:0]&lt;br /&gt;
large-fs-OST0000_UUID   1007.9M    241.6M    714.0M   23% /mnt/testfs[OST:0]&lt;br /&gt;
large-fs-OST0001_UUID   1007.9M    236.1M    719.5M   23% /mnt/testfs[OST:1]&lt;br /&gt;
large-fs-OST0002_UUID: inactive device&lt;br /&gt;
&lt;br /&gt;
filesystem summary:       2.0G    477.8M      1.4G   23% /mnt/testfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://manual.lustre.org/manual/LustreManual16_HTML/ConfiguringLustre.html#50548784_pgfId-1289798 Siehe auch &amp;#039;&amp;#039;Removing an OST&amp;#039;&amp;#039;]&lt;br /&gt;
* http://www.mail-archive.com/lustre-discuss@clusterfs.com/msg02006.html&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[GlusterFS]] ist möglicherweise eine Alternative&lt;/div&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
</feed>