FreeBSD handbook中文版 6 配置與調整
2024-07-26 00:29:06
供稿:網友
目錄
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文件來啟用??梢钥纯磇netd
命令的說明就可以了。
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 頁