电脑技术学习

FreeBSD handbook中文版 6 配置与调整

dn001
目录
6;配置与调整
6.1;概要
6.2;初步配置
6.3;核心配置
6.4;应用程序配置
6.5;启动服务
6.6;虚拟主机
6.7;配置文件
6.8;用sysctl;调整
6.9;调整磁盘
6.10;调整内核限制
=============================================================

(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com);
6.1;概要
FreeBSD;系统管理配置的情况。这章也会描述一些用来调整FreeBSD;系统性能的参数。
.;
.;
.;
.;
.;
.;
.;
.;
.;
6.2;初步配置
6.2.1;分区设计
6.2.1.1;基础分区
磁道传输数据要比从内磁道传输数据来得快,这一点很重要。记住这点,你可以把比较小的,;
FreeBSD;使用手册
II.;系统管理
第6;章配置与调整
正确地配置系统能充分地减少以后维护和升级系统所需的工作量。这章将描述一些
读完这章你将了解到这些:;
为什么和如何在你的硬盘上分配空间,规划和放置文件系统和交换分区。
rc.conf;配置文件和/usr/local/etc/rc.d启动系统的基础。
如何在你网络设备上分配虚拟主机。
如何在/etc上使用不同的配置。
如何使用sysctl;变量调节FreeBSD。
如何调整磁盘的性能和修改内核的限制。
在阅读这章之前你应当:;
了解UNIX;和FreeBSD;的基础知识(第3;章)。
熟悉如何与FreeBSD;的源文件保持同步。
内核配置和编译的基础(第9;章)。
当使用disklabel;或sysinstall;命令划分你的文件系统时,需要记住硬盘驱动器从外
第1;页FreeBSD;使用手册
经常访问的如root;和swap;放在靠近外磁道的地方。可以把比较大的分区如/usr放在内磁
道上。这样做,按照相同的顺序创建分区:root,swap,/var,/usr。
你的/var分区的大小能反映你机器的使用状况。/var主要用来存放:邮箱,打印spool;和
日志文件。邮箱和日志文件可能会达到一个无法预料的数量,这主要取决于在你的系统上有
多少用户和你的日志文件可以保存多长时间。如果你想要运行一个邮件服务器,一个超过G;
数量级的/var分区是必要的。另外,;/var/tmp要足够大,以便于能够包含足够的你可能会
添加的packages。
/usr分区保存了支持系统所需的文件和一个叫做/usr/local的用来保存从ports;安装
文件的子目录。如果你不使用ports;也不希望把系统源代码保存在机器上,你可以节省超过
1G;的/usr分区。如果你安装许多ports,我们建议至少要为/usr保留2G;的空间,如果你也
想把系统源代码保存在你的机器上,我们建议为/usr保留3G;的空间。不要低估了这个分区
所需要的空间的大小,它可能会不断增加,让你非常吃惊!当你调整分区的大小时,记住你
的系统可能会不断增加对空间的需求。
注意:一些使用sysinstall;的自动默认分区的用户会发现,一段时间以后他们的root;
或/var分区会变得很小。建议尽可能把分区分的大一些。
6.2.1.2;Swap;分区
通常你的交换分区应当是主内存的两倍。例如,如果机器有128;M;的内存,交换分区应
当是256MB。带有比较少内存的机器可以通过增加交换分区来提高机器的性能。我们并不建
议你配置少于256MB;的SWAP;分区,你应当记住将来随着内存的扩充,你的swap;分区也要相
应地扩大。当swap;分区至少是主内存的两倍时,内核的VM;页面调度程序将被用来调节系统
到最佳状态。如果你给你的机器添加更多的内存,配置太少的swap,会导致在VM;页面扫描
代码时变得效率低下。
最后,在配置有很多SCSI(或IDE)磁盘的较大系统中,我们强烈建议你给每一个硬盘
都创建一个SWAP。Swap;分区应当拥有同样的大小。内核可能会处理成任意大小,但内部数
据结构则是最大swap;分区的4;倍。保持swap;分区同样的大小,可以允许内核最佳地调度
swap;空间来访问磁盘。不要为此过分担心,交换空间正是UNIX;系统的长处。
6.2.1.3;为什么要分区?;
第2;页FreeBSD;使用手册
为什么要分区?为什么不创建一个大的根分区?我并不介意大小问题!有很多原因证实
这不是一个好主意。首先,每个分区有不同的操作特性,把它们分开可以允许文件系统去自
动调节自己以适应那些特性。例如,根和/usr分区通常是读得比较频繁,写得比较少,而
象/var和/var/tmp则读写都比较频繁。
6.3;核心配置
负责系统配置信息的主要是/etc/rc.conf。这个文件包含了配置文件很宽的范围。在系
统启动时主要被用来配置系统。它的名字直接表明了这点;配置信息一般是rc*这样类型的
文件。一个系统管理员应当在rc.conf;文件中建立一个记录来修改/etc/defaults/rc.conf;
的默认配置。默认文件不应当被逐字地拷到/etc。所有系统的任何变化将被记录在rc.conf;
文件中。由于rc.conf;可以被sh;命令打开阅读,所以完成这点很简单。例如:;
rc.conf:;
·;rc.conf.site;
·;hostname=”node15.webcompany.com”;
·;network_interfaces=”fxp0;lo0”;
·;ifconfig_fxp0=”inet;10.1.1.1”;
rc.conf.site:;
·;defaultrouter=”10.1.1.254”;
·;saver=”daemon”;
·;blanktime=”100”;
Rc.conf.site;文件会被分发给每一个使用eg.rsync;的系统,而rc.conf;文件仍保持独立。
通过使用sysinstall;或make;world;来升级系统不会覆盖rc.conf;文件,所以系统配置信
息不会被丢失。
第3;页FreeBSD;使用手册
6.4;应用程序配置
典型的,已安装的应用程序有它自己的配置文件,有它自己的语法。这些文件与基本系
统相分离是很重要的,以至于它们能被package;管理工具很好地定位和管理。另外,这些文
件被安装在/usr/local/etc中。一个应用程序有许多配置文件,一个子目录将被创建以支
持它们。
通常,当一个port;或package;被安装时,默认的配置文件也会被安装。这些通常可以
通过.default;后缀来辨别。如果不存在应用程序的配置文件,他们会通过拷贝.default;文
件来创建。例如,;这儿是/usr/local/etc/apache:;
·;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;
可以看到只有srm.conf;文件已发生了变化。一个后来的apache;的升级不会修改这个变
化的文件。
6.5;启动服务
对一个系统来说,支持许多服务是很普通的。这些可能是用不同的形式来启动,每一个
都有不同的长处。
第4;页一个port;或packages;collection;安装软件通常把一个脚本放在/usr/local/etc/rc.d中,;
它可以在系统启动的时候被自动调用,在系统关闭的时候自动停止。这是一种我们推荐使用
的启动服务的方法。这些脚本会作为安装package;的一部分被注册,当package;被删除的时
候它也会被删除。在/usr/local/etc/rc.d中,一个普通的启动脚本是这样的:;
#!/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;
这个脚本随着系统的启动而被呼叫,随着系统的关闭而停止。当一个连接被一个相配的
port;接收到时,一些服务会被inetd;所调用。这个对邮件阅读服务器来说使用比较普遍
(POP,IMAP;等)。这些服务可以通过编辑/etc/inetd.conf文件来启用。可以看看inetd;
命令的说明就可以了。
FreeBSD;使用手册
第5;页FreeBSD;使用手册
一些额外的系统功能不太可能会被隐藏在/etc/rc.conf中。这些通常能够使用命令来
调用它们。就象在FreeBSD3.1;中,没有默认的/etc/rc.local。如果它被系统管理员创建,;
它将不可能以普通的形式得到尊重。注意rc.local;通常被作为是最后一个访问的记录;如
果有一个比较好的地方能启动一个服务,就是在那儿。
注意:不要把任何命令都放在/etc/rc.conf;中。要启动后台程序,或在启动时运行任
何命令,可以在/usr/local/etc/rc.d;中添加一行脚本。
使用cron;程序来启动系统服务也是可以的。这种方法有很多优势,不仅仅是cron;能运
行这些进程,这些服务也可以被没有root;权限的用户来启动和操作。
这利用了cron;的一个非正式文件的特性;时钟的形式可能会被“@reboot”这种形式所
取代,当系统启动以后,cron;程序被很快执行,这将导致工作暂停运行。
6.6;虚拟主机
FreeBSD;的一个非常普通的应用是虚拟主机功能,一台服务器可以虚拟成多台服务器来
提供网络服务。这只需要分配多个网络地址给一个简单的接口就可以实现。
一个给定的网络接口有一个“real”地址,也会有很多“alias”地址。这些别名通常
被添加到/etc/rc.conf;中。
一个接口“fxp0”的别名记录是这样的:;
ifconfig_fxp0_alias0=“inet;xxx.xxx.xxx.xxx;netmask;xxx.xxx.xxx.xxx”;
注意:别名记录必须用alias0;启动,然后按顺序向上处理,如_alias1,_alias2;等。
配置进程将在第一个丢失的数字时停止。别名的子网掩码的计算是很重要的,但幸运的是它
非常简单。对于一个给定的接口,必须有一个正确反映网络的子网掩码的地址。
例如:假设fxp0;接口连接到两个网络,10.1.1.0;的子网掩码是255.255.255.0,而
202.0.75.16;的子网掩码是255.255.255.240。我们要求系统显示从10.1.1.1;到10.1.1.5;
和202.0.75.17;到202.0.75.20。
要正确配置适配器可以这样做:;
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”;
第6;页FreeBSD;使用手册
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”;
6.7;配置文件
6.7.1;/etc;规划
在配置信息中有很多的目录。这些包括:;
一般的系统配置信息:这儿的数据是系统指定的。/etc;
系统配置文件的默认版本。/etc/defaults;
额外的sendmail;配置,其他MTA;配置文件。/etc/mail;
/etc/ppp;programs.user-和kernel-ppp;程序的配置。
/etc/namedb;Bind;数据的默认定位。通常启动文件是定位在这儿,在/var/db;中
参考其他数据的一个指示。
安装应用程序的配置文件。可以参考每个应用程序的子目录。/usr/local/etc;
/usr/local/etc/rc.d;安装应用程序的启动/停止的脚本。
稳定的系统指定的数据文件:bind;区域文件,数据库文件等等。/var/db;
6.7.2;主机名
6.7.2.1;/etc/resolv.conf;
/etc/resolv.conf;描述了FreeBSD;如何访问internet;的域名系统(DNS)。最普通的
resolv.conf;的记录是:;
nameserver;要查询的域名服务器的IP;地址。服务器按照顺序查询。
搜索域名的列表。这通常是由本地的域名决定的。search;
本地域名。domain;
第7;页FreeBSD;使用手册
一个典型的resolv.conf:;
search;foobar.com;
nameserver;147.11.1.11;
nameserver;147.11.100.30;
Dhclient;通常会把DHCP;服务器接收到的信息重写resolv.conf。
6.7.2.2;/etc/hosts;
/etc/hosts;是一个文本数据库。它是用来联合DNS;和NIS;给IP;地址的影射表提供名字。
本地的电脑通过一个LAN;进行连接,可能会作为一个简单的命名目的而放在这儿,以代替设
置一个名称服务器。另外,/etc/hosts;能被用来提供一个本地internet;名称的记录,减少
搜索普通访问名称的需求。
#;$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;
#;
第8;页FreeBSD;使用手册
#;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’).;
#;
/etc/hosts;的简单格式:;
[Internet;address];[offical;hostname];[alias1];[alias2];...;
例如:;
10.0.0.1;myRealHostname.foobar.com;myRealHostname;foobar1;foobar2;
第9;页FreeBSD;使用手册
6.7.3;日志文件配置
6.7.3.1;syslog.conf;
Syslog.conf;是syslogd;程序的配置文件。它指出记录到日志文件的syslog;信息的类
型。
#;$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;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;
第10;页FreeBSD;使用手册
#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;loghost;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;
6.7.3.2;newsyslog.conf;
Newsyslog.conf;是newsyslog;程序的配置文件。一个被cron;newsyslog;安排来运行的
程序决定了什么时候日志文件要求重新存档或整理。Logfile;会被改为logfile.1,;
logfile.1;会被改为logfile.2;等等。另外,日志文件会用gzip;格式进行存档。它们是这
样命名的:logfiel.0.gz,logfile.1.gz;等等。
Newsyslog.conf;指出了哪个文件需要被管理,有多少需要被保存,什么时候他们会被
调用。当他们达到一定大小或到一个适当的周期时,日志文件需要被重新整理。
#;configuration;file;for;newsyslog;
#;$FreeBSD$;
#;
第11;页FreeBSD;使用手册
#;logfilename;[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;
6.7.4;sysctl.conf;
第12;页FreeBSD;使用手册
Sysctl.conf;看起来象rc.conf。它的值以这种形式来设置:variable=value。指定的
值需要在进入多用户模式时才能被设置。在这种模式中不是所有的变量都能被设置。
一个sysctl.conf;关闭引起重大错误产生的日志,然后让linux;程序知道他们真的运行
在FreeBSD;下面。
kern.logsigexit=0;#;Do;not;log;fatal;signal;exits;(e.g.;sig;11);
compat.linux.osname=FreeBSD;
compat.linux.osrelease=4.3-STABLE;
6.8;用sysctl;进行调整
sysctl;是一个允许你对一个运行着的FreeBSD;系统进行修改的接口。这包括许多TCP/IP;
堆栈和虚拟内存系统的高级选项,它通常可以为一个有经验的系统管理员提高系统的性能。
能够使用sysctl;来阅读和设置超过5;百个系统变量。
基于这点,sysctl;起到两个功能:阅读和修改系统设置。去看看所有可读的变量:;
%;sysctl;-a;
阅读一个详细的变量,例如,;kern.maxproc:;
%;sysctl;kern.maxproc;
kern.maxproc:;1044;
设置一个特殊的变量,使用=选项:;
#;sysctl;kern.maxfiles=5000;
kern.maxfiles:;2088;->;5000;
Sysctl;变量的设置通常不是字符,数字,就是布尔类型的。一个布尔类型的树1;代表
yes,0;代表no。
6.9;调整磁盘
6.9.1;Sysctl;变量
6.9.1.1;vfs.vmiodirenable;
第13;页FreeBSD;使用手册
vfs.vmiodirenable;sysctl;变量默认为0(off),也可以被设置成0;或1。很多目录
是比较小,只使用一小片段(典型的:1k),甚至更少(典型的:512;bytes)。然而,当
在默认的模式下操作时,即使你有很多内存,缓存器只缓存一些固定的目录。打开这个
sysctl;可以允许缓存器使用VM;页面缓存来缓存目录。这样的优势是所有的内存都能被缓存
目录所利用。不利的是最小的用来缓存目录的核心内存要大于512;bytes(典型的是:4K)。
如果你运行有大量文件处理的服务时,我们建议把这个选项打开。这样的服务包括web;缓存、
大邮件系统和新闻系统。打开这项服务通常不会降低系统的性能,只是会浪费一点内存,但
你要仔细检查一下。
6.9.1.2;hw.ata.wc;
FreeBSD;通常把IDE;写入缓存关闭掉。这可以减少写入磁盘时需要的带宽。基本上,当
写入完成后,IDE;基本上就没事了。由于IDE;写入缓存被打开,IDE;驱动器将不再按顺序把
数据写入到硬盘中。当磁盘处于比较大的负荷时,它们通常能缓冲写入的数据。不幸的是,;
这样会丢失很多性能,最好还是改回默认值。你应当通过观察hw.ata.wc;sysctl;变量来检
查你的系统的默认情况。如果IDE;的写入缓存被关闭,你可以在内核变量中把它改回1;就可
以把它打开。这必须在启动时从引导程序过程中进行。在内核启动之后再这样做就没有用了。
6.9.2;SoftUpdates;
Tunefs;能被用来很好地调整文件系统。可以这样做:;
#;tunefs;-n;enable;/filesystem;
#;tunefs;-n;disable;/filesystem;
一个文件系统当被挂上的时候不能使用tunefs;进行修改。在单用户模式下,在所有分
区都没有被挂上之前,起用SoftUpdates;是最佳时机。
通过使用内存缓冲器,SoftUpdates;能够极大地提高文件的性能,只要是文件创建和删
除。我们建议在你的所有文件系统上都打开SoftUpdates。你应当清楚两点:第一,;
SoftUpdates;能在系统出现错误时保证系统的一致性,但在升级了物理磁盘后可能只需要几
秒钟。如果你的系统崩溃了,你可能会丢失很多的工作。第二,SoftUpdates;可以推迟文件
系统块的释放时间。如果你有一个接近满了的文件系统,对它作一个主升级,make;
installworld,可能会超出运行空间,从而引起升级失败。
第14;页FreeBSD;使用手册
6.10;调整内核限制
6.10.1;文件/进程限制
6.10.1.1;kern.maxfiles;
kern.maxfiles;可以根据你系统的要求加大或减小。这个变量指出了在你系统上描述的
最大数量文件。可以用dmesg;来显示文件描述符的情况。
每一个打开的文件,套接字,或fifo;使用的文件描述符,都依赖于当前运行的服务的
种类和数量。
kern.maxfile;的默认值可以在你的内核配置中通过maxusers;选项来指定。
kern.maxfiles;可以按比例地增加maxuser;的值。
6.10.2;网络限制
NMBCLUSTERS;内核配置选项指出了系统可用的网络mbufs;的数量。一个具有大量负载的
服务器如果MBUFs;比较少,就会影响FreeBSD;的性能。每一个cluster;大概需要2K;的内存,;
所以1024;个cluster;就需要保留2MB;的内存给网络缓存。如果你的服务器超过一个并发连
接,那每个连接需要吃掉一个16k;的接收缓存和一个16K;的发送缓存,你需要提供32MB;的
内存给网络缓存以确保web;服务器的稳定。一个最笨的计算方法是乘以2,所以
32MBx2=64MB/2K;=32768。
第15;页

标签: