BSD系统在日常运维过程中,有许多高频操作与配置技巧值得系统整理。本文将带领读者从最基础的进入单用户模式开始,逐步深入探讨网络管理、防火墙配置、磁盘更换、性能调优等实用场景,希望能为运维同行提供有价值的参考。
BSD系统常用操作速查
进入单用户模式
在系统启动时,于引导提示符后输入 BOOT: /kernel -s 即可进入单用户模式。进入后执行 /sbin/mount -rw / 将根文件系统挂载为读写模式,随后使用 vipw 命令清空 root 密码,即可直接进行操作。
开机自动 fsck 硬盘
若需要系统在启动时自动检测并修复文件系统,可在 /etc/rc.conf 中添加 fsck_y_enable="YES" 配置项。
弹出光驱
- FreeBSD:使用
cdcontrol -> Eject命令。 - OpenBSD:
eject /dev/rcd0c。
增加用户
使用 pw useradd hanyang -g wheel -s /usr/local/bin/bash 命令,一行即可完成用户创建并指定组和 Shell。
观察网络流量
通过 systat -if 1 可以实时查看网络接口的流量状况。
添加 IP 地址和网关
编辑 /etc/rc.conf,添加如下配置示例:
ifconfig_bge0="inet 61.135.152.35 netmask 255.255.255.0"
ifconfig_bge1="inet 172.16.152.35 netmask 255.255.255.0"
defaultrouter="61.135.152.1"
临时配置则使用 /sbin/ifconfig bce0 inet 192.168.0.1 netmask 255.255.255.255。
手动添加默认网关
使用 route add default new_gateway 添加默认路由,route change default new_gateway 修改已有默认网关。
设置时区
在 FreeBSD 下直接运行 tzsetup 即可进入交互式时区设置界面。
查看打开的端口
BSD 系统使用 sockstat -l 查看监听端口;Linux 则用 netstat -anp | grep LISTEN。
新内核无法启动
当新内核无法正常启动时,在系统启动倒计时10秒内,按下除 Enter 外的任意键进入 loader 提示符。首先执行 unload 卸载当前内核,再执行 boot kernel.old 回退至旧内核。也可以直接输入 /boot/loader 进入手动模式。
查看硬件信息
CPU 信息可通过 cat /var/run/dmesg.boot | grep CPU 查看;详细型号使用 sysctl hw.model。
关掉 NFS 服务
在 /etc/rc.conf 中添加以下配置以关闭 NFS 服务器与客户端:
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
BSD 系统防火墙 ipfw 语法与常用命令
ipfw 是 BSD 系统经典的防火墙工具,常用操作包括:
ipfw show查看当前规则列表。ipfw add deny/allow all from 10.210.136.47 to any添加规则。ipfw -f flush清空所有规则。ipfw delete 表号删除指定规则。
实际生产环境中,常通过脚本调用 ipfw 动态封禁 IP,例如 /data1/apache2/logs/forbid_bsd.pl 中会先执行 /sbin/ipfw -f flush 再重新加载规则。
FreeBSD 磁盘命令行工具详解:更换硬盘完整步骤
以下以播客 squid 服务器(DELL 1950,4块73G 2.5寸SAS盘,每块盘单独做 raid0)为例,详细介绍更换硬盘的完整流程。
一、确认现场准备工作完成后,通知服务器负责人远程关机,然后由现场人员更换硬盘并完成 RAID 配置。
二、现场换好硬盘并做完 RAID 后,执行以下操作:
- 初始化新磁盘(假设 id=3):
dd if=/dev/zero of=/dev/mfid3 bs=1k count=1,然后执行fdisk -BI mfid3。 - 加标签:
disklabel -B -w -r mfid3s1 auto - 编辑分区:
disklabel -e mfid3s1,删除自动创建的a:行,并添加以下分区定义:
d: 142078797 0 4.2BSD 2048 16384 28552
- 创建文件系统:
newfs /dev/mfid3s1d - 修改
/etc/fstab添加条目:/dev/mfid3s1d /data3 ufs rw 2 2 - 挂载:
mount -a
内核内存不足导致自动重启的优化方案
当系统因内存不足自动重启时,可以通过减小接收和发送缓冲区的内存占用缓解问题。首先在 /etc/sysctl.conf 中添加以下配置:
net.inet.tcp.msl=2000
net.inet.tcp.sendspace=32768
net.inet.tcp.recvspace=8192
net.inet.tcp.recvbuf_max=32768
net.inet.tcp.sendbuf_max=131072
然后手工执行相同命令使其生效。同时修改 /boot/loader.conf:
kern.ipc.nmbclusters=0
vm.kmem_size_scale="2"
net.inet.tcp.sendspace="16384"
net.inet.tcp.recvspace="8192"
net.inet.tcp.sendbuf_max="131072"
请务必检查并删除 loader.conf 与 sysctl.conf 中的重复行,以免配置冲突。
向系统添加 FTP 账号的步骤
先确认 proftpd 是否安装:which proftpd。修改 proftpd.conf 添加用户。接着查看 21 端口是否由 inetd 启动:sockstat -l。编辑 /etc/inetd.conf,然后重启 inetd:killall -HUP inetd。
在 BSD 系统下关闭 sendmail 服务的方法
依次执行以下命令:
sh /etc/rc.sendmail stop
killall -9 sendmail
chmod 0 /usr/libexec/sendmail/sendmail
mv /etc/rc.sendmail /etc/rc.sendmail.old
在 /etc/rc.conf 中设置:
sendmail_enable="NONE"
sendmail_submit_enable="NONE"
sendmail_outbound_enable="NONE"
在 BSD 系统上安装 qmail 的详细步骤
创建目录和用户组:
mkdir /var/qmail /var/qmail/alias
pw groupadd nofiles
pw groupadd qmail
pw useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin
pw useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin
pw useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin
pw useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin
pw useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin
pw useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin
pw useradd qmails -g qmail -d /var/qmail -s /sbin/nologin
pw useradd admin -g wheel
接着解压并打补丁:
cd /home/hanyang
tar xvfz ./qmail-1.03.tar.gz
patch -d ./qmail-1.03 < qmail-103.patch
patch -d ./qmail-1.03 < qmail-maildir++.patch
tar zxvf qmail-smtpd-auth-0.31.tar.gz
cd qmail-smtpd-auth-0.31
cp base# README.auth ../qmail-1.03
patch -d ../qmail-1.03 < auth.patch
配置 BSD 系统串口输出为 115200 波特率
创建 /boot.config:echo '-Dh -S115200' >/boot.config。在 /boot/loader.conf 中添加以下内容:
echo 'kern.ipc.nmbclusters=0'>>/boot/loader.conf
echo 'comconsole_speed="115200"'>>/boot/loader.conf
echo 'console="comconsole"'>>/boot/loader.conf
echo 'boot_multicons="YES"'>>/boot/loader.conf
echo 'boot_serial="YES"'>>/boot/loader.conf
echo 'vm.kmem_size_scale="2"'>>/boot/loader.conf
echo 'net.inet.tcp.sendspace="16384"'>>/boot/loader.conf
echo 'net.inet.tcp.recvspace="8192"'>>/boot/loader.conf
echo 'net.inet.tcp.sendbuf_max="131072"'>>/boot/loader.conf
修改 /etc/ttys,注释掉 ttyd0/ttyd1 原有行,增加以下配置:
ttyd0 "/usr/libexec/getty std.115200" vt100 on secure
ttyd1 "/usr/libexec/getty std.115200" vt100 on secure
FreeBSD 系统监控工具详解
使用 SNP Watch 监控用户
watch 命令利用 snp 设备监控指定 tty 的输入输出。使用前需确保内核配置了 pseudo-device snp 4。常用用法如下:
- 监视用户 tty:
watch ttyv4(用who获取 tty) - 监视并控制:加
-W参数,如watch -W ttyv4
快捷键:CTRL+G 退出,CTRL+W 清屏,CTRL+X 选择 tty。
使用 smartmontools 监视硬盘状态
SMART(自我监控、分析及报告技术)是硬盘制造商制定的行业标准,支持 IDE 和 SCSI 硬盘。安装:
cd /usr/ports/sysutils/smartmontools
make all install clean
echo 'smartd_enable="YES"' >> /etc/rc.conf
echo '/dev/sda1 -H -m mymailbox@mymachine' > /usr/local/etc/smartd.conf
/usr/local/etc/rc.d/smartd.sh start
常用 smartctl 命令:
smartctl -i /dev/sda1查看是否支持 SMARTsmartctl -H /dev/sda1查看健康状况smartctl -l error /dev/sda1查看错误日志smartctl -l selftest /dev/sda1进行自检smartctl -X /dev/sda1终止自检
BSD 系统虚拟磁盘技术应用
如果遇到开机自动加载虚拟磁盘并挂载到 /var 的情况(通常是因为设置了 varmfs="YES"),可以通过修改 /etc/rc.conf 禁用:
varmfs="NO"
populate_var="NO"
使用 mdconfig 创建虚拟磁盘更加灵活:
- 基于 swap:
mdconfig -a -t swap -s 30M(会自动分配 md0) - 指定序号:
mdconfig -a -t swap -s 30M -u 10创建 md10 - 基于内核内存(malloc):
mdconfig -a -t malloc -s 30M - 基于文件(兼容 vn):
mdconfig -a -t vnode -f imagefile -s 30M
管理命令:mdconfig -l 列出所有虚拟磁盘;mdconfig -d -u 0 删除 md0。配置好之后,可用 disklabel、newfs、mount 等常规工具操作。
