Linux Fileserver

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

Related Downloads

  • SAMBA: Der SAMBA Server wird als Grundkomponente für den Datenaustausch mit Windows Clients gebraucht

One thought on “Linux Fileserver”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert