在日常运维BSD系统的过程中,总会遇到一些高频操作——从单用户模式恢复root密码,到借助ipfw封禁IP地址,再到硬盘更换与数据迁移。这些命令如果不经常使用,很容易遗忘,因此整理一份实用的系统维护笔记很有必要。以下内容均来自生产环境的反复验证,直接复制粘贴即可使用,但请留意环境差异(如设备名、内核版本)。
1. 进入单用户模式
在Boot Loader提示时输入:
BOOT: /kernel -s
之后执行:
/sbin/mount -rw /
将根分区挂载为可写,然后使用vipw清空root口令即可完成密码重置。
2. 开机自动fsck硬盘
在/etc/rc.conf中添加以下配置:
fsck_y_enable="YES"
3. FreeBSD弹出光驱
执行cdcontrol -> Eject命令,或直接使用eject(具体取决于系统配置)。
4. OpenBSD弹出光驱
eject /dev/rcd0c
5. BSD下创建用户账号
pw useradd hanyang -g wheel -s /usr/local/bin/bash
6. 实时监控网络流量
systat -if 1
7. 添加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"
临时添加IP地址可以使用:
/sbin/ifconfig bce0 inet 192.168.0.1 netmask 255.255.255.255
8. 手动配置默认网关
route add default new_gateway
route change default new_gateway
9. FreeBSD中设置时区
tzsetup
10. 查看系统打开的端口
BSD系统使用:sockstat -l;Linux系统使用:netstat -anp | grep LISTEN
11. BSD新内核无法启动时的应对
在系统启动倒计时10秒期间,按下Enter以外的任意键,然后输入unload,再输入boot kernel.old,或直接执行/boot/loader。
12. 查看硬件信息
cat /var/run/dmesg.boot | grep CPU
sysctl hw.model
13. 关闭NFS服务
编辑/etc/rc.conf,添加以下配置:
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
BSD 防火墙ipfw常用语法
ipfw show
ipfw add deny/allow all from 10.210.136.47 to any
ipfw -f flush
ipfw delete 表号
FreeBSD磁盘命令行工具实战
以某台Squid服务器(DELL 1950,4块73G SAS盘,每块独立RAID0)为例,详细说明更换硬盘流程:
一、确认现场准备——确认故障盘编号,通知负责人,远程关机后现场更换硬盘并配置RAID。
二、现场更换完成后执行以下步骤:
- 初始化新磁盘(mfid3为示例设备ID,请根据实际情况调整):
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
随后手动执行上述sysctl命令使其生效。同时检查/boot/loader.conf,确保以下项已正确设置(若存在重复,则需删除/etc/sysctl.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"
添加FTP用户账号
which proftpd
# 修改proftpd.conf以添加账号
# 检查21端口是否由inetd启动
sockstat -l
vi /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
mkdir /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
配置串口为115200波特率输出
echo '-Dh -S115200' > /boot.config
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系统监控工具详解
1. 使用SNP Watch监视用户活动
首先确保内核配置包含pseudo-device snp 4。常用操作示例:
# who
jerry ttyv4 5 18 13:40
# watch ttyv4 # 仅监视
# watch -W ttyv4 # 监视并控制终端
快捷键:CTRL+G退出,CTRL+W清屏,CTRL+X选择tty。
2. 使用smartmontools监控硬盘健康状态
安装步骤:
# 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 # 查看硬盘是否支持SMART
smartctl -H /dev/sda1 # 查看硬盘健康状态
smartctl -l error /dev/sda1 # 查看错误日志
smartctl -l selftest /dev/sda1 # 查看硬盘自检结果
smartctl -X /dev/sda1 # 终止正在进行的自检
BSD虚拟磁盘技术(内存盘)
若/etc/rc.conf中设置了varmfs="YES",系统启动时会自动创建虚拟磁盘并挂载到/var。如需关闭,请修改为:
varmfs="NO"
populate_var="NO"
手动创建虚拟磁盘的多种方式:
- 使用swap空间创建30MB虚拟盘:
mdconfig -a -t swap -s 30M - 指定设备号(如md10):
mdconfig -a -t swap -s 30M -u 10 - 使用内核MALLOC内存:
mdconfig -a -t malloc -s 30M - 使用文件创建(类似vn兼容模式):
mdconfig -a -t vnode -f imagefile -s 30M
创建后可使用disklabel、newfs、mount进行管理。列出所有虚拟磁盘:mdconfig -l,删除指定设备:mdconfig -d -u 0。
