FreeBSD handbook中文版 6 配置与调整 (1)
目录
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.2Swap分区
通常你的交换分区应当是主内存的两倍。例如,假如机器有128M的内存,交换分区应
当是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=”fxp0lo0”
·ifconfig_fxp0=”inet10.1.1.1”
rc.conf.site:
·defaultrouter=”10.1.1.254”
·saver=”daemon”
·blanktime=”100”
Rc.conf.site文件会被分发给每一个使用eg.rsync的系统,而rc.conf文件仍保持独立。
通过使用sysinstall或makeworld来升级系统不会覆盖rc.conf文件,所以系统配置信
息不会被丢失。
第3页FreeBSD使用手册
6.4应用程序配置
典型的,已安装的应用程序有它自己的配置文件,有它自己的语法。这些文件与基本系
统相分离是很重要的,以至于它们能被package治理工具很好地定位和治理。另外,这些文
件被安装在/usr/local/etc中。一个应用程序有许多配置文件,一个子目录将被创建以支
持它们。
通常,当一个port或package被安装时,默认的配置文件也会被安装。这些通常可以
通过.default后缀来辨别。假如不存在应用程序的配置文件,他们会通过拷贝.default文
件来创建。例如,这儿是/usr/local/etc/apache:
·rw-r—r--1rootwheel2184May201998access.conf
·rw-r—r--1rootwheel2184May201998access.conf.default
·rw-r—r--1rootwheel9555May201998httpd.conf
·rw-r—r--1rootwheel9555May201998httpd.conf.default
·rw-r—r--1rootwheel12205May201998magic
·rw-r—r--1rootwheel12205May201998magic.default
·rw-r—r--1rootwheel2700May201998mime.types
·rw-r—r--1rootwheel2700May201998mime.types.default
·rw-r—r--1rootwheel7980May201998srm.conf
·rw-r—r--1rootwheel7933May201998srm.conf.default
可以看到只有srm.conf文件已发生了变化。一个后来的apache的升级不会修改这个变
化的文件。
6.5启动服务
对一个系统来说,支持许多服务是很普通的。这些可能是用不同的形式来启动,每一个
都有不同的优点。
第4页一个port或packagescollection安装软件通常把一个脚本放在/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}”%26gt;%26amp;2
exit64
;;
esac
exit0
这个脚本随着系统的启动而被呼叫,随着系统的关闭而停止。当一个连接被一个相配的
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=“inetxxx.xxx.xxx.xxxnetmaskxxx.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=”inet10.1.1.1netmask255.255.255.0”
ifconfig_fxp0_alias0=”inet10.1.1.2netmask255.255.255.255”
第6页FreeBSD使用手册
ifconfig_fxp0_alias1=”inet10.1.1.3netmask255.255.255.255”
ifconfig_fxp0_alias2=”inet10.1.1.4netmask255.255.255.255”
ifconfig_fxp0_alias3=”inet10.1.1.5netmask255.255.255.255”
ifconfig_fxp0_alias4=”inet202.0.75.17netmask255.255.255.240”
ifconfig_fxp0_alias5=”inet202.0.75.18netmask255.255.255.255”
ifconfig_fxp0_alias6=”inet202.0.75.19netmask255.255.255.255”
ifconfig_fxp0_alias7=”inet202.0.75.20netmask255.255.255.255”
6.7配置文件
6.7.1/etc规划
在配置信息中有很多的目录。这些包括
一般的系统配置信息这儿的数据是系统指定的。/etc
系统配置文件的默认版本。/etc/defaults
额外的sendmail配置,其他MTA配置文件。/etc/mail
/etc/pppprograms.user-和kernel-ppp程序的配置。
/etc/namedbBind数据的默认定位。通常启动文件是定位在这儿,在/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:
searchfoobar.com
nameserver147.11.1.11
nameserver147.11.100.30
Dhclient通常会把DHCP服务器接收到的信息重写resolv.conf。
6.7.2.2/etc/hosts
/etc/hosts是一个文本数据库。它是用来联合DNS和NIS给IP地址的影射表提供名字。
本地的电脑通过一个LAN进行连接,可能会作为一个简单的命名目的而放在这儿,以代替设
置一个名称服务器。另外,/etc/hosts能被用来提供一个本地internet名称的记录,减少
搜索普通访问名称的需求。
#$FreeBSD$
#
#HostDatabase
#Thisfileshouldcontaintheaddressesandaliases
#forlocalhoststhatsharethisfile.
#InthepresenceofthedomainnameserviceorNIS,thisfilemay
#notbeconsultedatall;see/etc/nsswitch.conffortheresolutionorder.
#
#
::1localhostlocalhost.my.domainmyname.my.domain
127.0.0.1localhostlocalhost.my.domainmyname.my.domain
#
第8页FreeBSD使用手册
#Imaginarynetwork.
#10.0.0.2myname.my.domainmyname
#10.0.0.3myfriend.my.domainmyfriend
#
#AccordingtoRFC1918,youcanusethefollowingIPnetworksfor
#privatenetswhichwillneverbeconnectedtotheInternet:
#
#10.0.0.0-10.255.255.255
#172.16.0.0-172.31.255.255
#192.168.0.0-192.168.255.255
#
#IncaseyouwanttobeabletoconnecttotheInternet,youneed
#realofficialassignednumbers.PLEASEPLEASEPLEASEdonottry
#toinventyourownnetworknumbersbutinsteadgetonefromyour
#networkprovider(ifany)orfromtheInternetRegistry(ftpto
#rs.internic.net,directory‘/templates’).
#
/etc/hosts的简单格式
[Internetaddress][officalhostname][alias1][alias2]...
例如:
10.0.0.1myRealHostname.foobar.commyRealHostnamefoobar1foobar2
第9页FreeBSD使用手册
6.7.3日志文件配置
6.7.3.1syslog.conf
Syslog.conf是syslogd程序的配置文件。它指出记录到日志文件的syslog信息的类
型。
#$FreeBSD$
#
#SpacesAREvalidfieldseparatorsinthisfile.However,
#other*nix-likesystemsstillinsistonusingtabsasfield
#separators.Ifyouaresharingthisfilebetweensystems,you
#maywanttouseonlytabsasfieldseparatorshere.
#Consultthesyslog.confmanpage.
*.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
*.errroot
*.notice;news.errroot
*.alertroot
*.emerg*
#uncommentthistologallwritesto/dev/consoleto/var/log/console.log
第10页FreeBSD使用手册
#console.info/var/log/console.log
#uncommentthistoenableloggingofalllogmessagesto/var/log/all.log
#*.*/var/log/all.log
#uncommentthistoenableloggingtoaremoteloghostnamedloghost
#*.*@loghost
#uncommenttheseifyou’rerunninginn
#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.2newsyslog.conf
Newsyslog.conf是newsyslog程序的配置文件。一个被cronnewsyslog安排来运行的
程序决定了什么时候日志文件要求重新存档或整理。Logfile会被改为logfile.1,
logfile.1会被改为logfile.2等等。另外,日志文件会用gzip格式进行存档。它们是这
样命名的logfiel.0.gz,logfile.1.gz等等。
Newsyslog.conf指出了哪个文件需要被治理,有多少需要被保存,什么时候他们会被
调用。当他们达到一定大小或到一个适当的周期时,日志文件需要被重新整理。
#configurationfilefornewsyslog
#$FreeBSD$
#
第11页FreeBSD使用手册
#logfilename[owner:group]modecountsizewhen[ZB][/pid_file]
[sig_num]
/var/log/cron6003100*Z
/var/log/amd.log6447100*Z
/var/log/kerberos.log6447100*Z
/var/log/lpd-errs6447100*Z
/var/log/maillog6447*@T00Z
/var/log/sendmail.st64410*168B
/var/log/messages6445100*Z
/var/log/all.log6007*@T00Z
/var/log/slip.log6003100*Z
/var/log/ppp.log6003100*Z
/var/log/security60010100*Z
/var/log/wtmp6443*@01T05B
/var/log/daily.log6407*@T00Z
/var/log/weekly.log64051$W6D0Z
/var/log/monthly.log64012*$M1D0Z
/var/log/console.log6405100*Z
6.7.4sysctl.conf
第12页FreeBSD使用手册
Sysctl.conf看起来象rc.conf。它的值以这种形式来设置variable=value。指定的
值需要在进入多用户模式时才能被设置。在这种模式中不是所有的变量都能被设置。
一个sysctl.conf关闭引起重大错误产生的日志,然后让linux程序知道他们真的运行
在FreeBSD下面。
kern.logsigexit=0#Donotlogfatalsignalexits(e.g.sig11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE
6.8用sysctl进行调整
sysctl是一个答应你对一个运行着的FreeBSD系统进行修改的接口。这包括许多TCP/IP
堆栈和虚拟内存系统的高级选项,它通常可以为一个有经验的系统治理员提高系统的性能。
能够使用sysctl来阅读和设置超过5百个系统变量。
基于这点,sysctl起到两个功能阅读和修改系统设置。去看看所有可读的变量
%sysctl-a
阅读一个具体的变量,例如,kern.maxproc:
%sysctlkern.maxproc
kern.maxproc:1044
设置一个非凡的变量,使用=选项
#sysctlkern.maxfiles=5000
kern.maxfiles:2088-%26gt;5000
Sysctl变量的设置通常不是字符,数字,就是布尔类型的。一个布尔类型的树1代表
yes,0代表no。
6.9调整磁盘
6.9.1Sysctl变量
6.9.1.1vfs.vmiodirenable
第13页FreeBSD使用手册
vfs.vmiodirenablesysctl变量默认为0(off),也可以被设置成0或1。很多目录
是比较小,只使用一小片段(典型的1k),甚至更少(典型的512bytes)。然而,当
在默认的模式下操作时,即使你有很多内存,缓存器只缓存一些固定的目录。打开这个
sysctl可以答应缓存器使用VM页面缓存来缓存目录。这样的优势是所有的内存都能被缓存
目录所利用。不利的是最小的用来缓存目录的核心内存要大于512bytes(典型的是4K)。
假如你运行有大量文件处理的服务时,我们建议把这个选项打开。这样的服务包括web缓存、
大邮件系统和新闻系统。打开这项服务通常不会降低系统的性能,只是会浪费一点内存,但
你要仔细检查一下。
6.9.1.2hw.ata.wc
FreeBSD通常把IDE写入缓存关闭掉。这可以减少写入磁盘时需要的带宽。基本上,当
写入完成后,IDE基本上就没事了。由于IDE写入缓存被打开,IDE驱动器将不再按顺序把
数据写入到硬盘中。当磁盘处于比较大的负荷时,它们通常能缓冲写入的数据。不幸的是,
这样会丢失很多性能,最好还是改回默认值。你应当通过观察hw.ata.wcsysctl变量来检
查你的系统的默认情况。假如IDE的写入缓存被关闭,你可以在内核变量中把它改回1就可
以把它打开。这必须在启动时从引导程序过程中进行。在内核启动之后再这样做就没有用了。
6.9.2SoftUpdates
Tunefs能被用来很好地调整文件系统。可以这样做
#tunefs-nenable/filesystem
#tunefs-ndisable/filesystem
一个文件系统当被挂上的时候不能使用tunefs进行修改。在单用户模式下,在所有分
区都没有被挂上之前,起用SoftUpdates是最佳时机。
通过使用内存缓冲器,SoftUpdates能够极大地提高文件的性能,只要是文件创建和删
除。我们建议在你的所有文件系统上都打开SoftUpdates。你应当清楚两点第一,
SoftUpdates能在系统出现错误时保证系统的一致性,但在升级了物理磁盘后可能只需要几
秒钟。假如你的系统崩溃了,你可能会丢失很多的工作。第二,SoftUpdates可以推迟文件
系统块的释放时间。假如你有一个接近满了的文件系统,对它作一个主升级,make
installworld,可能会超出运行空间,从而引起升级失败。
第14页FreeBSD使用手册
6.10调整内核限制
6.10.1文件/进程限制
6.10.1.1kern.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页
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.2Swap分区
通常你的交换分区应当是主内存的两倍。例如,假如机器有128M的内存,交换分区应
当是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=”fxp0lo0”
·ifconfig_fxp0=”inet10.1.1.1”
rc.conf.site:
·defaultrouter=”10.1.1.254”
·saver=”daemon”
·blanktime=”100”
Rc.conf.site文件会被分发给每一个使用eg.rsync的系统,而rc.conf文件仍保持独立。
通过使用sysinstall或makeworld来升级系统不会覆盖rc.conf文件,所以系统配置信
息不会被丢失。
第3页FreeBSD使用手册
6.4应用程序配置
典型的,已安装的应用程序有它自己的配置文件,有它自己的语法。这些文件与基本系
统相分离是很重要的,以至于它们能被package治理工具很好地定位和治理。另外,这些文
件被安装在/usr/local/etc中。一个应用程序有许多配置文件,一个子目录将被创建以支
持它们。
通常,当一个port或package被安装时,默认的配置文件也会被安装。这些通常可以
通过.default后缀来辨别。假如不存在应用程序的配置文件,他们会通过拷贝.default文
件来创建。例如,这儿是/usr/local/etc/apache:
·rw-r—r--1rootwheel2184May201998access.conf
·rw-r—r--1rootwheel2184May201998access.conf.default
·rw-r—r--1rootwheel9555May201998httpd.conf
·rw-r—r--1rootwheel9555May201998httpd.conf.default
·rw-r—r--1rootwheel12205May201998magic
·rw-r—r--1rootwheel12205May201998magic.default
·rw-r—r--1rootwheel2700May201998mime.types
·rw-r—r--1rootwheel2700May201998mime.types.default
·rw-r—r--1rootwheel7980May201998srm.conf
·rw-r—r--1rootwheel7933May201998srm.conf.default
可以看到只有srm.conf文件已发生了变化。一个后来的apache的升级不会修改这个变
化的文件。
6.5启动服务
对一个系统来说,支持许多服务是很普通的。这些可能是用不同的形式来启动,每一个
都有不同的优点。
第4页一个port或packagescollection安装软件通常把一个脚本放在/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}”%26gt;%26amp;2
exit64
;;
esac
exit0
这个脚本随着系统的启动而被呼叫,随着系统的关闭而停止。当一个连接被一个相配的
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=“inetxxx.xxx.xxx.xxxnetmaskxxx.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=”inet10.1.1.1netmask255.255.255.0”
ifconfig_fxp0_alias0=”inet10.1.1.2netmask255.255.255.255”
第6页FreeBSD使用手册
ifconfig_fxp0_alias1=”inet10.1.1.3netmask255.255.255.255”
ifconfig_fxp0_alias2=”inet10.1.1.4netmask255.255.255.255”
ifconfig_fxp0_alias3=”inet10.1.1.5netmask255.255.255.255”
ifconfig_fxp0_alias4=”inet202.0.75.17netmask255.255.255.240”
ifconfig_fxp0_alias5=”inet202.0.75.18netmask255.255.255.255”
ifconfig_fxp0_alias6=”inet202.0.75.19netmask255.255.255.255”
ifconfig_fxp0_alias7=”inet202.0.75.20netmask255.255.255.255”
6.7配置文件
6.7.1/etc规划
在配置信息中有很多的目录。这些包括
一般的系统配置信息这儿的数据是系统指定的。/etc
系统配置文件的默认版本。/etc/defaults
额外的sendmail配置,其他MTA配置文件。/etc/mail
/etc/pppprograms.user-和kernel-ppp程序的配置。
/etc/namedbBind数据的默认定位。通常启动文件是定位在这儿,在/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:
searchfoobar.com
nameserver147.11.1.11
nameserver147.11.100.30
Dhclient通常会把DHCP服务器接收到的信息重写resolv.conf。
6.7.2.2/etc/hosts
/etc/hosts是一个文本数据库。它是用来联合DNS和NIS给IP地址的影射表提供名字。
本地的电脑通过一个LAN进行连接,可能会作为一个简单的命名目的而放在这儿,以代替设
置一个名称服务器。另外,/etc/hosts能被用来提供一个本地internet名称的记录,减少
搜索普通访问名称的需求。
#$FreeBSD$
#
#HostDatabase
#Thisfileshouldcontaintheaddressesandaliases
#forlocalhoststhatsharethisfile.
#InthepresenceofthedomainnameserviceorNIS,thisfilemay
#notbeconsultedatall;see/etc/nsswitch.conffortheresolutionorder.
#
#
::1localhostlocalhost.my.domainmyname.my.domain
127.0.0.1localhostlocalhost.my.domainmyname.my.domain
#
第8页FreeBSD使用手册
#Imaginarynetwork.
#10.0.0.2myname.my.domainmyname
#10.0.0.3myfriend.my.domainmyfriend
#
#AccordingtoRFC1918,youcanusethefollowingIPnetworksfor
#privatenetswhichwillneverbeconnectedtotheInternet:
#
#10.0.0.0-10.255.255.255
#172.16.0.0-172.31.255.255
#192.168.0.0-192.168.255.255
#
#IncaseyouwanttobeabletoconnecttotheInternet,youneed
#realofficialassignednumbers.PLEASEPLEASEPLEASEdonottry
#toinventyourownnetworknumbersbutinsteadgetonefromyour
#networkprovider(ifany)orfromtheInternetRegistry(ftpto
#rs.internic.net,directory‘/templates’).
#
/etc/hosts的简单格式
[Internetaddress][officalhostname][alias1][alias2]...
例如:
10.0.0.1myRealHostname.foobar.commyRealHostnamefoobar1foobar2
第9页FreeBSD使用手册
6.7.3日志文件配置
6.7.3.1syslog.conf
Syslog.conf是syslogd程序的配置文件。它指出记录到日志文件的syslog信息的类
型。
#$FreeBSD$
#
#SpacesAREvalidfieldseparatorsinthisfile.However,
#other*nix-likesystemsstillinsistonusingtabsasfield
#separators.Ifyouaresharingthisfilebetweensystems,you
#maywanttouseonlytabsasfieldseparatorshere.
#Consultthesyslog.confmanpage.
*.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
*.errroot
*.notice;news.errroot
*.alertroot
*.emerg*
#uncommentthistologallwritesto/dev/consoleto/var/log/console.log
第10页FreeBSD使用手册
#console.info/var/log/console.log
#uncommentthistoenableloggingofalllogmessagesto/var/log/all.log
#*.*/var/log/all.log
#uncommentthistoenableloggingtoaremoteloghostnamedloghost
#*.*@loghost
#uncommenttheseifyou’rerunninginn
#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.2newsyslog.conf
Newsyslog.conf是newsyslog程序的配置文件。一个被cronnewsyslog安排来运行的
程序决定了什么时候日志文件要求重新存档或整理。Logfile会被改为logfile.1,
logfile.1会被改为logfile.2等等。另外,日志文件会用gzip格式进行存档。它们是这
样命名的logfiel.0.gz,logfile.1.gz等等。
Newsyslog.conf指出了哪个文件需要被治理,有多少需要被保存,什么时候他们会被
调用。当他们达到一定大小或到一个适当的周期时,日志文件需要被重新整理。
#configurationfilefornewsyslog
#$FreeBSD$
#
第11页FreeBSD使用手册
#logfilename[owner:group]modecountsizewhen[ZB][/pid_file]
[sig_num]
/var/log/cron6003100*Z
/var/log/amd.log6447100*Z
/var/log/kerberos.log6447100*Z
/var/log/lpd-errs6447100*Z
/var/log/maillog6447*@T00Z
/var/log/sendmail.st64410*168B
/var/log/messages6445100*Z
/var/log/all.log6007*@T00Z
/var/log/slip.log6003100*Z
/var/log/ppp.log6003100*Z
/var/log/security60010100*Z
/var/log/wtmp6443*@01T05B
/var/log/daily.log6407*@T00Z
/var/log/weekly.log64051$W6D0Z
/var/log/monthly.log64012*$M1D0Z
/var/log/console.log6405100*Z
6.7.4sysctl.conf
第12页FreeBSD使用手册
Sysctl.conf看起来象rc.conf。它的值以这种形式来设置variable=value。指定的
值需要在进入多用户模式时才能被设置。在这种模式中不是所有的变量都能被设置。
一个sysctl.conf关闭引起重大错误产生的日志,然后让linux程序知道他们真的运行
在FreeBSD下面。
kern.logsigexit=0#Donotlogfatalsignalexits(e.g.sig11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE
6.8用sysctl进行调整
sysctl是一个答应你对一个运行着的FreeBSD系统进行修改的接口。这包括许多TCP/IP
堆栈和虚拟内存系统的高级选项,它通常可以为一个有经验的系统治理员提高系统的性能。
能够使用sysctl来阅读和设置超过5百个系统变量。
基于这点,sysctl起到两个功能阅读和修改系统设置。去看看所有可读的变量
%sysctl-a
阅读一个具体的变量,例如,kern.maxproc:
%sysctlkern.maxproc
kern.maxproc:1044
设置一个非凡的变量,使用=选项
#sysctlkern.maxfiles=5000
kern.maxfiles:2088-%26gt;5000
Sysctl变量的设置通常不是字符,数字,就是布尔类型的。一个布尔类型的树1代表
yes,0代表no。
6.9调整磁盘
6.9.1Sysctl变量
6.9.1.1vfs.vmiodirenable
第13页FreeBSD使用手册
vfs.vmiodirenablesysctl变量默认为0(off),也可以被设置成0或1。很多目录
是比较小,只使用一小片段(典型的1k),甚至更少(典型的512bytes)。然而,当
在默认的模式下操作时,即使你有很多内存,缓存器只缓存一些固定的目录。打开这个
sysctl可以答应缓存器使用VM页面缓存来缓存目录。这样的优势是所有的内存都能被缓存
目录所利用。不利的是最小的用来缓存目录的核心内存要大于512bytes(典型的是4K)。
假如你运行有大量文件处理的服务时,我们建议把这个选项打开。这样的服务包括web缓存、
大邮件系统和新闻系统。打开这项服务通常不会降低系统的性能,只是会浪费一点内存,但
你要仔细检查一下。
6.9.1.2hw.ata.wc
FreeBSD通常把IDE写入缓存关闭掉。这可以减少写入磁盘时需要的带宽。基本上,当
写入完成后,IDE基本上就没事了。由于IDE写入缓存被打开,IDE驱动器将不再按顺序把
数据写入到硬盘中。当磁盘处于比较大的负荷时,它们通常能缓冲写入的数据。不幸的是,
这样会丢失很多性能,最好还是改回默认值。你应当通过观察hw.ata.wcsysctl变量来检
查你的系统的默认情况。假如IDE的写入缓存被关闭,你可以在内核变量中把它改回1就可
以把它打开。这必须在启动时从引导程序过程中进行。在内核启动之后再这样做就没有用了。
6.9.2SoftUpdates
Tunefs能被用来很好地调整文件系统。可以这样做
#tunefs-nenable/filesystem
#tunefs-ndisable/filesystem
一个文件系统当被挂上的时候不能使用tunefs进行修改。在单用户模式下,在所有分
区都没有被挂上之前,起用SoftUpdates是最佳时机。
通过使用内存缓冲器,SoftUpdates能够极大地提高文件的性能,只要是文件创建和删
除。我们建议在你的所有文件系统上都打开SoftUpdates。你应当清楚两点第一,
SoftUpdates能在系统出现错误时保证系统的一致性,但在升级了物理磁盘后可能只需要几
秒钟。假如你的系统崩溃了,你可能会丢失很多的工作。第二,SoftUpdates可以推迟文件
系统块的释放时间。假如你有一个接近满了的文件系统,对它作一个主升级,make
installworld,可能会超出运行空间,从而引起升级失败。
第14页FreeBSD使用手册
6.10调整内核限制
6.10.1文件/进程限制
6.10.1.1kern.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页





