1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
|
<!--
The FreeBSD Documentation Project
The FreeBSD German Documentation Project
Original version 1.29
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/config/chapter.sgml,v 1.7 2001/12/14 17:48:35 mheinen Exp $
-->
<chapter id="config-tuning">
<chapterinfo>
<authorgroup>
<author>
<firstname>Chern</firstname>
<surname>Lee</surname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Mike</firstname>
<surname>Smith</surname>
<contrib>Nach einem Tutorial von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Matt</firstname>
<surname>Dillon</surname>
<contrib>Basiert ebenfalls auf tuning(7) von </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Konfiguration und Tuning</title>
<sect1>
<title>Übersicht</title>
<indexterm><primary>System-Konfiguration/Optimierung</primary></indexterm>
<para>Ein korrekt konfiguriertes System kann die Arbeit,
die bei der zukünftigen Pflege und bei Migrationen des Systems
entsteht, erheblich reduzieren.
Dieses Kapitel beschreibt Aspekte der administrativen
Konfiguration von FreeBSD Systemen.</para>
<para>Es werden zudem einige Parameter beschrieben, die gesetzt
werden können, um aus einem FreeBSD System die optimale
Leistung zu holen.</para>
<para>Nachdem Sie dieses Kapitel durchgearbeitet haben,
werden Sie folgendes wissen:</para>
<itemizedlist>
<listitem>
<para>Warum und wie Sie effizient Dateisysteme und
Swap-Partitionen auf Ihrer Festplatte einrichten.</para>
</listitem>
<listitem>
<para>Die Grundlagen der Konfiguration mit
<filename>rc.conf</filename> und des Systems zum Starten
von Applikationen in <filename>/usr/local/etc/rc.d</filename>.</para>
</listitem>
<listitem>
<para>Wie Sie virtuelle Hosts und Netzwerkgeräte
konfigurieren.</para>
</listitem>
<listitem>
<para>Wie Sie die verschiedenen Konfigurationsdateien
in <filename>/etc</filename> benutzen.</para>
</listitem>
<listitem>
<para>Wie Sie mit <command>sysctl</command> Variablen FreeBSD
einstellen können.</para>
</listitem>
<listitem>
<para>Wie Sie die Platten Performance einstellen und Kernel Parameter
modifizieren können.</para>
</listitem>
</itemizedlist>
<para>Bevor Sie dieses Kapitel lesen, sollten Sie</para>
<itemizedlist>
<listitem>
<para>die Grundlagen von Unix und FreeBSD (<xref linkend="basics">)
verstehen.</para>
</listitem>
<listitem>
<para>Damit vertraut sein, wie Sie die FreeBSD-Quellen aktuell
halten
<!--
(<xref linkend="cutting-edge">)
-->
und wissen, wie Sie einen
Kernel konfigurieren und kompilieren.</para>
<!--
(<xref linkend="kernelconfig">)
-->
</listitem>
</itemizedlist>
</sect1>
<sect1 id="configtuning-initial">
<title>Vorbereitende Konfiguration</title>
<sect2>
<title>Layout von Partitionen</title>
<indexterm><primary>Layout von Partitionen</primary></indexterm>
<indexterm><primary><filename>/etc</filename></primary></indexterm>
<indexterm><primary><filename>/var</filename></primary></indexterm>
<indexterm><primary><filename>/usr</filename></primary></indexterm>
<sect3>
<title>Partitionen</title>
<para>Wenn Sie Dateisysteme mit &man.disklabel.8; oder
&man.sysinstall.8; anlegen, sollten Sie beachten, daß
Festplatten auf Daten in den äußeren Spuren
schneller zugreifen können als auf Daten in den
inneren Spuren. Daher sollten die kleineren oft benutzten
Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition,
an den äußeren Rand der Platte gelegt werden.
Die größeren Partitionen wie <filename>/usr</filename>
sollten in die inneren Bereiche gelegt werden.
Es empfiehlt sich, die Partitionen in einer ähnlichen
Reihenfolge wie Root-Partition, Swap, <filename>/var</filename>
und <filename>/usr</filename> anzulegen.</para>
<para>Die Größe der <filename>/var</filename>-Partition
ist abhängig vom Zweck der Maschine.
<filename>/var</filename> enthält hauptsächlich
Postfächer, den Spoolbereich zum Drucken und Logdateien.
Abhängig von der Anzahl der Systembenutzer und der
Aufbewahrungszeit für Logdateien, können gerade
die Postfächer und Logdateien zu ungeahnten Größen
wachsen. Wenn Sie beabsichtigen, einen Mailserver zu betreiben,
kann eine <filename>/var</filename>-Partition mit einer
Größe von einem Gigabyte und mehr passend sein.
Zudem sollte <filename>/var/tmp</filename> groß genug sein,
um Pakete, die Sie installieren wollen, aufzunehmen.</para>
<para>Die <filename>/usr</filename>-Partition enthält den
Hauptteil der Dateien des Systems und das darin enthaltene
Unterverzeichnis <filename>/usr/local</filename> enthält
den Hauptteil der Dateien, die aus der &man.ports.7;
Hierarchie installiert wurden. Wenn Sie nicht vorhaben,
viele Ports zu benutzen und nicht beabsichtigen, den
Quellcode des Systems in <filename>/usr/src</filename> zu halten,
dann reicht eine 1 Gigabyte große
<filename>/usr</filename>-Partition. Wenn Sie aber viele
Ports, insbesondere Fenstermanager und die Linux-Emulation,
installieren, dann empfehlen wir mindestens eine zwei Gigabyte
große Partition für <filename>/usr</filename>.
Wenn Sie außerdem noch den Quellcode für das
System installieren, empfehlen wir eine drei Gigabyte
<filename>/usr</filename>-Partition. Unterschätzen
Sie bitte nicht den Platz, den Sie für diese Partition
brauchen, sie kann unmerklich anwachsen und Sie
überraschen.</para>
<para>Wenn Sie die Größe der Partitionen festlegen,
beachten Sie bitte das Wachstum Ihres Systems. Es kann
sehr frustrierend sein, wenn Sie den Platz in einer Partition
vollständig verbraucht haben, dagegen in einer
anderen Partition noch sehr viel Platz zur Verfügung
haben.</para>
<note><para>Einige Benutzer, die in &man.sysinstall.8; die
Partitionen mit <literal>Auto-defaults</literal> automatisch
angelegt haben, wurden später von einer zu kleinen
Root- oder <filename>/var</filename>-Partition überrascht.
Partitionieren Sie weise und großzügig.</para></note>
</sect3>
<sect3>
<title>Swap Partition</title>
<indexterm><primary>Größe der
Swap-Partition</primary></indexterm>
<indexterm><primary>Swap-Partition</primary></indexterm>
<para>Als Daumenregel sollten Sie doppelt soviel Speicher
für die Swap-Partition vorsehen, als Sie Hauptspeicher
haben. Verfügt die Maschine beispielsweise über
128 Megabyte Hauptspeicher, sollten Sie 256 Megabyte für
den Swap-Bereich vorsehen. Systeme mit weniger Speicher
werden wahrscheinlich mit viel mehr Swap mehr leisten. Es
wird nicht empfohlen, weniger als 256 Megabyte Swap einzurichten.
Außerdem sollten Sie künftige Speichererweiterungen
beachten, wenn Sie die Swap-Partition einrichten. Die
VM-Paging-Algorithmen im Kernel sind so eingestellt, daß
Sie am besten laufen, wenn die Swap-Partition mindestens
doppelt so groß wie der Hauptspeicher ist. Zu wenig
Swap kann zu einer Leistungsverminderung im
<quote>VM page scanning</quote>
Code führen sowie Probleme verursachen, wenn Sie später
mehr Speicher in Ihre Maschine bauen.<para>
<para>Auf größeren Systemen mit mehreren SCSI-Laufwerken
(oder mehreren IDE-Laufwerken an unterschiedlichen Controllern)
empfehlen wir Ihnen wärmstens, Swap-Bereiche auf bis zu
vier Laufwerken einzurichten. Diese Swap-Partitionen sollten
ungefähr dieselbe Größe haben. Der Kernel
kann zwar mit beliebigen Größen umgehen, aber
die internen Datenstrukturen skalieren bis zur vierfachen
Größe der größten Partition. Ungefähr
gleich große Swap-Partitionen erlauben es dem Kernel,
den Swap-Bereich optimal über die Laufwerke zu verteilen.
Machen Sie sich keine Gedanken, etwas zu übertreiben,
ausreichend Swap kann unter Unix die Lage retten. Ausreichend
Swap, auch wenn Sie ihn normal nicht brauchen, kann Ihnen
die Zeit geben, sich von einem wild gewordenen Programm
zu erholen, bevor Sie zu einem Reboot gezwungen werden.</para>
</sect3>
<sect3>
<title>Warum partitionieren?</title>
<para>Warum soll ich überhaupt partitionieren? Eine
große Root-Partition reicht doch und man kann
sich bei den Größen nicht verschätzen!</para>
<para>Dagegen sprechen mehrere Gründe. Jede Partition
hat im Betrieb unterschiedliche Eigenschaften und die
Trennung der Partitionen erlaubt es, die Dateisysteme
an diese Eigenschaften anzupassen. Die Root- und
<filename>/usr</filename>-Partitionen weisen meist nur
lesende Zugriffe auf, während <filename>/var</filename>
und <filename>/var/tmp</filename> hauptsächlich
beschrieben werden.</para>
<para>Indem Sie Ihr System richtig partitionieren, verhindern
Sie, daß eine Fragmentierung in den häufig beschriebenen
Partitionen auf die meist nur gelesenen Partitionen
übergreift. Wenn Sie weiterhin die häufig beschriebenen
Partitionen an den Rand der Platte, z.B. vor die wirklich
großen Partitionen, legen, dann wird die I/O-Leistung
auf den Partitionen, auf denen sie am meisten gebraucht wird,
steigen. Natürlich brauchen Sie die I/O-Leistung auch auf
den größeren Partitionen, aber da diese so groß
sind, bringt es keine signifikante Steigerung der Leistung,
wenn Sie sie an den Rand schieben. Im Gegensatz dazu, kann
es einen großen Einfluß haben, wenn Sie
<filename>/var</filename> an den Rand der Platte legen.
Schließlich sollten Sie noch die Sicherheit beachten.
Eine kleine Root-Partition, auf die meist nur lesend
zugegriffen wird, überlebt einen schlimmen Absturz
wahrscheinlich eher als eine große Partition.</para>
</sect3>
</sect2>
</sect1>
<sect1 id="configtuning-core-configuration">
<title>Basiskonfiguration</title>
<indexterm>
<primary>rc Dateien</primary>
<secondary><filename>rc.conf</filename></secondary>
</indexterm>
<para>Informationen zur Systemkonfiguration sind hauptsächlich
in <filename>/etc/rc.conf</filename>, die meist beim Start
des Systems verwendet wird, abgelegt. Der Name der Datei zeigt
ihren Zweck an: Sie enthält die Konfigurationen für
die <filename>rc*</filename> Dateien.</para>
<para>In <filename>rc.conf</filename> werden die Vorgabewerte aus
<filename>/etc/defaults/rc.conf</filename> überschrieben.
Die Vorgabedatei sollte nicht nach <filename>/etc</filename>
kopiert werden, da sie die Vorgabewerte und keine Beispiele
enthält. Jede systemspezifische Änderung wird
in <filename>rc.conf</filename> vorgenommen.</para>
<para>Um den administrativen Aufwand gering zu halten, existieren
in geclusterten Applikationen mehrere Strategien,
globale Konfigurationen von systemspezifischen Konfigurationen
zu trennen. Der empfohlene Weg hält die globale Konfiguration
in einer separaten Datei z.B. <filename>rc.conf.site</filename>.
Diese Datei wird dann in <filename>/etc/rc.conf</filename>,
die nur systemspezifische Informationen enthält, eingebunden.</para>
<para>Da <filename>rc.conf</filename> von &man.sh.1; gelesen
wird, ist das einfach zu erreichen:</para>
<itemizedlist>
<listitem><para>rc.conf:</para>
<programlisting> . rc.conf.site
hostname="node15.example.com"
network_interfaces="fxp0 lo0"
ifconfig_fxp0="inet 10.1.1.1"</programlisting></listitem>
<listitem><para>rc.conf.site:</para>
<programlisting> defaultrouter="10.1.1.254"
saver="daemon"
blanktime="100"</programlisting></listitem>
</itemizedlist>
<para><filename>rc.conf.site</filename> kann dann auf jedes
System mit <command>rsync</command> verteilt werden,
<filename>rc.conf</filename> bleibt dabei systemspezifisch.</para>
<para>Bei einem Upgrade des Systems mit &man.sysinstall.8; oder
<command>make world</command> wird <filename>rc.conf</filename>
nicht überschrieben, so daß die Systemkonfiguration
erhalten bleibt.</para>
</sect1>
<sect1 id="configtuning-appconfig">
<title>Konfiguration von Applikationen</title>
<para>Installierte Applikationen haben typischerweise
eigene Konfigurationsdateien, die eine eigene Syntax
verwenden. Damit diese Dateien leicht von der
Paketverwaltung gefunden und verwaltet werden können,
ist es wichtig, sie vom Basissystem zu trennen.</para>
<indexterm><primary>/usr/local/etc</primary></indexterm>
<para>Für gewöhnlich werden diese Dateien in
<filename>/usr/local/etc</filename> installiert. Besitzt
eine Applikation viele Konfigurationsdateien, werden
diese in einem separaten Unterverzeichnis abgelegt.</para>
<para>Wenn ein Port oder ein Paket installiert wird, werden
normalerweise auch Beispiele für die Konfigurationsdateien
installiert. Diese erkennt man gewöhnlich an dem
Suffix <quote>.default</quote>. Wenn keine Konfigurationsdateien
für eine Applikation existieren, werden sie durch
Kopieren der .default Dateien erstellt.</para>
<para>Als Beispiel sei <filename>/usr/local/etc/apache</filename>
gezeigt:</para>
<literallayout class="monospaced">-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf
-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default
-rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf
-rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default
-rw-r--r-- 1 root wheel 12205 May 20 1998 magic
-rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default
-rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types
-rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default
-rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf
-rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default</literallayout>
<para>Anhand der Dateigröße erkennen Sie, daß sich
nur <filename>srm.conf</filename> geändert hat. Ein
späterer Update des Apache Ports würde diese
Datei nicht überschreiben.</para>
</sect1>
<sect1 id="configtuning-starting-services">
<title>Start von Diensten</title>
<indexterm><primary>Dienste</primary></indexterm>
<para>Es ist üblich, daß ein System mehrere Dienste
zur Verfügung stellt. Diese können auf verschiedene
Weisen, die jeweils andere Vorteile haben, gestartet werden.</para>
<indexterm><primary>/usr/local/etc/rc.d</primary></indexterm>
<para>Software, die von einem Port oder einem Paket installiert
wurde, wird oft ein Skript in <filename>/usr/local/etc/rc.d</filename>
stellen. Dieses wird beim Hochfahren des Systems mit dem
Argument <option>start</option> und beim Herunterfahren mit
dem Argument <option>stop</option> aufgerufen. Das ist der empfohlene
Weg, systemweite Dienste, die unter <username>root</username> laufen
oder unter <username>root</username> gestartet werden, zu starten.
Die Skripte werden bei der Installation des Paketes registriert
und entfernt, wenn das Paket entfernt wird.</para>
<para>Ein typisches Skript in <filename>/usr/local/etc/rc.d</filename>
sieht wie folgt aus:</para>
<programlisting>#!/bin/sh
echo -n ' FooBar'
case "$1" in
start)
/usr/local/bin/foobar
;;
stop)
kill -9 `cat /var/run/foobar.pid`
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
</programlisting>
<para>Um die passenden Aktionen auszuführen, wird das Skript
beim Start des Systems mit <option>start</option>
und mit <option>stop</option> beim Herunterfahren aufgerufen.</para>
<para>Manche Dienste werden von &man.inetd.8; aufgerufen, wenn
eine Verbindung auf dem passenden Port aufgebaut wird. Üblich
ist das für Server von Mail-Clients (POP, IMAP, usw.). Diese
Dienste werden durch das Editieren von
<filename>/etc/inetd.conf</filename> aktiviert. Details dazu
finden sich in &man.inetd.8;.</para>
<para>Weitere Systemdienste werden vielleicht nicht von
<filename>/etc/rc.conf</filename> abgedeckt. Diese werden
traditionell durch Kommandos in <filename>/etc/rc.local</filename>
aktiviert. Seit FreeBSD 3.1 existiert keine Vorgabe für
<filename>/etc/rc.local</filename> mehr. Wenn die Datei allerdings
von einem Administrator angelegt wird, so wird sie auch
ausgeführt. Beachten Sie bitte, daß
<filename>/etc/rc.local</filename> als der letzte Weg, einen
Dienst zu starten, angesehen wird. Wenn es eine andere
Möglichkeit gibt, den Dienst zu starten, nehmen Sie diese
bitte wahr.</para>
<note><para>Fügen Sie bitte <emphasis>keine</emphasis> Kommandos
in <filename>/etc/rc.conf</filename> ein. Starten Sie stattdessen
Dæmons oder Kommandos beim Hochfahren mit Skripten in
<filename>/usr/local/etc/rc.d</filename>.</para></note>
<para>Systemdienste können auch mit &man.cron.8; gestartet
werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil
&man.cron.8; die Prozesse unter dem Eigentümer der
<command>crontab</command> startet, ist es möglich, daß
Dienste von nicht-<username>root</username> Benutzern gestartet
und gepflegt werden können.</para>
<para>Dies nutzt eine Eigenschaft von &man.cron.8;:
Für die Zeitangabe kann <literal>@reboot</literal>
eingesetzt werden. Damit wird das Kommando gestartet, wenn
&man.cron.8; kurz nach dem Systemboot gestartet wird.</para>
</sect1>
<sect1 id="configtuning-virtual-hosts">
<title>Virtual Hosts</title>
<indexterm><primary>virtual hosts</primary></indexterm>
<indexterm><primary>IP Aliase</primary></indexterm>
<para>Ein gebräuchlicher Zweck von FreeBSD ist das
virtuelle Hosting, bei dem ein Server im Netzwerk wie
mehrere Server aussieht. Dies wird dadurch erreicht,
daß einem Netzwerkinterface mehrere Netzwerk-Adressen
zugewiesen werden.</para>
<para>Ein Netzwerkinterface hat eine <quote>echte</quote>
Adresse und kann beliebig viele <quote>alias</quote> Adressen
haben. Die Aliase werden durch entsprechende alias Einträge
in <filename>/etc/rc.conf</filename> festgelegt.</para>
<para>Ein alias Eintrag für das Interface
<devicename>fxp0</devicename> sieht wie folgt aus:</para>
<programlisting>ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"</programlisting>
<para>Beachten Sie, daß die alias Einträge mit alias0
anfangen müssen und dann weiter hochgezählt werden,
das heißt _alias1, _alias2, usw.
Die Konfiguration der Aliase hört bei der ersten
fehlenden Zahl auf.</para>
<para>Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch
zum Glück einfach. Für jedes Interface muß es
eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig
beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann
eine Netzwerkmaske, die mit 1 gefüllt ist.</para>
<para>Als Beispiel betrachten wir den Fall, in dem
<devicename>fxp0</devicename> mit zwei Netzwerken verbunden
ist: dem Netzwerk 10.1.1.0 mit der Netzwerkmaske 255.255.255.0
und dem Netzwerk 202.0.75.16 mit der Netzwerkmaske 255.255.255.240.
Das System soll die Adressen 10.1.1.1 bis 10.1.1.5 und
202.0.75.17 bis 202.0.75.20 belegen.</para>
<para>Die folgenden Einträge konfigurieren den Adapter
entsprechend dem Beispiel:</para>
<programlisting> ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting>
</sect1>
<sect1 id="configtuning-configfiles">
<title>Konfigurationsdateien</title>
<sect2>
<title><filename>/etc</filename> Layout</title>
<para>Konfigurationsdateien finden sich in einigen Verzeichnissen
unter anderem in:</para>
<informaltable frame="none">
<tgroup cols="2">
<tbody>
<row>
<entry><filename>/etc</filename></entry>
<entry>Enthält generelle Konfigurationsinformationen,
die Daten hier sind systemspezifisch.</entry>
</row>
<row>
<entry><filename>/etc/defaults</filename></entry>
<entry>Default Versionen der Konfigurationsdateien.</entry>
</row>
<row>
<entry><filename>/etc/mail</filename></entry>
<entry>Enthält die &man.sendmail.8; Konfiguration
und weitere MTA Konfigurationsdateien.</entry>
</row>
<row>
<entry><filename>/etc/ppp</filename></entry>
<entry>Hier findet sich die Konfiguration für
die User- und Kernel-ppp Programme.</entry>
</row>
<row>
<entry><filename>/etc/namedb</filename></entry>
<entry>Das Vorgabeverzeichnis, in dem Daten von
&man.named.8; gehalten werden. Normalerweise
steht hier die Bootdatei, die mittels einer Direktive
auf weitere Daten in <filename>/var/db</filename>
verweist.</entry>
</row>
<row>
<entry><filename>/usr/local/etc</filename></entry>
<entry>Installierte Applikationen legen hier ihre
Konfigurationsdateien ab. Dieses Verzeichnis kann
Unterverzeichnisse für bestimmte Applikationen
enthalten.</entry>
</row>
<row>
<entry><filename>/usr/local/etc/rc.d</filename></entry>
<entry>Ort für Start- und Stopskripte installierter
Applikationen.</entry>
</row>
<row>
<entry><filename>/var/db</filename></entry>
<entry>Beständige systemspezifische Daten z.B.
&man.named.8; Zonendaten, Datenbanken usw.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2>
<title>Hostnamen</title>
<indexterm><primary>hostname</primary></indexterm>
<indexterm><primary>DNS</primary></indexterm>
<sect3>
<title><filename>/etc/resolv.conf</filename></title>
<indexterm><primary><filename>resolv.conf</filename></primary></indexterm>
<para>Wie der FreeBSD Resolver auf das Internet Domain Name
System (DNS) zugreift, wird in <filename>/etc/resolv.conf</filename>
festgelegt.</para>
<para>Die gebräuchlichsten Einträge in
<filename>/etc/resolv.conf</filename> sind:</para>
<informaltable frame="none">
<tgroup cols="2">
<tbody>
<row>
<entry><literal>nameserver</literal></entry>
<entry>Die IP-Adresse eines Nameservers, den
der Resolver abfragen soll. Bis zu drei Server werden
in der Reihenfolge, in der sie aufgezählt
sind, abgefragt.
</row>
<row>
<entry><literal>search</literal></entry>
<entry>Suchliste mit Domain-Namen zum Auflösen von
Hostnamen. Die Liste wird normalerweise durch den
Domain-Teil des lokalen Hostnamens festgelegt.
</row>
<row>
<entry><literal>domain</literal></entry>
<entry>Der lokale Domain-Name</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Beispiel für eine typische
<filename>resolv.conf</filename>:</para>
<programlisting>search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30
</programlisting>
<para>Wenn Sie DHCP benutzen, überschreibt &man.dhclient.8;
für gewöhnlich <filename>resolv.conf</filename>
mit den Informationen vom DHCP-Server.</para>
</sect3>
<sect3>
<title><filename>/etc/hosts</filename></title>
<indexterm><primary>hosts</primary></indexterm>
<para><filename>/etc/hosts</filename> ist eine einfache textbasierte
Datenbank, die aus alten Internetzeiten stammt. Zusammen
mit DNS und NIS stellt sie eine Abbildung zwischen Namen und
IP-Adressen zur Verfügung. Anstatt &man.named.8;
zu konfigurieren, können hier lokale Rechner, die über
ein LAN verbunden sind, eingetragen werden. Lokale Einträge
für gebräuchliche Internet-Adressen in
<filename>/etc/hosts</filename> verhindern die Abfrage eines
externen Servers und beschleunigen die Namensauflösung.</para>
<programlisting># $FreeBSD$
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1 localhost localhost.my.domain myname.my.domain
127.0.0.1 localhost localhost.my.domain myname.my.domain
#
# Imaginary network.
#10.0.0.2 myname.my.domain myname
#10.0.0.3 myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
# 10.0.0.0 - 10.255.255.255
# 172.16.0.0 - 172.31.255.255
# 192.168.0.0 - 192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers. PLEASE PLEASE PLEASE do not try
# to invent your own network numbers but instead get one from your
# network provider (if any) or from the Internet Registry (ftp to
# rs.internic.net, directory `/templates').
#</programlisting>
<para><filename>/etc/hosts</filename> hat ein einfaches Format:</para>
<programlisting>[Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ...</programlisting>
<para>Zum Beispiel:</para>
<programlisting>10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2</programlisting>
<para>Weitere Informationen entnehmen Sie bitte &man.hosts.5;.</para>
</sect3>
</sect2>
<sect2>
<title>Konfiguration von Logdateien</title>
<indexterm><primary>Logdateien</primary></indexterm>
<sect3>
<title><filename>syslog.conf</filename></title>
<indexterm><primary>syslog.conf</primary></indexterm>
<para><filename>syslog.conf</filename> ist die Konfigurationsdatei
von &man.syslogd.8;. Sie legt fest, welche <command>syslog</command>
Meldungen in welche Logdateien geschrieben werden.</para>
<programlisting># $FreeBSD$
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.* /var/log/all.log
# uncomment this to enable logging to a remote log host named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.log</programlisting>
<para>Weitere Informationen enthält &man.syslog.conf.5;.</para>
</sect3>
<sect3>
<title><filename>newsyslog.conf</filename></title>
<indexterm><primary>newsyslog.conf</primary></indexterm>
<para>Die Konfigurationsdatei für &man.newsyslog.8;, das
normalerweise von &man.cron.8; aufgerufen wird, ist
<filename>newsyslog.conf</filename>. &man.newsyslog.8;
stellt fest, ob Logdateien archiviert oder verschoben
werden müssen. So wird <filename>logfile</filename>
nach <filename>logfile.0</filename> geschoben und
<filename>logfile.0</filename> nach <filename>logfile.1</filename>
usw. Zudem können Logdateien mit &man.gzip.1;
komprimiert werden. Die Namen der Logdateien sind dann
<filename>logfile.0.gz</filename>, <filename>logfile.1.gz</filename>
usw.</para>
<para><filename>newsyslog.conf</filename> legt fest, welche
Logdateien bearbeitet werden, wie viele Dateien behalten werden
und wann die Dateien angefaßt werden. Logdateien
können auf Basis ihrer Größe oder zu
einem gewissen Zeitpunkt archiviert bzw. umbenannt werden.</para>
<programlisting># configuration file for newsyslog
# $FreeBSD$
#
# filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron 600 3 100 * Z
/var/log/amd.log 644 7 100 * Z
/var/log/kerberos.log 644 7 100 * Z
/var/log/lpd-errs 644 7 100 * Z
/var/log/maillog 644 7 * @T00 Z
/var/log/sendmail.st 644 10 * 168 B
/var/log/messages 644 5 100 * Z
/var/log/all.log 600 7 * @T00 Z
/var/log/slip.log 600 3 100 * Z
/var/log/ppp.log 600 3 100 * Z
/var/log/security 600 10 100 * Z
/var/log/wtmp 644 3 * @01T05 B
/var/log/daily.log 640 7 * @T00 Z
/var/log/weekly.log 640 5 1 $W6D0 Z
/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 640 5 100 * Z</programlisting>
<para>Um mehr zu erfahren, lesen Sie bitte &man.newsyslog.8;.</para>
</sect3>
</sect2>
<sect2>
<title><filename>sysctl.conf</filename></title>
<indexterm><primary>sysctl.conf</primary></indexterm>
<indexterm><primary>sysctl</primary></indexterm>
<para><filename>sysctl.conf</filename> sieht ähnlich
wie <filename>rc.conf</filename> aus. Werte werden in der
Form <literal>Variable=Wert</literal> gesetzt.
Die angegebenen Werte werden
gesetzt, nachdem sich das System im Multi-User Modus befindet,
das heißt nicht alle Werte können in
diesem Modus gesetzt werden.</para>
<para>In der folgenden <filename>sysctl.conf</filename> wird das
Loggen von fatalen Signalen abgestellt und Linux Programmen
wird klar gemacht, daß sie in Wirklichkeit unter
FreeBSD laufen.</para>
<programlisting>kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE</programlisting>
</sect2>
</sect1>
<sect1 id="configtuning-sysctl">
<title>Einstellungen mit sysctl</title>
<indexterm><primary>sysctl</primary></indexterm>
<indexterm><primary>Einstellungen mit sysctl</primary></indexterm>
<para>Mit &man.sysctl.8; können Sie Änderungen an
einem laufenden FreeBSD System vornehmen. Unter anderem
können Optionen des TCP/IP-Stacks oder des
virtuellen Speichermanagements verändert werden. Unter
der Hand eines erfahrenen Systemadministrators kann dies
die Systemperformance erheblich verbessern. Über 500
Variablen können mit &man.sysctl.8; gelesen und gesetzt
werden.</para>
<para>Der Hauptzweck von &man.sysctl.8; besteht darin, Systemeinstellungen
zu lesen und zu verändern.</para>
<para>Alle auslesbaren Variablen werden wie folgt angezeigt:</para>
<screen>&prompt.user; <userinput>sysctl -a</userinput></screen>
<para>Sie können auch eine spezielle Variable, z.B.
<varname>kern.maxproc</varname> lesen:</para>
<screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
kern.maxproc: 1044</screen>
<para>Um eine Variable zu setzen, benutzen Sie die Syntax
<replaceable>Variable</replaceable>=
<replaceable>Wert</replaceable>:</para>
<screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
kern.maxfiles: 2088 -> 5000</screen>
<para>Mit sysctl können Sie Strings, Zahlen oder
Boolean-Werte setzen. Bei Boolean-Werten setzen sie <literal>1</literal>
für wahr und <literal>0</literal> für falsch.</para>
</sect1>
<sect1 id="configtuning-disk">
<title>Tuning von Laufwerken</title>
<sect2>
<title>Sysctl Variablen</title>
<sect3>
<title><varname>vfs.vmiodirenable</varname></title>
<indexterm>
<primary><varname>vfs.vmiodirenable</varname></primary>
</indexterm>
<para>Die Variable <varname>vfs.vmiodirenable</varname> besitzt
in der Voreinstellung den Wert 0 (in Kürze wird sie
auf den Wert 1 gesetzt). Die Variable kann auf den Wert
0 (ausgeschaltet) oder 1 (angeschaltet) gesetzt werden. Sie
kontrolliert, wie Verzeichnisse vom System zwischengespeichert
werden. Die meisten Verzeichnisse sind klein und nutzen
nur ein einzelnes Fragment, typischerweise 1K, im Dateisystem.
Im Buffer-Cache verbrauchen sie mit 512 Bytes noch weniger
Platz. In der Voreinstellung wird der Buffer-Cache nur
eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch
wenn das System über sehr viel Speicher verfügt.
Wenn Sie diese Variable aktivieren, kann der Buffer-Cache den
VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern.
Der ganze Speicher steht damit zum Zwischenspeichern von
Verzeichnissen zur Verfügung. Der Nachteil bei dieser
Vorgehensweise ist, daß zum Zwischenspeichern eines
Verzeichnisses mindestens eine physikalische Seite im Speicher,
die normalerweise 4K groß ist, anstelle von 512 Bytes
gebraucht wird. Wir empfehlen diese Option zu aktivieren,
wenn Sie Dienste zur Verfügung stellen, die eine
große Zahl von Dateien manipulieren. Beispiele für
solche Dienste sind Web-Caches, große Mail-Systeme oder
Netnews. Trotz des verschwendeten Speichers vermindert
das Aktivieren dieser Variable in aller Regel nicht die
Leistung des Systems, obwohl Sie das nachprüfen sollten.</para>
</sect3>
<sect3>
<title><varname>hw.ata.wc</varname></title>
<indexterm>
<primary><varname>hw.ata.wc</varname></primary>
</indexterm>
<para>In FreeBSD 4.3 wurde versucht, den IDE Schreib-Zwischenspeicher
abzustellen. Obwohl dies die Bandbreite zum Schreiben auf
IDE-Platten verringerte, wurde es aus Gründen der
Datenkonsistenz als notwenig angesehen. Der Kern des
Problems ist, daß IDE-Platten keine zuverlässige
Aussage über das Ende eines Schreibvorgangs treffen.
Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten
nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann
sogar passieren, daß das Schreiben mancher Blöcke
im Fall von starker Plattenaktivität auf unbefristete
Zeit verzögert wird. Ein Absturz oder Stromausfall
zu dieser Zeit kann die Dateisysteme erheblich beschädigen.
Wir entschieden uns daher für die sichere Variante
und stellten den Schreib-Zwischenspeicher ab. Leider war
damit auch ein großer Leistungsverlust verbunden, so
daß wir klein beigeben mußten und die Variable
nach dem Release wieder aktiviert haben. Sie sollten den
Wert der Variable <varname>hw.ata.wc</varname> auf Ihrem
System überprüfen. Wenn der Schreib-Zwischenspeicher
abgestellt ist, können Sie ihn aktivieren, indem Sie die
Variable auf den Wert 1 setzen. Dies muß zum Zeitpunkt
des Systemstarts im Boot-Loader geschehen. Eine Änderung
der Variable, nachdem der Kernel gestartet ist, hat keine
Auswirkungen.</para>
<para>Weitere Informationen finden Sie in &man.ata.4;.</para>
</sect3>
</sect2>
<sect2>
<title>Soft Updates</title>
<indexterm><primary>Soft Updates</primary></indexterm>
<indexterm><primary>tunefs</primary></indexterm>
<para>Mit &man.tunefs.8; lassen sich Feineinstellungen an
Dateisystemen vornehmen. Das Programm hat verschiedene Optionen,
von denen hier nur Soft Updates betrachtet werden. Soft Updates
werden wie folgt ein- und ausgeschaltet:</para>
<screen>&prompt.root; tunefs -n enable /filesystem
&prompt.root; tunefs -n disable /filesystem</screen>
<para>Ein einghängtes Dateisystem kann nicht mit &man.tunefs.8;
modifiziert werden. Soft Updates werden am besten im Single-User
Modus aktiviert, bevor Partitionen eingehangen sind.</para>
<para>Durch Einsatz eines Zwischenspeichers wird die Performance
im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen
von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen
Dateisystemen zu aktivieren. Allerdings sollten Sie sich über
die zwei Nachteile von Soft Updates bewußt sein:
Erstens garantieren Soft Updates zwar die Konsistenz der Daten
im Fall eines Absturzes, aber es kann leicht passieren, daß
das Dateisystem über mehrere Sekunden oder gar eine Minute
nicht synchronisiert wurde. Im Fall eines Absturzes verlieren
Sie mit Soft Updates unter Umständen mehr Daten als ohne.
Zweitens verzögern Soft Updates die Freigabe von
Datenblöcken. Eine größere Aktualisierung
eines fast vollen Dateisystems, wie dem root-Dateisystem,
z.B. während eines <command>make installworld</command>,
kann das Dateisystem vollaufen lassen. Dadurch würde
die Aktualisierung fehlschlagen.</para>
</sect2>
</sect1>
<sect1 id="configtuning-kernel-limits">
<title>Einstellungen von Kernel Limits</title>
<indexterm><primary>Einstellungen von Kernel Limits</primary></indexterm>
<sect2>
<title>Datei und Prozeß Limits</title>
<sect3>
<title><varname>kern.maxfiles</varname></title>
<indexterm>
<primary><varname>kern.maxfiles</varname></primary>
</indexterm>
<para>Abhängig von den Anforderungen Ihres Systems
kann <varname>kern.maxfiles</varname> erhöht oder
erniedrigt werden. Die Variable legt die maximale
Zahl von Dateideskriptoren auf Ihrem System fest. Wenn
die Dateideskriptoren aufgebraucht sind, werden Sie
die Meldung <literal>file: table is full</literal>
wiederholt im Puffer für Systemmeldungen sehen. Den
Inhalt des Puffers können Sie sich mit <command>dmesg</command>
anzeigen lassen.</para>
<para>Jede offene Datei, jedes Socket und jede FIFO verbraucht
einen Dateideskriptor. Auf <quote>dicken</quote> Produktionsservern
können leicht Tausende Dateideskriptoren benötigt
werden, abhängig von der Art und Zahl der gleichzeitig
laufenden Dienste.</para>
<para>Die Voreinstellung von <varname>kern.maxfile</varname>
wird von <option>maxusers</option> aus Ihrer Kernelkonfiguration
bestimmt. <varname>kern.maxfiles</varname> wächst
proportional mit dem Wert von <option>maxusers</option>.
Wenn Sie einen angepaßten Kernel kompilieren, empfiehlt es sich
diese Option entsprechend der maximalen Benutzerzahl Ihres
Systems einzustellen. Obwohl auf einer Produktionsmaschine
vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind,
können die benötigten Ressourcen ähnlich denen
eines großen Webservers sein.</para>
</sect3>
</sect2>
<sect2>
<title>Netzwerk Limits</title>
<para>Die Kerneloption <varname>NMBCLUSTERS</varname> schreibt
die Anzahl der Netzwerkpuffer (MBUFs) fest, die das System besitzt.
Eine zu geringe Zahl MBUFs auf einem Server mit viel Netzwerkverkehr
verringert die Leistung von FreeBSD. Jeder MBUF Cluster nimmt
ungefähr 2K Speicher in Anspruch, so daß ein Wert
von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer
im System reserviert. Wieviele Cluster benötigt werden,
läßt sich durch eine einfache Berechnung herausfinden.
Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige
Verbindungen servieren soll und jede der Verbindungen je einen
16 K großen Puffer zum Senden und Empfangen braucht, brauchen
Sie ungefähr 32 MB Speicher für Netzwerkpuffer. Als
Daumenregel multiplizieren Sie diese Zahl mit 2, so daß sich
für <varname>NMBCLUSTERS</varname> der Wert
32MBx2 = 64MB/2K = 32768 ergibt.</para>
</sect2>
</sect1>
</chapter>
<!--
Local Variables:
mode: sgml
sgml-declaration: "../chapter.decl"
sgml-indent-data: t
sgml-omittag: nil
sgml-always-quote-attributes: t
sgml-parent-document: ("../book.sgml" "part" "chapter")
End:
-->
|