Diese Seite beschreibt den Zusammenbau, Installation, Konfiguration und ggf. Migration eines Linux Fileservers mit 2×3 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.
Inhalt
Vorwort
Um 2002 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 auch 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 DVDs umfasst) auf den Fileserver Rippen um diese auf meinem HTPC übers Netzwerk streamen zu können. Oder einen VMware Server aufzusetzen, damit ich VMware 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 deshalb 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 (Red Hat) abstammt und deshalb stabil ist und gleichzeitig zumindest einigermassen aktuelle Pakete zur Verfügung stellt (vor allem letzteres war mit Debian sehr mühsam).
Letztendlich machte ich mir auch Gedanken, wie ich das gut migrieren könnte, schliesslich sind mittlerweile ziemlich viele Dienste vom Fileserver abhängig.
Deshalb 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
[stextbox id=“comment“ caption=“Hinweis zur Installation“]Die Prozedur mit der gentoo CD ist nur nötig, wenn man ein bisheriges System migrieren will!
Setzt man ein neues auf, kann man natürlich auch gleich die CentOS CD einlegen, bei der Installation die RAID Arrays und Volume Groups erzeugen, fertig installieren und dann mit: „yum install samba“ den Rest installieren. :)[/stextbox]
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.
[stextbox id=“comment“ caption=“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.[/stextbox]
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.1.1.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 die ganze 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 SAMBA als Domain Controller (PDC) beschreiben, die erforderlichen Änderungen, wenn jedoch SAMBA nur als Fileserver verwenden möchte, sollten offensichtlich sein.
Installation
Zuerst wird nun samba und die entsprechenden Komponenten installiert:
yum install samba cupsys cups tdb-tools convmv perl-Filesys-SmbClient hplip chkconfig smb on chkconfig nmb on /etc/init.d/smb start /etc/init.d/nmb start |
(hplip kann man weg lassen, wenn man am Fileserver keinen HP Drucker anschliessen möchte.)
Konfiguration
Wenn man SAMBA als PDC verwenden will, erstellt man nun am besten noch passende User-/Gruppen und Verzeichnisse:
groupadd -g 101 domain-users groupadd -g 102 machines mkdir -v /home/{netlogon,profiles} chmod -v 700 /home/profiles chown -v root:domain-users home/profiles chmod -v 750 /home/netlogon chown -v root:domain-users /home/netlogon |
Nun editieren wir die Datei ’smb.conf‘:
vi /etc/samba/smb.conf |
Diese sollte die folgenden Anweisungen enthalten:
#======================= Global Settings ===================================== [global] workgroup = MY.DOMAIN.TLD netbios name = my-fileserver server string = %L time server = yes log file = /var/log/samba/smbd.log security = user passdb backend = tdbsam encrypt passwords = true smb passwd file = /etc/samba/smbpasswd unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = <em>New</em>password:<em> %nn </em>Retype<em>new</em>password:<em> %nn </em>passwd: all authentication tokens updated successfully.* # Performance tweaks socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 unix extensions = no #wins support = yes #dns proxy = yes #======================= PDC Settings ===================================== local master = yes domain master = yes preferred master = yes domain logons = yes enable privileges = yes ### Roaming profiles ### # %L = This servers netbios name # %U = Username # %m = Machine Name logon path = %Lprofiles%U logon drive = H: #logon script = %U.bat # only used for Windows 9x clients logon home = %N%Uprofile # Auto-Add machine account when joining domain add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u #======================= Printing ===================================== printing = cups printcap name = cups load printers = yes #======================= Share Definitions =================================== ### Global Settings ### hide dot files = yes veto files = /lost+found/ create mask = 0640 directory mask = 0750 ### PDC related shares ### [homes] comment = Home Directories browseable = no writeable = yes create mask = 0600 directory mask = 0700 veto files = /.*/lost+found/ wide links = yes [netlogon] comment = Network Logon Service path = /home/netlogon browseable = no read only = yes write list = user1 [profiles] path = /home/profiles browseable = no read only = no profile acls = yes [printers] comment = All Printers path = /var/spool/samba browseable = no # Set public = yes to allow user 'guest account' to print writeable = no printable = yes [print$] comment = Printer Driver Download Area path = /usr/share/cups/drivers browsable = yes guest ok = yes read only = yes write list = root, user1, @administrators, @ntadmin ### normal shares ### [share] comment = Temporary file space path = /srv/smb/share public = yes read only = no create mask = 0664 directory mask = 0775 write list = @family veto files = /quota.*/lost+found/¨ # vfs recycle bin vfs objects = recycle shadow_copy recycle: repository = .recycle recycle: keeptree = Yes recycle: exclude = <em>.tmp, </em>.temp, <em>.log, </em>.ldb recycle: exclude_dir = tmp recycle:versions = Yes [files] path = /srv/smb/files comment = Allgmeine Dokumente, ebooks, Artikel,... public = no writeable = yes browseable = yes valid users = user1, user2, user3 |
Teste jetzt erstmal, ob du dich mit den Netzlaufwerken verbinden kannst und Dateien schreiben/lesen. Wenn nicht, bring das zuerst in Ordnung.
Als zweites ist zu testen ob die „Script-“ Kommandos funktionieren; insbesondere das da:
/usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u |
Dieses Kommando erstellt beim hinzufügen eines Computers zur Domäne ein sogenanntes „Maschinen Vertrauenskonto“.
Funktioniert dies nicht, wird später das hinzufügen eines Computers zur Domäne fehl schlagen.
Das „Maschinen Vertrauenskonto“ ist ein Benutzer im System der gleich heisst wie der Netwerkname des jeweiligen Computers mit einen „$“ angehängt; z.B.: „WOHNZIMMER_PC$“
So könnte man das obige Kommando testen, indem man damit einen User Account für „WOHNZIMMER_PC$“ erstellt, der in der Gruppe: „machines ist“:
/usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false WOHNZIMMER_PC$ |
[stextbox id=“note“ caption=“Hinweis“]Bei einigen (älteren) 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 so was 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 „machines“)[/stextbox]
Als zweites musst du nun für jeden User, der sich am Server Anmelden will einen Linux user erstellen:
useradd -g domain-users user1 useradd -g domain-users user2 useradd -g domain-users user3 |
usw.
Nun muss man alle diese User noch Samba bekannt machen mittels:
smbpasswd -a USERNAME |
Zuletzt braucht man noch ein admin Konto zu Samba hinzufügen (z.B. ‚root‘)
smbpasswd -a root (oder ein anderer admin user)
[stextbox id=“note“ caption=“Hinweis“]Möchte man nicht „root“ als samba User verwenden kann man sich auch einen eigenen „Domain Administrator User“ erstellen. Dies ist ein normaler Linux user, der jedoch noch ein paar samba spezpischi Rechte bekommt, die man sich mit „net rpc rights grant“ erstellen kann:
groupadd administrators useradd administrator -g administrators -G domain-users smbpasswd -a administrator net rpc rights grant 'MY.DOMAIN.TLDadministrator' SeMachineAccountPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege |
[/stextbox]
Nun sollte man mit dem admin account der Domäne beitreten können.
[stextbox id=“note“ caption=“Windows 7 und SAMBA3″]
SAMBA3, welches bei den meisten Distributionen leider noch Standard ist arbeitet mit sog.: „NT4-style domains“.
In diese lässt sich ab Windows7 nicht mehr standardmässig hinzufügen, man muss dazu eine registry Änderung machen, welche auf der Seite: Registry changes for NT4-style domains beschrieben wird.
[/stextbox]
Weiteres
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.TLDdadmin' SeMachineAccountPrivilege |
Überprüfen kann man das übrigens mit:
net rpc rights list 'MEINE.DOMAIN.TLDdadmin' |
und
net rpc rights list |
gibt eine Übersicht über die Verfügbaren Rechte aus.
Benutzer auflisten
Benutzer (und Maschinen) kann man mit dem kommando pdbedit abfragen:
pdbedit -L |
Backup
Vor allem, wenn man SAMBA als PDC verwendet kann dieser bald sehr wichtig werden.
Deshalb muss man schauen, dass man nebst den Daten auf den Netzlaufwerken auch die Konfiguration richtig sichert:
- Verzeichnis /etc/samba/
- Verzeichnis /var/lib/samba
Da die (*.tbd) files in /var/lib/samba/ Datenbanken sind, können diese nicht einfach „weg kopiert“ werden und müssen stattdessen mit dem tool „tdbbackup“ gesichert werden!
Ein (primitives!) Backup-Script könnte so aussehen:
#!/bin/sh tar -cvzf /srv/backup/samba-etc.tgz /etc/samba/ find /var/lib/samba/ -type f -name "*.tdb" |xargs tdbbackup tar -cvzf /srv/backup/samba-var.tgz /var/lib/samba/ |
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
- q-vadis.net Homeserver Tutorial: Gutes Tutorial zum sog. „Homeserver“
Related Downloads
- SAMBA: Der SAMBA Server wird als Grundkomponente für den Datenaustausch mit Windows Clients gebraucht
One thought on “Linux Fileserver”