Send a link

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.

Schließen
Kommentar Zum besseren Verständnis
Folgende Device Namen wurden bei mir verwendet:
"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
ifconfig
machen. 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) .


Link Beschreibung
VT8237 Linux Treiber (external link) VIAs Downloadseite für die RAID Linux-Treiber
q-vadis.net Homeserver Tutorial (external link) Gutes Tutorial zum sog. "Homeserver"

File Beschreibung
SAMBA (external link) Der SAMBA Server wird als Grundkomponente für den Datenaustausch mit Windows Clients gebraucht


Neuen Kommentar posten

Anti-Bot Prüf-Code: Zufälliges Bild
Neuen Kommentar posten
Schließen
note Hinweis
Your comment will have to be approved by the moderator before it is displayed.