Linux Fileserver
__ Diese Seite beschreibt den Zusammenbau, Installation, Konfiguration und ggf. Migration eines Linux Fileservers mit 2x3 Festplatten je im RAID5 Verbund auf Basis von CentOS.
Da dieser Server nicht als Firewall Rechner dient, werden wir im Nachhinein daraus noch DHCP, DNS und letztendlich einen kompletten NT-Domaincontroller mit Samba bauen.
PS: Wer ein nicht ganz so anspruchsvolles setup will, sollte sich die Seite: "Linux Fileserver (alte Version)" anschauen. __
Vorwort
Vor über 3 Jahren hatte ich mir meinen ersten Linux fileserver aufgesetzt. Seither ist viel passiert, denn nicht nur die Hardware hat sich sehr verändert (damals waren 300GB platten noch luxus!) sondern eauch meine Erfahrungen rund um linux. Und zu guter letzt sind auch meine "Ansprüche" gestiegen: Möchte ich doch nun im Zeitalter von TB-Platten auch meine ganze DVD-Sammlung (die immerhin etwas mehr als 100 DVD umfasst) auf den fileserver rippen um diese auf meinem HTPC übers Netzwerk streamen zu können. Oder einen VM-Ware server aufzusetzen, damit ich VM-Ware nicht immer auf meinem PC starten muss. - Und damit wäre mein bisheriger fileserver hoffnungsvoll überfordert gewesen.Zusätzlich wollte ich aber meine zwei 300GB Platten nicht einfach ausrangieren und entschied mich dehalb zu den drei neuen 1TB Platte noch eine 300GB Platte anzuschaffen um dann zwei RAID5 arrays zu erstellen.
-Die 1TB Platten sollen über ein Backplane laufen, um diese einfach erweitern und auswechseln zu können.
Auch wollte ich hier zum ersten mal CentOS statt Debian einsetzen; der Grund ist, dass CentOS von einer Enterprise Distribution (RedHat) abstammt und deshalb stabil ist und gleichzeitig zumindest einigermassen aktuelle Pakete zur Verfügung stellt (vor allem letzteres war mit debian sehr mühsam).
Letzendlich machte ich mir auch Gedanken, wie ich das gut migrieren könnte, schliesslich sind mittlerweile ziemlich viele Dienste vom fileserver abhängig.
Dehalb hier die neue Anforderungsliste:
- Preis unter 1000 CHF (ca. 600 EUR)
- RAID-Level 5 Verbund von drei 1TB- und drei 300GB Festplatten
- CentOS Linux als Betriebssystem
Und die Daraus resultierenden Vorteile:
- Zentrales Daten Backup- und Sicherheit
- Flexible Anpassung de Speicherplatzes
- Einfache Speichererweiterung
- Kann für weitere Netzwerk-Dienste eingesetzt werden
Also bin ich erneut auf Einkaufstour gegangen
1x Asus M3A78 PRO, AMD 780G; CHF 113.00 1x AMD Phenom II X4 810, 2.6GHz, AM3, QuadCore; CHF 222.00 1x Corsair TWIN2X4096-6400C5, 2x2GB, DDR2-800, CL5; CHF 49.00 1x Rackmaxx RM-325 S/S Backplane; CHF 167.00 1x Western Digital Caviar Blue, 7200rpm; CHF 63.00 3x Samsung HD103UJ, F1, 7200rpm; CHF 377 Total CHF: 993.00
Installation
Zuallerst starte ich eine Linux Konsole von CD (die gentoo minimal install CD eignet sich sehr gut dafür) und ziehe eine Backup meines ganzen bisherigen systems auf eine externe Festplatte! Danach wird diese Platte abgehängt und für den Notfall sicher zur Seite gelegt; da die migration direkt vom "alten" RAID auf das neue gemacht wird ist diese im normalfall nicht mehr nötig.Erst dann baue ich den server um und schliesse alle Platten an!
Nun ist das Ziel folgendes:
Das "neue" RAID (die 3 1TB platten) erstellen, das alte read-only mounten, aufs neue kopieren, dann das alte zerstören, neu machen, CentOS drauf installieren und dann die Daten wieder an die richtige Stelle kopieren.
Folgende Device Namen wurden bei mir verwendet:
"Alte" 300GB Platten: /dev/sda, /dev/sdb und /dev/sdc, wobei /dev/sda die neu dazugekaufte ist.
"Alte" 300GB Platten: /dev/sda, /dev/sdb und /dev/sdc, wobei /dev/sda die neu dazugekaufte ist.
Neue 1TB Festplatten: /dev/sdd, /dev/sde und /dev/sdf
Also rein mit der gentoo-CD und dann an der Konsole:
mknod /dev/md0 b 9 0 mknod /dev/md1 b 9 1 mknod /dev/md2 b 9 2 mknod /dev/md4 b 9 4 mdadm --create /dev/md4 --level=5 --raid-devices=3 /dev/sdd1 /dev/sde1 /dev/sdf1 watch -n1 cat /proc/mdstat # (abwarten bis das RAID bereit ist, kann einige Stunden dauern!) vgscan vgchange -a y pvcreate /dev/md4 vgcreate mediavg /dev/md4 lvcreate -L300G -nmigration_lv mediavg mkdir /mnt/SYSTEM mkdir /mnt/backup_lv mke2fs -j /dev/mediavg/migration_lv mount /dev/mediavg/migration_lv /mnt/backup_lv/ mdadm --examine --scan > /etc/mdadm.conf mdadm -A /dev/md0 --config /etc/mdadm.conf mdadm -A /dev/md1 --config /etc/mdadm.conf mdadm -A /dev/md2 --config /etc/mdadm.conf vgscan vgchange -a y mount -o ro /dev/rootvg/root_lv /mnt/SYSTEM/ mount -o ro /dev/md0 /mnt/SYSTEM/boot/ mount -o ro /dev/rootvg/tmplv /mnt/SYSTEM/tmp/ mount -o ro /dev/rootvg/usr_lv /mnt/SYSTEM/usr/ mount -o ro /dev/rootvg/var_lv /mnt/SYSTEM/var/ mount -o ro /dev/datavg/backup_lv /mnt/SYSTEM/backup/ mount -o ro /dev/datavg/files_lv /mnt/SYSTEM/files/ mount -o ro /dev/datavg/home_lv /mnt/SYSTEM/home/ mount -o ro /dev/datavg/install_lv /mnt/SYSTEM/install/ mount -o ro /dev/datavg/programs_lv /mnt/SYSTEM/programs/ mount -o ro /dev/datavg/server_lv /mnt/SYSTEM/server/ mount -o ro /dev/datavg/share_lv /mnt/SYSTEM/share/ mkdir /mnt/backup_lv/SYSTEM_BACKUP ./rsync -ahv --progress /mnt/SYSTEM/ /mnt/backup_hd/SYSTEM_BACKUP/
Danach rebooten, wieder in die Konsole und das zweite RAID erstellen. -Ich musste dabei zusätzlich noch die bisherigen Platten komplett wipen, da sonst der CentOS installer immer noch das "alte" MD-Array gesehen hat:
dd if=/dev/zero of=/dev/sdb dd if=/dev/zero of=/dev/sdc
Nun alle Festplatten mit cfdisk nach dem folgenden Schema formattieren:
[root@fileserver ~]# fdisk -l Disk /dev/sda: 320.0 GB, 320072933376 bytes 255 heads, 63 sectors/track, 38913 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 16 128488+ fd Linux raid autodetect /dev/sda2 17 12465 99996592+ fd Linux raid autodetect /dev/sda3 12466 36483 192924585 fd Linux raid autodetect Disk /dev/sdb: 300.0 GB, 300090728448 bytes 255 heads, 63 sectors/track, 36483 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 16 128488+ fd Linux raid autodetect /dev/sdb2 17 12465 99996592+ fd Linux raid autodetect /dev/sdb3 12466 36483 192924585 fd Linux raid autodetect Disk /dev/sdc: 300.0 GB, 300090728448 bytes 255 heads, 63 sectors/track, 36483 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 * 1 16 128488+ fd Linux raid autodetect /dev/sdc2 17 12465 99996592+ fd Linux raid autodetect /dev/sdc3 12466 36483 192924585 fd Linux raid autodetect Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdd1 * 1 121601 976760001 fd Linux raid autodetect Disk /dev/sde: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sde1 * 1 121601 976760001 fd Linux raid autodetect Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdf1 * 1 121601 976760001 fd Linux raid autodetect
Die restlichen MD-Arryas und VolumeGroups erstelle ich dann jweils im CentOS setup nach folgendem Schema:
sda1,sdb1 (128 MB): md1, RAID1 /boot sda2,sdb2,sdc2 (100G): md2, RAID5 rootvg sda3,sdb3,sdc3 (rest): md3, RAID5 datavg
Dann installiere ich CentOS konfiguriere es nach meinem Geschmack und synche die Daten wieder zurück:
mount -o ro /dev/mediavg/migration_lv /mnt/BACKUP_LV/ rsync -ahv /mnt/BACKUP_LV/SYSTEM_BACKUP/home/ /home/ rsync -ahv /mnt/BACKUP_LV/SYSTEM_BACKUP/programs/ /programs/ usw.
Konfiguration
Nun sollte man als erstes ein oder zwei systeme im Internet und auch im Netzwerk anpingen:# ping 10.0.0.10 # ping heise.de # usw.
Klapp hier etwas nicht (insbesondere wenn auch die Rechner im internen Netzwerk nicht anpingbar sind, sollte man zuerst dieses Problem lösen. Es erspart einem ne menge ärger.
In diesem Falle sollte man mal ein
ifconfigmachen. Hier muss die Netzwerkkarte (eth0) erkannt sein und eine IP haben. Diese IP muss natürlich auch von den anderen systemen anpingbar sein.
Die Netzwerkkonfiguration sollte in den meisten Fällen aber schon während der Installation einwandfrei klappen, weshalb hier jetzt nicht näher darauf eingegangen wird.
SAMBA Einrichten
Angenommen, der Fileserver lässt sich von aussen anpingen und kann auch die anderen systeme im Netzwerk erreichen, machen wir uns an die SAMBA-Konfiguration. Hier gibt es zwei Möglichkeiten: Samba als reiner Fileserver in einer Arbeitsgruppe und SAMBA als Domain Controller. -Letzteres hat den Vorteil, dass man dann di eganze user/passwortverwaltung auf dem SAMBA Server hat, sich an einer "richtigen" Domäne anmelden kann und dann auch sein Benutzerprofil an jedem PC an dem man arbeitet laden kann. Die zweite Lösung ist etwas komplizierter zu konfigigurieren, aber auch nicht sehr schwierig. Ich werde hier zuerst SAMBA als reinen Fileserver beschreiben und Optional die Änderungen, die man dazu machen muss um aus dem Fileserver einen NT Domaincontroller zu machen.Den ersten schritt müssen jedoch alle ausführen:
SAMBA als Fileserver
Zuerst editieren wir die Datei 'smb.conf':vi /etc/samba/smb.conf
Diese muss die folgenden Anweisungen enthalten; bei allen anderen genügt in den meisten Fällen der Standard:
#============================ Konfiguration ============================== Hier wird der Server konfiguriert [global] workgroup = MEINE.DOMAIN.TLD netbios name = fileserver # server string ist das, was nacher im "Beschrebungs-Feld" des Ordners angezeigt wird. server string = Samba Server %v running on %L # Charset Options unix charset = CP850 # Bei Samba als Domaincontroller macht diese Anweisung sinn time server = Yes # Falls du kein NT Domaincontroller im Netzwerk hast, der die Benutzer # verwaltet ist security immer "user" (auch wenn samba ein Domain Controller wird!) security = user # Passwort Einstellungen encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd unix password sync = Yes passwd program = /usr/bin/passwd %u passwd chat = *New*password:* %n\n *Retype*new*password:* %n\n *passwd:*all*authentication*tokens*updated*successfully.* # Dies ist der relevante Teil wenn SAMBA ein Domain Controller wird: local master = no os level = 33 domain master = no preferred master = no domain logons = no enable privileges = yes # %L steht für den netbios namen des Servers, %U ist der username logon path = \\%L\profiles\%U # Profilverzeichniss logon drive = H: # Home-Netzlaufwerk des Users logon home = \\%L\%U # Pfad des Home-Netzlaufwerkes logon script = %U.bat # Logon Script dns proxy = no # Linux typische Dateien vor Windows verstecken (sonst sieht man immer solche "lost+found" und # .datei Dateien, mit denen Wndows sowiesp nix anfangen kann. hide dot files = yes veto files = /lost+found/ # Privilege aktivieren (damit man dem Benutzer erweiterte Domänenrechte zuweisen kann) enable privileges = yes #============================ Freigaben ============================== Und hier die Netzlaufwerk Freigaben Die ersten 3 Freigaben (HOMES, NETLOGON und PROFILES) sind zwingend nötig, wenn SAMBA nacher Domain Controller wird, ansonsten Optional # Heimverzeichnisse des Benutzers (z.B. /home/hmuster) [homes] comment = Home Directories browseable = no writable = yes veto files = /.*/lost+found/ # Verzeichniss der NT Logon Scripts [netlogon] comment = Network Logon Service path = /home/netlogon guest ok = yes writable = no share modes = no write list = svarco # Hier kommen die benutzerprofile hin [profiles] path = /home/profiles browseable = no guest ok = yes read only = no # Hier können dann die Freigaben nach belieben hinzugefügt werden. Unten ist das Beispiel auf die Partitionierung meines Servers zugeschnitten. [share] comment = Share-laufwerk (hier haben alle user Vollzugriff) path = /share public = yes read only = no write list = @family [files] path = /files comment = Dataserver (ext3) guest ok = no writeable = yes browseable = yes valid users = user1, user2, user3 [install] path = /install comment = Install Directory (Filesystem: ext2) read only = no public = yes [server] path = /server comment = Server-Daten (ext3) guest ok = no writeable = yes browseable = yes valid users = user1 [programme] path = /programs comment = Programme (ext3) guest ok = no writeable = yes browseable = yes valid users = user1
Teste jetzt erstmal, ob du dich mit den netzlaufwerken verbinden kannst und Dateien schreiben/lesen. Wenn nicht, bring das zuerst in Ordung.
SAMBA als Domain Controller
Erst wenn alles klappt, solltest du samba als Domain Controller konfigurieren.Dazu sind zwei zusätzliche Schritte Notwendig:
Editiere nochmals die Datei: '/etc/samba/smb.conf'
vi /etc/samba/smb.conf
Dann ersetze die folgenden Anweisungen:
local master = no os level = 33 domain master = no preferred master = no domain logons = no
durch:
local master = yes os level = 33 domain master = yes preferred master = yes domain logons = yes
Als zweites musst du nun für jeden User, der sich am Server Anmelden will einen Linux user erstellen:
useradd user1 useradd user2 useradd user3
usw.
Nun muss man alle diese User noch Samba bekannt machen mittels:
smbpasswd -a USERNAME
Nachdem man die User erstellt hat, muss man noch ein sogenntes "Maschinen Vertrauenskonto" erstellen.
Dafür musst du in Linux für jeden PC einen user machen, der genau gleich heisst wie der Netzwerknamen des PCs mit einem '$' dahinter.
Wenn also der PC im Wohnzimmer den netzwerknamen 'WOHNZIMMER_PC' hat, so muss das "Vertrauens-User-Konto": 'WOHNZIMMER_PC$' heissen.
Am besten machst du für diese erstmal eine eigene usergruppe:
groupadd -g 101 rechner
(Die GID "101" darf unter: /etc/group noch nicht existieren, sonst hier eine andere eintragen!)
Alternativ zu groupadd, kann man auch einfach die Zeile:
rechner:x:101:
in die Datei /etc/group hinzufügen.
Dann in Linux ein Maschinenkonto erstellen und zu Samba hinzufügen adduser WOHNZIMMER_PC$ -g 101 -d /dev/null -s /bin/false smbpasswd -a -m WOHNZIMMER_PC$
Hinweis: Bei einigen Linux-Distributionen wird man bei der Eingabe von adduser WOHNZIMMER_PC$ Probleme bekommen wegen des Dollarzeichens; es erscheint dann etwa die Meldung "Invalid Username". Dieser fehler liegt nur am adduser-Script, Linux selbst kann sehr gut mit '$' im Namen umgehen.
In einem solchen fall muss man die Maschinenkonten manuell hinzufügen. Dazu trägt man einfach in der Datei: "/etc/passwd" zuunterst sowas ein wie:
WOHNZIMMER_PC$:x:504:101:KOMMENTAR:/dev/null:/bin/false
Dabei steht die erste Zahl (hier: 504) für die User-ID; diese kann Grundsätzlich frei bestimmt werden, darf aber noch nicht existieren. Die Zweite Zahl (101) ist die Gruppe des Maschinenkontos. (Hier das Zuvor bestimmte Gruppenkonto "rechner")
Zuletzt braucht man noch ein admin Konto zu Samba hinzufügen (z.B. 'root')
smbpasswd -a root (oder ein anderer admin user)
Nun sollte man mit dem admin account der Domäne beitreten können.
Benutzer spezielle Domänen rechte zuweisen
Die Option "enable privileges = yes", die wir weiter oben gesetzt haben bewirkt, dass man nun einzelne Benutzer mit besonderen Domain(-admin) Rechten ausstatten kann.
Dies geht über "net rpc".
Will man z.B. einem Benutzeraccount "dadmin" erlauben Maschinen zur Domäne hinzuzufügen genügt folgendes auf der Kommandozeile:
net rpc rights grant 'MEINE.DOMAIN.TLD\dadmin' SeMachineAccountPrivilege
Überprüfen kann man das übrigens mit:
net rpc rights list 'MEINE.DOMAIN.TLD\dadmin'
und
net rpc rights list
gibt eine Übersicht über die Verfügbaren Rechte aus.
Wenn man ohne fehler bis hierher gekommen ist, hat man nun einen funktionierenden Linux Fileserver.
Weiter gehts mit dem Kapitel: (Zusätzliche Services Installieren) .
Related Links
| Link | Beschreibung |
| VT8237 Linux Treiber | VIAs Downloadseite für die RAID Linux-Treiber |
| q-vadis.net Homeserver Tutorial | Gutes Tutorial zum sog. "Homeserver" |
Related Downloads
| File | Beschreibung |
| SAMBA | Der SAMBA Server wird als Grundkomponente für den Datenaustausch mit Windows Clients gebraucht |

Neuen Kommentar posten