这是我们关于 BSD 系列操作系统的七部分系列文章的第三部分。
FreeBSD 是使用最广泛的 BSD 操作系统。它可在 amd64、64 位 ARM (aarch64)、i386、32 位 ARM (armv6、armv7)、RISC-V 和 PowerPC 架构上运行。以前,我把三大 BSD 系统(当时 DragonFly 还没出现)分别看作是“NetBSD = 几乎可以在任何平台上运行,OpenBSD = 安全性高,FreeBSD = 在 amd64 架构上表现出色”。
我打算安装 FreeBSD 14.0。
我用DVD启动了系统。启动时间很长——将近2分钟。然后就进入了安装程序。

为什么我的VPS服务器上连接着一台USB平板电脑?

没有图形安装程序,我相信所有 BSD 系统都是如此。
从现在开始,我将跳过一些不太令人兴奋的屏幕(选择键盘映射、设置时区等),而专注于使 FreeBSD 安装过程独具特色的内容。

我将系统命名为 freebsd,并使用 DHCP 设置网络。

我添加端口只是为了随便看看。FreeBSD 有软件包和端口。软件包是编译好的二进制文件,就像你在 Linux 上使用 apt 或 yum 一样。通常情况下,这正是你想要的,因为软件包会安装二进制文件、设置配置文件等等。但是,你也可以通过端口获取软件。端口是源代码,需要编译才能安装。有些软件只能以端口的形式提供,原因有很多;而有些软件同时提供软件包和端口,原因也很多(主要是因为你可能需要修改编译参数)。我知道 OpenBSD 也有类似的机制。
在这里,我只会使用软件包。

我决定不使用 ZFS,因为这台 VPS 只有 2GB 内存,而且他们建议在“低内存系统”上阅读有关 ZFS 的内容,我可不想给自己找麻烦。UFS 就足够了。我认为 ZFS 在拥有多个硬盘的系统上会更有用——无论是在专用服务器上还是在虚拟卷上,尽管后者本身就提供了冗余。


默认是MBR。我们不是很久以前就不用MBR了吗?

看起来不错。这取决于你想进行多精细的系统管理。理论上,你可能需要隔离哪些文件系统允许可执行文件,或许还需要将日志设置为追加模式,将所有静态二进制文件放在一个分区中以防 /usr/bin 损坏,或许还需要隔离 /var 和 /home 目录以防止他人占用过多空间等等。但对于业余爱好者的 VPS 来说,我通常像这样“全部放在一个分区”运行,因为节省空间更重要,而且我是唯一的用户。
之后,我确认/提交了操作,它写入了分区,然后提取了我上面选择的那些文件集。


现在有几个系统配置选项。

我启用了ntpd和ntpd_sync_on_start。现在想想,我应该把moused功能关掉。

在多用户共享主机上,我会启用更多这类功能。我认为清除 /tmp 目录、随机化进程 ID (PID) 以及要求控制台输入密码都是好主意(后者虽然不是万无一失的保护措施,但总比没有强,至少能防止主机提供商那里无聊的初级系统管理员随意操作)。我发现不能随时运行 dmesg 命令很烦人,所以在这个单用户系统中,我保留了这项功能,以及其他查看用户 ID (uid)、组 ID (gid) 等信息的选项。

如果你问的是一个逻辑上只能用“是”或“否”回答的问题,那么当有人回答“是”时,就不应该感到意外。真是的。
还有 csh。为什么不呢?我们身处 BSD 的核心地带。(OpenBSD 使用 ksh)。


漂亮的标志!

root@freebsd:/etc/rc.d # ./sshd restart 对 sshd 配置进行健全性检查。 停止 sshd。 等待进程 ID:82151。 对 sshd 配置进行健全性检查。 启动 sshd。 root@freebsd:/etc/rc.d #
root@freebsd:~ # ps ax PID TT STAT 时间命令 0 - 下载次数 0:00.00 [内核] 1 - ILs 0:00.00 /sbin/init 2 - WL 0:00.23 [时钟] 3 - 下载 0:00.00 [加密货币] 4 - DL 0:00.01 [摄像头] 5 - DL 0:00.00 [busdma] 6 - DL 0:00.08 [rand_harvestq] 7 - DL 0:00.04 [pagedaemon] 8 - DL 0:00.00 [vmdaemon] 9 - DL 0:00.01 [bufdaemon] 10 - DL 0:00.00 [审核] 11 - RNL 24:35.05 [空闲] 12 - WL 0:00.37 [插入] 13 - DL 0:00.00 [geom] 14 - DL 0:00.00 [序列器 00] 15 - 下载 0:00.01 [usb] 16 - DL 0:00.00 [vnlru] 17 - 下载 0:00.01 [同步器] 5766 - 当前时间为 0:00.00 dhclient:system.syslog (dhclient) 6231 - 是 0:00.00 dhclient: vtnet0 [priv] (dhclient) 16963 - ICs 0:00.00 dhclient: vtnet0 (dhclient) 17110 - Ss 0:00.05 /sbin/devd 17263 - 当前时间为 0:00.00 sshd:/usr/sbin/sshd [listener] 启动次数为 0/10-100 (s 17834 - Ss 0:00.55 sshd: root@pts/0 (sshd) 58639 - Ss 0:00.02 /usr/sbin/syslogd -s 71089 - Ss 0:00.06 /usr/sbin/ntpd -p /var/db/ntp/ntpd.pid -c /etc/ntp.conf 75845 - Ss 0:00.00 /usr/sbin/cron -s 18973 0 Ss 0:00.03 -sh (sh) 41237 0 R+ 0:00.00 ps ax 85009 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0 85403 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1 85703 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2 85838 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3 86419 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4 86767 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5 86776 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6 87192 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
安装软件包
好的,我们来安装一些软件包。FreeBSD 的软件包管理器是 pkg(8)。它的手册页中写道:
如果 pkg(8) 尚未安装,则会先获取该软件包,验证其签名,然后进行安装,最后将原始命令转发给它。如果 pkg(8) 已安装,则会将请求的命令转发给实际的 pkg(8)。
真有用!
root@freebsd:~ # pkg 您的系统尚未安装软件包管理工具。 您现在要获取并安装吗?[y/N]: y 正在从 pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly 启动 pkg,请稍候…… 正在使用受信任证书 pkg.freebsd.org.2013102301 验证签名... 完成 正在安装 pkg-1.21.2... 正在提取 pkg-1.21.2:100% pkg:参数不足 用法:pkg [-v] [-d] [-l] [-N] [-j |-c |-r ] [-C ] [-R ] [-o var=value] [-4|-6][] 有关可用命令和选项的更多信息,请参阅“pkg help”。 root@freebsd:~ # pkg search nginx pkg:缺少 FreeBSD 软件仓库。需要执行“pkg update”命令。 ^Cpkg: 信号已接收,正在清理 root@freebsd:~ # pkg update 正在更新 FreeBSD 软件仓库目录…… 正在获取 meta.conf:100% 178 B 0.2kB/s 00:01 正在获取 data.pkg:100% 7 MiB 7.3MB/s 00:01 正在处理条目:100% FreeBSD 软件仓库更新完成。已处理 34072 个软件包。 所有代码库均已更新。 root@freebsd:~ #
我们先从 wget 开始。
root@freebsd:~ # pkg search wget wget-1.24.5 通过 HTTP(S) 和 FTP 从网络检索文件 wget2-2.1.0_1 文件和递归网站下载器 wgetpaste-2.34 通过 bash 脚本将内容粘贴到多个 pastebin 服务 root@freebsd:~ # pkg install wget 正在更新 FreeBSD 软件仓库目录…… FreeBSD 软件仓库已更新至最新版本。 所有代码库均已更新。 数据库摘要格式更新:100% 以下 5 个包裹将受到影响(已检查 0 个): 待安装的新软件包: gettext-runtime:0.22.5 索引信息:0.3.1 libidn2:2.3.7 libunistring:1.2 wget:1.24.5 待安装软件包数量:5 该过程将需要额外 8 MiB 的空间。 待下载 2 MiB。 是否继续执行此操作?[y/N]:y [1/5] 正在获取 wget-1.24.5.pkg:100% 774 KiB 792.9kB/s 00:01 [2/5] 正在获取 indexinfo-0.3.1.pkg:100% 6 KiB 6.0kB/s 00:01 [3/5] 正在获取 libidn2-2.3.7.pkg:100% 155 KiB 159.1kB/s 00:01 [4/5] 获取 libunistring-1.2.pkg: 100% 680 KiB 696.1kB/s 00:01 [5/5] 正在获取 gettext-runtime-0.22.5.pkg:100% 231 KiB 236.7kB/s 00:01 检查完整性...完成(0 个冲突) [1/5] 正在安装 indexinfo-0.3.1... [1/5] 正在提取 indexinfo-0.3.1:100% [2/5] 正在安装 libunistring-1.2... [2/5] 正在提取 libunistring-1.2:100% [3/5] 正在安装 libidn2-2.3.7... [3/5] 正在提取 libidn2-2.3.7:100% [4/5] 正在安装 gettext-runtime-0.22.5... [4/5] 正在提取 gettext-runtime-0.22.5:100% [5/5] 正在安装 wget-1.24.5... [5/5] 正在提取 wget-1.24.5:100% root@freebsd:~ # root@freebsd:~ # mkdir /root/swdist root@freebsd:~ # cd /root/swdist/ root@freebsd:~/swdist # wget https://wordpress.org/latest.zip --2026-05-25 19:05:14-- https://wordpress.org/latest.zip 正在解析 wordpress.org (wordpress.org)... 198.143.164.252 正在连接到 wordpress.org (wordpress.org)|198.143.164.252|:443... 已连接。 已发送 HTTP 请求,正在等待响应... 200 OK 长度:26193148 (25M) [application/zip] 保存到:'latest.zip' latest.zip 100%[===================>] 24.98M --.-KB/s 用时 0.1 秒 2026-05-25 19:05:15 (183 MB/s) - 'latest.zip' 已保存 [26193148/26193148] root@freebsd:~/swdist # root@freebsd:~/swdist # pkg install unzip 正在更新 FreeBSD 软件仓库目录…… FreeBSD 软件仓库已更新至最新版本。 所有代码库均已更新。 以下 1 个软件包将受到影响(已检查 0 个): 待安装的新软件包: 解压:6.0_8 待安装软件包数量:1 需要下载 140 KiB。 是否继续执行此操作?[y/N]:y [1/1] 正在获取 unzip-6.0_8.pkg:100% 140 KiB 143.1kB/s 00:01 检查完整性...完成(0 个冲突) [1/1] 正在安装 unzip-6.0_8... [1/1] 正在解压 unzip-6.0_8:100%
现在我们需要 Nginx、MariaDB 和 PHP-FPM。
root@freebsd:~/swdist # pkg install nginx mariadb php-fpm 正在更新 FreeBSD 软件仓库目录…… FreeBSD 软件仓库已更新至最新版本。 所有代码库均已更新。 pkg:在软件仓库中未找到与“mariadb”匹配的可安装软件包。 pkg:在软件仓库中未找到与“php-fpm”匹配的可安装软件包。 root@freebsd:~/swdist # pkg search mariadb mariadb-connector-c-3.3.8_1 MariaDB 数据库连接器(C 语言) mariadb-connector-odbc-3.1.20 MariaDB 数据库 ODBC 连接器 mariadb1011-client-10.11.7 多线程 SQL 数据库(客户端) mariadb1011-server-10.11.7 多线程 SQL 数据库(服务器) mariadb105-client-10.5.23 多线程 SQL 数据库(客户端) mariadb105-server-10.5.23 多线程 SQL 数据库(服务器) mariadb106-client-10.6.17 多线程 SQL 数据库(客户端) mariadb106-server-10.6.17 多线程 SQL 数据库(服务器) p5-DBD-MariaDB-1.21 用于 Perl5 数据库接口 (DBI) 的 MariaDB 驱动程序 rubygem-azure_mgmt_mariadb-0.17.4 Microsoft Azure Microsoft Azure MariaDB Ruby 客户端库
所以没有虚拟软件包。另外,我发现也没有单独的 php-fpm 软件包,而是包含在 PHP 中。所以,长话短说:
root@freebsd:~/swdist # pkg install mariadb106-server mariadb106-client php83 正在更新 FreeBSD 软件仓库目录…… FreeBSD 软件仓库已更新至最新版本。 所有代码库均已更新。 以下 18 个软件包将受到影响(已检查 0 个): 待安装的新软件包: bash:5.2.26_1 boost-libs:1.84.0 galera26:26.4.16_2 icu: 74.2_1,1 libargon2:20190702_1 libedit:3.1.20230828_1,1 libiconv:1.17_1 liblz4:1.9.4_1,1 libxml2:2.11.7 mariadb106-client:10.6.17 mariadb106-server:10.6.17 pcre2:10.43 php83:8.3.6 读取行:8.2.10 rsync:3.3.0 unixODBC:2.3.12_1 xxhash:0.8.2_1 zstd:1.5.6 待安装软件包数量:18 该过程将需要额外 589 MiB 的空间。 需要下载 87 MiB。 是否继续执行此操作?[y/N]: 来自 mariadb106-server-10.6.17 的消息: -- MariaDB 遵循 hier(7) 规范,不会检查 /etc 和 /etc/mysql 文件。 请将现有的 my.cnf 文件从这些路径移动到 /usr/local/etc/mysql 或 /usr/local/etc。示例 配置文件位于 /usr/local/etc/mysql 和 /usr/local/etc/mysql/conf.d。 rc(8) 脚本不再使用 /var/db/mysql/my.cnf 进行配置。 日志和 PID 文件也不在 /var/db/mysql 目录下。 此端口不包含 mytop perl 脚本,该脚本包含在其他端口中。 MariaDB tarball,但最新版本可以在以下位置找到: 数据库/mytop 端口 使用 wsrep 集群需要添加配置文件。 将 /usr/local/etc/mysql/conf.d/wsrep.conf.sample 复制到 /usr/local/etc/mysql/conf.d/wsrep.conf 并根据需要进行更改。
我还安装了 php83-extensions 和 nginx,但我忘记将它们添加到上面的命令中了。
我从 MariaDB 的这条“消息”中学到了很多。我阅读了 hier(7) 的手册页,了解到 FreeBSD 使用一种将本地安装的软件放在 /usr/local 目录下的系统。我知道 /usr/local 是什么,但在 Linux 系统中,如果你通过发行版的包管理器安装软件,它会放在 /usr/bin 等目录下。如果你下载、编译并安装自己的软件,通常也会放在 /usr/local 目录下。FreeBSD 的意思是“我们开发者提供的文件系统应该保持纯净,你可以把所有网站自定义设置、软件安装、源代码等等都放在 /usr/local 目录下”。
服务:服务的力量
Unix 系统之间的一个区别通常体现在启动/初始化方面,FreeBSD 也不例外。
要启动、停止、重启等服务,你可以调用类似这样的命令:
重启 nginx 服务
但是,并没有“service nginx enable”这样的命令。要让 Nginx 在启动时自动运行,需要修改 /etc/rc.conf 文件。
在该文件中,你会看到类似这样的行:
mysql_enable="YES" nginx_enable="YES"
现在看来,可以直接编辑该文件。但是,FreeBSD 的惯用方法是使用 sysrc 命令:
sysrc nginx_enable="YES"
“<服务名称>_enable”这种语法在我看来很笨拙。我知道这是因为某个 shell 脚本会调用这个文件,但创建 /etc/services_enabled 文件并列出要启用的服务会更简洁高效。
准备为 WordPress 服务
我就不一一赘述每条指令了。以下是我执行的操作。
我运行了 mysql_secure_installation。
安装 nginx 后,我修改了 /usr/local/etc/nginx/nginx.conf,添加了 /usr/local/etc/nginx/sites,这有点像 Debian 上的 sites-enabled/sites-available 设置,但更快捷简便一些。
具体指令如下:
包含 /usr/local/etc/nginx/sites/*;
我创建了一个 blog.lowend.party nginx 配置。
我没有对php-fpm进行任何调优,它就开始运行了:
root@freebsd:/usr/local/etc # service php-fpm start 无法启动 php_fpm。请在 /etc/rc.conf 中将 php_fpm_enable 设置为 YES,或使用 'onestart' 代替 'start'。 root@freebsd:/usr/local/etc # sysrc php_fpm_enable="YES" php_fpm_enable: -> 是 root@freebsd:/usr/local/etc # root@freebsd:/usr/local/etc # service php-fpm start 对php-fpm配置进行健全性检查: [2026年5月26日 09:40:03] 注意:配置文件 /usr/local/etc/php-fpm.conf 测试成功 启动 php_fpm。
查看 /usr/local/etc/php-fpm.d/www.conf 文件,你会发现 php-fpm 使用的是 127.0.0.1:9000。我更倾向于使用 Unix 套接字。应该把它放在哪里呢?
root@freebsd:/usr/local/etc# find / -type s -print /var/run/devd.pipe /var/run/devd.seqpacket.pipe /var/run/log /var/run/logpriv /var/run/mysql/mysql.sock
看起来 /var/run 是存放位置。
现在,让我们创建一些目录并配置我们的网站,网址是 blog.lowend.party。我喜欢把所有内容都放在 /web 目录下。nginx 以用户 'www' 和组 'www' 的身份运行。
root@freebsd:/usr/local/etc/nginx/sites # mkdir /var/log/nginx/blog.lowend.party/ root@freebsd:/usr/local/etc/nginx/sites # cd /var/log/nginx/blog.lowend.party/ root@freebsd:/var/log/nginx/blog.lowend.party # touch access.log error.log root@freebsd:/var/log/nginx/blog.lowend.party # chown www:www *.log root@freebsd:/var/log/nginx/blog.lowend.party # cd .. root@freebsd:/var/log/nginx # chgrp www blog.lowend.party/ root@freebsd:/var/log/nginx # chmod 775 blog.lowend.party/ root@freebsd:/var/log/nginx # ls -ld blog.lowend.party/ drwxrwxr-x 2 root www 512 5月26日 09:45 blog.lowend.party/ root@freebsd:/var/log/nginx # ls -lR blog.lowend.party/ 总计 0 -rw-r--r-- 1 www www 0 5月26日 09:45 access.log -rw-r--r-- 1 www www 0 5月26日 09:45 error.log root@freebsd:/var/log/nginx #
顺便说一句,在 vi 中选中内容后直接复制很方便,我不需要先进行一些操作。
:mouse-=a
就像我用 vim 一样。这是因为 FreeBSD 使用的是源自 BSD 的 vi 编辑器。
root@freebsd:/usr/local/etc/nginx # mkdir -p /web/blog.lowend.party root@freebsd:/usr/local/etc/nginx # vi /web/blog.lowend.party/index.html
目前运行正常吗?

现在我们再做几件事。
了解更多关于 FreeBSD 的信息
我安装了 certbot。有趣的是:
root@freebsd:/usr/local/etc/nginx # pkg install py39-certbot-nginx 正在更新 FreeBSD 软件仓库目录…… FreeBSD 软件仓库已更新至最新版本。 所有代码库均已更新。 检测到新版本的软件包;需要先安装。 以下 1 个软件包将受到影响(已检查 0 个): 待升级的已安装软件包: 软件包版本:1.21.2 -> 1.21.3 待升级软件包数量:1 待下载文件大小为 12 MiB。 是否继续执行此操作?[y/N]:y
工作进行到一半,正好赶上他们推送 pkg 的新更新。Netcraft 说 BSD 要消亡了……唉。
Certbot 软件包提示我需要修改 /etc/periodic.conf 文件以更新证书。但该文件并不存在。于是我做了件合乎逻辑的事:查阅了 periodic.conf 的手册页。然后我了解到……
它位于 /etc/defaults 目录中,其部分内容可能被 /etc 目录中同名的文件覆盖,而 /etc/defaults 文件本身又可能被 /etc/periodic.conf.local 文件覆盖。
/etc/defaults/periodic.conf 文件内容如下:
请勿编辑此文件!请将任何覆盖设置放入以下任一文件中:
# 代替 $periodic_conf_files
...
哪些文件会覆盖这些默认值?
periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local ${_localbase}/e
tc/periodic.conf”现在,我想检查一下DNS是否正常工作,所以我做了以下操作:
# nslookup blog.lowend.party -sh:nslookup:未找到
就像几乎所有 Linux 发行版或操作系统一样,我需要上网搜索才能找到哪个软件包包含 nslookup 函数。但谷歌误导了我。我找到的第一条论坛评论说它是 bind 软件包的一部分,而 bind 已被 unbound 取代。
然而,“pkg install unbound”命令并没有安装它,所以接着又执行了“pkg remove unbound”。等等……难道真的有“绑定工具”类型的软件包吗?果然如此。
pkg install bind-tools
这时,我开始想念 bash shell 了,因为我经常高强度地使用 shell。幸运的是,它已经安装了,而且实际上已经在 /etc/shells 文件中配置好了。
bash -o vi
啊,真是耳目一新。我想,当心爱的工具被替换掉时,产生抵触情绪是人之常情吧。
顺便说一句,我没有为 root 用户更改它,因为所有为 FreeBSD 做出贡献的工程师编写的代码都假定它是在 root 用户的默认 shell 下运行的。
WordPress 的最后准备工作
我创建了一个 MySQL 数据库和用户等等。
创建 WordPress 数据库; 创建用户“wordpress”@“localhost”,密码为“StrongPassword”; grant all on wordpress.* to 'wordpress'@'localhost';
我没有清除权限,因为那样做很愚蠢。
cd /web/blog.lowend.party/ cp /root/swdist/latest.zip 解压缩 /root/swdist/latest.zip 删除 index.html mv wordpress/* . rmdir wordpress
我想我们已经准备好安装了。我们来看看:

不……
所以我首先想到的是 php-fpm 服务宕机了(但实际上并没有),或者配置错了……也许是这样。我把它改成了使用 Unix 套接字,这导致 Nginx 日志中出现了权限被拒绝的错误。我应该直接修改 /var/run/php-fpm.sock 的权限吗?嗯,最后我还是把它改回了使用 127.0.0.1:9000,并且也更新了 nginx 的站点配置。
在那之后:

从那时起,我们就进入了 WordPress 的世界。
我们来试试 Phoronix
pkg install phoronix-test-suite-php83-10.8.4_2
这成功了,但尝试
phoronix-test-suite 安装 nginx
结果如下:
安装程序以非零退出状态退出。
错误:make:遇到致命错误——无法继续
日志:~/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/install-failed.log
[问题] pts/nginx-3.0.1 未安装。
日志中有很多这类错误:
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符 tar:设置默认区域设置失败 make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 6 行:无效的行类型 make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 9 行:无效的行类型 make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 10 行:警告:目标“ifeq”的重复脚本已忽略 make:Makefile 第 8 行:警告:此处定义的“ifeq”使用了之前的脚本
出问题的不是我的nginx.conf文件:
# nginx -t nginx:配置文件 /usr/local/etc/nginx/nginx.conf 的语法正确 nginx:配置文件 /usr/local/etc/nginx/nginx.conf 测试成功
我考虑过删除软件包然后从 GitHub 安装,但是 GitHub 上的版本和 FreeBSD 自带的软件包版本一样。唉,我真是搞不懂了。公平地说,PTS 上是这么说的:
Phoronix 测试套件支持 Linux、*BSD、Solaris、macOS 和 Windows 系统。但是,功能最齐全且支持最完善的操作系统是 Linux。
为什么启动这么慢?或者更确切地说,为什么我让它启动得这么慢……
所以当我从 ISO 启动时,启动时间很长,我猜是因为某种安装内核在进行大量的额外探测,运行大量的安装/发现脚本等等。
但我已经重启了三次,并在控制台中查看过,看到的都是同样的情况。
徽标出现并完成自动启动倒计时后,内核开始加载。最初的五六秒钟,一切似乎进展迅速,大量信息不断涌现。然后就出现了这种情况:

此时,屏幕静止了大约1分45秒。然后屏幕突然变成了这样。我说“变成”,是因为屏幕不是滚动,而是整个屏幕刷新后变成了这样:

第一次我以为可能是启动/完成设置过程中出现了一些问题导致系统卡顿,但重启三次后问题依然存在。
我认为有两个问题。首先,可能是显示错误或重置导致信息没有更新,所以我无法确定这 1 分 45 秒的卡顿时间有多少是系统卡顿造成的,又有多少是用来显示上面第二个屏幕上的信息。其次,可能是某些操作超时或启动时间过长。FreeBSD 在企业级服务器上启动时间不应该超过 2 分钟吧?
好吧,看看是 FreeBSD 的问题还是我哪里搞砸了。我在 Vultr 上创建了一个 FreeBSD 2 虚拟机,配置和之前一样,这次用的是他们的 FreeBSD 14.0 模板。
虚拟机启动大约需要 6.5 秒。
好的,所以有两种可能:
- 作为一名初级 FreeBSD 系统管理员,我搞砸了一些事情。
- Vultr 上的 FreeBSD 需要一些 Vultr 知道而我不知道的优化。可能是需要调整某些参数,或者需要添加(或移除)某些硬件支持,或者需要特定的内核配置等等。我估计如果我花时间在论坛上,对比他们的模板和 ISO 安装包,就能找到问题所在。
我原本打算在 Vultr 上运行 FreeBSD,我会使用他们的模板。
进一步研究
我想了解更多关于这些方面的信息:
- 监狱介于 chroot 和容器之间,或者可能兼具两者的特点。
- FreeBSD 的强制访问控制,或 BSD 的 SELinux
- ZFS
最后想说的话
我很喜欢 /usr/local 目录的分离。pkg 似乎也如宣传的那样工作。很多小问题在不同的 Linux 发行版之间迁移时也会遇到(例如安装程序的工作方式、哪些软件包包含 nslookup 等)。一些 finger 宏需要调整。
显然,我得先解决启动问题和其他一些问题,但FreeBSD对我来说并不陌生,我觉得我可以很轻松地长期使用FreeBSD。其他想法就留到最后再说吧!
接下来是: NetBSD!