目录
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 。
- 实测Windows Vista Home繁体中文版
- 中文版Vista升级待遇不同
- Vista今起全面铺货 中文版最低售价2000元
- 微软Vista今全球上市 新系统中文版1530元
- 图 Vista中文版进驻中关村 跟踪拍摄
- 实地跟踪拍摄:Vista中文版进驻中关村
- Windows Vista到货 中文版价格曝光
- 图 Vista中文版进驻中关村 实地跟踪拍摄
- Windows Vista 简体中文版最终价格公布
- Vista中文版傻瓜教程:IE7.0快捷秘笈
