FreeBSD 8.1-RELEASE 发行说明(2010 年 7 月 23 日)

原文链接:FreeBSD 8.1-RELEASE Release Notes

FreeBSD 项目

版权所有 © 2010 FreeBSD 文档项目

$FreeBSD: stable/8/release/doc/en_US.ISO8859-1/relnotes/article.sgml 210449 2010-07-24 17:44:31Z hrs $

FreeBSD 是 FreeBSD 基金会的注册商标。

IBM、AIX、EtherJet、Netfinity、OS/2、PowerPC、PS/2、S/390 和 ThinkPad 是国际商业机器公司(IBM)在美国、其他国家或两者的商标。

IEEE、POSIX 和 802 是美国电气和电子工程师协会(IEEE)的注册商标。

Intel、Celeron、EtherExpress、i386、i486、Itanium、Pentium 和 Xeon 是 Intel 公司或其子公司在美国及其他国家的商标或注册商标。

SPARC、SPARC64、SPARCengine 和 UltraSPARC 是 SPARC 国际公司在美国和其他国家的商标。SPARC 国际公司拥有所有 SPARC 商标,并根据许可协议允许其成员适当使用这些商标。

许多制造商和销售商用于区分其产品的名称被声明为商标。本文档中出现这些名称时,如果 FreeBSD 项目知道该商标声明,这些名称后会跟随“™”或“®”符号。

FreeBSD 8.1-RELEASE 的发布说明包含了对 FreeBSD 基系统在 8-STABLE 开发线上的变更摘要。本文件列出了自上次发布以来发布的相关安全公告,以及对 FreeBSD 内核和用户空间的重大变更。还简要介绍了升级的相关内容。

1 介绍

本文档包含了 FreeBSD 8.1-RELEASE 的发布说明。它介绍了 FreeBSD 中最近添加、改变或删除的功能。还提供了一些关于从之前版本升级到 FreeBSD 的说明。

此版本的 FreeBSD 8.1-RELEASE 是一个发布版本。可以在ftp://ftp.FreeBSD.org/或其镜像站点找到。有关如何获取此版本(或其他)发布版本的更多信息,请参考FreeBSD 手册中的“获取 FreeBSD”附录

所有用户在安装 FreeBSD 之前,建议查阅发布勘误。勘误文档会更新发布周期结束后或发布后发现的“最后时刻”的信息。通常,它包含已知的漏洞、与安全相关的通告以及文档的更正。在 FreeBSD 官方网站找到 FreeBSD 8.1-RELEASE 的最新勘误可以。

2 新特性

本节介绍了自 8.0-RELEASE 以来,FreeBSD 中最显著的用户可见的新特性或更改。

典型的发布说明条目包括 8.0-RELEASE 后发布的安全通告、新驱动程序或硬件支持、新命令或选项、主要的错误修复或第三方软件升级。它们还可能列出对主要的端口/包或发布工程实践的更改。显然,发布说明无法列出所有 FreeBSD 在两个版本之间的更改;本文档主要关注安全通告、用户可见的更改和主要的架构改进。

2.1 安全通告

以下安全通告中描述的问题已经得到修复。有关更多信息,请参阅个别通告,地址为http://security.FreeBSD.org/

通告
日期
主题

2009 年 12 月 3 日

SSL 协议漏洞

2009 年 12 月 3 日

2009 年 12 月 3 日

2010 年 1 月 6 日

2010 年 1 月 6 日

ntpd 模式 7 拒绝服务攻击

2010 年 1 月 6 日

ZFS ZIL 回放的权限问题

2010 年 5 月 27 日

2010 年 5 月 27 日

OPIE 中的栈溢出

2010 年 5 月 27 日

nfsclient 中的输入未验证

2010 年 7 月 13 日

mbuf 参数丢失导致数据损坏

2.2 内核更改

ddb(4)调试器已得到改进:

  • 现在支持 show ifnetsshow ifnet *struct ifnet * 命令,用于打印每个虚拟网络栈的 ifnet * 列表和指定fip的字段。

  • 现在支持 show all lltablesshow lltable struct lltable *show llentry struct llentry * 命令,用于打印每个虚拟网络栈的 lltable * 列表和指定结构的字段。

  • show mount 命令现在会打印活动的字符串挂载选项。

  • 现在支持 show vnetrcrs 命令来输出所有不同 curvnet 递归事件的日志。

  • 现在支持 show vnet_sysinitshow vnet_unsysinit 命令,打印有序的调用列表。

新增了一个名为“死锁解析器”的内核线程。此线程可通过使用线程状态信息和启发式分析来检测可能的死锁。默认情况下未启用此功能。要启用此功能,需在内核配置文件中添加选项 option DEADLKRES 并重新编译内核。

默认的 devfs(5) 规则现在暴露上层 256 个 pty(4)设备节点。

新增了两个命令来启用/禁用 fcntl(2) 系统调用中的预读功能:

  • F_READAHEAD 指定顺序访问的大小。该大小以字节为单位,四舍五入到最接近的块大小。

  • F_RDAHEAD 是与 Darwin 兼容的版本,使用 128KB 作为顺序访问大小。

请注意,预读大小也受到 sysctl 变量 vfs.read_max 限制,可能需要增加此限制以更好地利用此功能。

新增了 lindev(4) 驱动程序,支持各种 Linux 特有的伪设备,如 /dev/full。请注意,这不包含在 GENERIC 内核中。

POSIX 函数 pselect(3) 已重新实现为系统调用 pselect(2),以消除竞态条件。

已在 GENERIC 内核中默认添加了内核选项 option INCLUDE_CONFIG_FILE

修复了 sched_4bsd(4) 调度器中的一个错误,该错误导致在唤醒时未清除睡眠操作的时间戳。

修复了 sched_4bsd(4) 调度器中的竞态条件。

修复了 sched_ule(4) 调度器中的一个错误,该错误导致进程使用率(%CPU)无法正常工作。

新增了用于 opencrypto 和 vnet 等的 SDT(静态定义跟踪)探针,已添加到 FreeBSD 的 dtrace(1) 子系统。

[powerpc] FreeBSD 现在支持 PowerPC G5 系统中的 SMP。请注意,在 FreeBSD/powerpc 上,SMP 支持默认在 GENERIC 内核中是禁用的。

[sparc64] FreeBSD 现在支持 UltraSPARC IV、IV+和 SPARC64 V 处理器。

已改进 syscons(4) 驱动程序。现在可以通过加载器可调参数 hint.sc.0.vesa_mode 在 VESA 模式切换时完全保存/恢复历史缓冲区。

修复了 tty(4) 驱动程序中的一个错误,该错误导致 TIOCSTI 无法正常工作,这会影响如 mail(1) 等应用程序。

[amd64, i386] 基于 OpenBSD 的 x86emu 实现的 x86 实模式仿真器已添加,以改善 i386 和 amd64 上对实模式 BIOS 调用的支持。atkbdc(4)dpms(4)、vesa(4)、vga(4) 驱动程序现在使用该仿真器,并在这两个平台上工作。

jail(8) VIMAGE 虚拟化容器现在可以与 sctp(4) 一起使用。请注意,GENERIC 内核默认未启用 VIMAGE。

jail(8) VIMAGE 现在支持 ip4.saddrselip4.nosaddrselip6.saddrselip6.nosaddrsel,用于控制是否对未绑定的外部连接使用源地址选择或主要的 jail 地址。默认值为使用源地址选择。

2.2.1 引导加载程序变更

[pc98] boot2 启动代码已根据 i386 版本重新实现。现支持 ELF 二进制文件、UFS2 文件系统和更多的分区。

[ia64] EFI 加载程序现支持命令行选项 -dev currdev 来指定 currdev 的默认值。此选项可由 EFI 启动管理器设置。

[powerpc] loader(8) 程序现在支持 U-Boot 存储。

[i386] loader(8) 使用的算法已改进,在使用 1MB 以上的内存范围时,能够选择一个合适的堆内存范围。这修复了加载器无法加载内核的问题。

现在,内核环境变量 vfs.root.mountfrom 支持以空格分隔的多个根文件系统元素。每个列表元素将按顺序尝试,首个可用的将被挂载。

添加了 zfsloader,这是一个启用了 zfs(8) 的独立加载程序。请注意,要使用这个新加载程序,需要安装 ZFS 引导代码(zfsboot 或 gptzfsboot)。

zfsboot 和 gptzfsboot 启动代码现在完全支持 64 位 LBA(逻辑块地址)磁盘地址。这使得从大容量磁盘启动成为可能。

2.2.2 硬件支持

[powerpc] adb 驱动程序现在支持将 ADB 触控板上的轻触解释为按钮点击。

已添加适用于 AMD SB600/SB7xx 看门狗定时器的 amdsbwd(4) 驱动程序。

[powerpc] 为 MacBook 上的 Apple 触控板添加了 apt 驱动程序,并已加入 GENERIC 内核。

[sparc64] 已添加用于 Sun Fire V215/V245 前面板 LED 的 epic(4) 驱动程序。

已修复 ipmi(4) 驱动程序中的一个错误,导致看门狗定时器设置不正确。

[sparc64] pci(4) 驱动程序现在支持 Sun Fire V215/V245 和 Sun Ultra 25/45 机器中的 JBus 到 PCIe 桥(称为“Fire”)。

[powerpc] smu(4) 驱动程序现在提供热管理和监控功能。这允许在基于 SMU 的 Apple G5 机器上进行风扇控制和热监控,并提供 led(4) 接口来控制睡眠 LED。

已添加 tnt4882(4) 驱动程序,支持 National Instruments TNT5004 芯片的 IEEE-488(GPIB)总线。

uart(4) 驱动程序现在支持 NetMos NM9865 系列串行/并行端口。

已添加用于 eGalax USB 屏幕触控面板的 uep(4) 驱动程序。此驱动程序由 x11-drivers/xf86-input-egalax 支持。

已修复 uftdi(4) 驱动程序中的一个错误,修复了可以发送零长度数据包的问题。

usb(4) 子系统现在报告 devd(8) 通知事件,并附带设备属性,而不是附加事件。以下是一个示例 devd.conf(5) 条目,用于匹配具有 SCSI 子类和 BBB 协议的 umass(4) 设备:

notify 100 {
    match "system"      "USB";
    match "subsystem"   "INTERFACE";
    match "type"        "ATTACH";
    match "intclass"    "0x08";
    match "intsubclass" "0x06";
    match "intprotocol" "0x50";
    action "/path/to/command -flag";
};

2.2.2.1 多媒体支持

acpi_video(4) 驱动程序现在支持 LCD 亮度控制通知处理器。

acpi_sony(4) 辅助驱动程序现在支持默认显示亮度、有线 LAN 电源和低音增益。

agp(4) 驱动程序已改进。它包含一个修复,解决了一个光栅大小计算问题,这个问题会导致某些显卡无法工作。

snd_hda(4) 驱动程序现在支持 AD1981HD 编解码器使用播放混音器。

snd_hda(4) 驱动程序现在支持多通道(4.0 和 7.1)播放支持。由于未识别的同步问题,5.1 模式的支持现已禁用。支持 7.1 模式的设备可以通过 sound(4) 提供的软件升混来处理 5.1 操作。请注意,立体声流不再复制到所有端口。

2.2.2.2 网络接口支持

ath(4) 驱动程序现在支持基于 Atheros AR9285 的设备。

已修复 ath(4) 驱动程序中的一个错误,该错误导致 AR5416 芯片组(包括 AR9285)出现问题。

bge(4) 驱动程序现在支持 BCM5761、BCM5784 和 BCM57780 基础的设备。

bge(4) 驱动程序现在支持 BCM5755 或更新控制器上的 TSO(TCP 分段卸载)。

已修复 bge(4) 驱动程序中的一个长期存在的错误,该错误与 ASF 心跳发送有关。

已修复由于硬件错误导致的 bce(4)bge(4) 驱动程序中的长期稳定性问题,特别是在系统内存超过 4GB 时。此问题适用于 BCM5714、BCM5715 和 BCM5708 控制器。

已修复 bge(4) 驱动程序中的一个错误,该错误错误地启用了 BCM5754/BCM5754M 控制器上的 TSO。

已修复 if_bridge(4) 驱动程序中的一个错误,该错误使得 MTU 根据第一个添加的成员设置,即使添加失败。

if_bridge(4) 驱动程序现在支持 ioctl SIOCSIFMTU。例如,ifconfig bridge0 mtu 1280 可以将 bridge0MTU 更改为 1280。仅当所有成员具有相同的 MTU 值时,才能更改 MTU。

已添加 Broadcom BCM43xx 芯片组的 bwn(4) 驱动程序。

cxgb(4) 驱动程序已更新为 T3 固件 7.8.0。

cxgb(4) 驱动程序现在支持基于 L2/L3/L4 头部检查的硬件过滤。现在可以基于源 IP 地址、目标 IP 地址、源端口号、目标端口号、802.1q VLAN 帧标签、UDP、TCP 和 MAC 地址进行过滤。配置可以通过 cxgbtool(8) 工具完成。请注意,cxgbtool(8) 位于 src/usr.sbin/cxgbtool 中,但默认情况下不会编译。

em(4) 驱动程序已更新至版本 7.0.5。

et(4) 驱动程序现在支持 MSI 和 IPv4、TCP 和 UDP 的 Tx 校验和卸载。

fxp(4) 驱动程序现在通过 sysctl 变量导出硬件 MAC 统计信息。

igb(4) 驱动程序已更新至版本 1.9.5。

iwn(4) 驱动程序已更新,包括关于 RF 开关、bgscan 支持、挂起/恢复支持、锁定问题等的各种改进和错误修复。内核配置文件中的行设备 iwnfw 将包括所有固件映像。

ixgbe(4) 驱动程序已更新至版本 2.2.0。

msk(4) 驱动程序已改进:

  • 现在支持 Marvell Yukon 88E8042、88E8057、88E8059(Yukon Optima)设备和 DGE-560SX(Yukon XL)。

  • 已实现一个初步的中断调节功能,具有可编程倒计时定时器寄存器。默认的保持时间参数为 100us,可以通过 sysctl 变量 dev.mskc.0.int_holdoff 更改。请注意,中断调节是双端口控制器上的共享资源,因此无法为每个端口使用独立的中断调节值。

  • 已修复一个稳定性问题,在重启过程中,如果 RX 流量过重,可能会导致系统无法正常工作。

mxge(4) 驱动程序已更新为 Myricom 的固件版本 1.4.50。

re(4) 驱动程序不再在通过 DHCP 获取 IP 地址时执行不必要的接口启停操作。

re(4) 驱动程序现在使用 2048 作为 PCIe 最大读取请求大小,从而提高了大容量传输性能。

run(4) 驱动程序已添加,用于 Ralink RT2700U/RT2800U/RT3000U USB 802.11agn 设备。

已添加 Silicon Integrated Systems SiS190/191 快速/千兆以太网的 sge(4) 驱动程序,支持 TSO 和 VLAN 上的 TSO。

ste(4) 驱动程序已改进:

  • DMA 处理已改进。

  • 现在支持 Wake-On-LAN。

  • 已消除不必要的接口重新初始化。

  • 已实现带单次定时器的 RX 中断调节。默认的调节时间参数为 150us,可以通过 sysctl 变量 dev.ste.0.int_rx_mod 更改。将其设置为 0 即实际上禁用了 RX 中断调节功能。

tsec(4) 驱动程序现在支持 altq(4)

u3g(4) 驱动程序已改进,现在支持 ZTE MF636、Option Gi0322、Globetrotter GE40x 和 Novatel MC950D。

uhso(4) 驱动程序已添加,支持 Option HSDPA USB 设备。新的 uhsoctl(1) 用户空间工具可以用来启动和关闭 WAN 连接。

vge(4) 驱动程序已改进:

  • DMA 处理已改进。

  • 现在支持 Wake-On-LAN。

  • 已消除不必要的接口重新初始化。

  • 现在通过 sysctl 变量 dev.vge.0.stats 支持硬件 MAC 统计信息。

  • 已实现 VT61xx 控制器支持的带单次定时器和方案的中断调节。默认参数已调整为每秒生成不到 8k 的中断,这些参数可以通过 sysctl 变量 dev.vge.0.int_holdoffdev.vge.0.rx_coal_pktdev.vge.0.tx_coal_pkt 更改。请注意,需要通过上下循环才能使参数更改生效。

urtw(4) 驱动程序已改进,现在支持基于 RTL8187B 的设备。

FreeBSD Xen netfront 驱动程序在稳定性和性能方面已改进。

2.2.3 网络协议

FreeBSD 的 flowtable 现在支持 IPv6。这是为了每个 CPU 缓存流,用于加速 L3 和 L2 查找,并提供在启用 ECMP(等成本多路径路由)时的有状态负载均衡,通过 option RADIX_MPATH 配置。

已向 struct ifnet.if_capabilities 添加新的能力参数 LINKSTATE。此参数表示接口是否可以检查链路状态。ifconfig(8) 工具现在会显示此参数(如果支持)。

已添加新的事件处理程序 iflladdr_event。该事件指示接口上的 L2 地址已更改,并让堆叠接口(如 vlan(4))检测其下层接口已更改并进行调整,以便继续工作。这解决了 lagg(4)vlan(4) 配置的问题。

IPcomp(RFC 2393 定义的 IP 载荷压缩协议)协议现在默认启用。请注意,这需要在内核配置文件中使用 option IPSEC,而 GENERIC 内核未包含此功能。可以通过使用 sysctl 变量 net.inet.ipcomp.ipcomp_enable 禁用此功能。

ipfw(4) 子系统,包括 dummynet(4),已更新为“ipfw3”,并修复了各种错误:

  • 主要增强是完全重构的 dummynet(4) 版本,支持不同的包调度算法(可在运行时加载)、更快的队列/管道查找,以及更加清晰的内部架构和内核/用户空间 ABI,简化了未来的扩展。

  • 已从内核的关键部分移除所有 O(N) 序列的防火墙规则评估。最坏情况现在为 O(log N)。

  • 现在支持 ipfw0 虚拟接口,用于类似 pflog(4) 的日志记录。使用 sysctl net.inet.ip.fw.verbose=0 启用 ipfw0 的日志记录,net.inet.ip.fw.verbose=1 会像以前一样将日志发送到 syslog(3)

  • ipfw(4) 规则中的 me 关键字现在可以匹配接口上配置的任何 IPv6 地址,以及 IPv4 地址。

  • 已修复一个 bug,该 bug 导致 keep-alive 规则对于 IPv6 数据包不起作用。

  • 添加了查找匹配选项:

    lookup {dst-ip|src-ip|dst-port|src-port|uid|jail} N

    该选项会在表 N 中搜索指定字段,并相应地设置 tablearg。使用 dst-ip 或 src-ip 时,该选项复制了两个现有选项。与其他参数一起使用时,此选项可根据其他字段快速分发流量。

  • 已修复 sysctl(8) 变量 ip.fw.one_pass 处理的 bug。来自管道的未经延迟的数据包错误地忽略了此变量。

已修复 ng_ksocket(4)ng_ppp(4) Netgraph 节点驱动程序中的内存对齐问题。此问题修复了由于不对齐引起的内核 Panic 。

ng_bridge(4)ng_hub(4) Netgraph 节点驱动程序现在支持持久化参数。它禁用当最后一个钩子断开时自动关闭节点。为该参数添加了新的控制消息 NGM_BRIDGE_SET_PERSISTENTNGM_HUB_SET_PERSISTENT

pf(4) 子系统现在支持关键字 sloppy,用于启用 TCP 状态机来跟踪没有序列号检查的 TCP 连接。此功能在 pf 的最新版本中可用。

pfil(9) 框架现在支持为每个 VIMAGE jail 提供单独的包过滤实例,如同 ipfw(4) 一样。

已修复一个 bug,导致无法在点对点链路类型上添加代理 ARP 条目。

tap(4) 虚拟接口现在通过更新内核中的变量 if_link_state 来正确报告链路状态。

vlan(4) 虚拟接口已添加到 GENERIC 内核中。

vlan(4) 虚拟接口现在支持 TSO(TCP 分段卸载)。该能力参数命名为 IFCAP_VLAN_HWTSO,并与 IFCAP_VLAN_HWTAGGING 分开。支持此功能的驱动程序包括 age(4)alc(4)ale(4)bce(4)bge(4)cxgb(4)jme(4)re(4)mxge(4)

vlan(4) 虚拟接口现在忽略父接口名称的重命名。配置的 VLAN 接口继续使用新名称工作,而以前重命名时配置会被移除。

2.2.4 磁盘与存储

[ada(4)] 驱动现在支持 BIO_DELETE。对于固态硬盘(SSD),这使用了 ACS-2 规格草案定义的 DATA SET MANAGEMENT 命令中的 TRIM 特性。对于压缩闪存,则使用 CFA ERASE 命令,类似于 [ad(4)] 的处理方式。此更改通过执行 newfs -E /dev/ada1 来恢复支持 TRIM 命令的 SSD 的写入速度。

[ahci(4)] 驱动现在支持 Marvell 88SE912x 控制器的 SATA 部分。

[ahci(4)] 驱动现在支持支持控制器上的基于 FIS(帧信息结构)的端口倍增器切换。

[ahd(4)] 驱动现在在 [sysctl(8)] MIB 中支持三个单独的错误计数器:可修正、不可修正和致命错误。

新增了内核选项 option ATA_CAM。启用该选项后,将 [ata(4)] 控制器驱动转为 [cam(4)] 接口模块。启用此选项会废弃所有 [ata(4)] 外设驱动和接口(如 ad 和 acd),并允许原生使用 [cam(4)] 驱动 ada 和 cd 及其接口。请注意,默认情况下,在 GENERIC 内核中未启用此选项。

[ata(4)] 驱动中的一个导致中断风暴和命令超时的错误已被修复。

[ata(4)] 驱动中已移除对 USB 大容量存储设备的支持。请注意,在 GENERIC 内核中并未使用此功能,而 [umass(4)] 驱动早已支持这些设备。

FreeBSD [cam(3)] SCSI 框架有所改进:

  • SATA 和 PATA 支持得到了改善,现在它能够识别更多的设备能力。例如,[ahci(4)] 和 [siis(4)] 驱动现在会将最大标记数报告给框架,以优化 NCQ 处理。

  • 新增了加载器调优项 kern.cam.boot_delay,用于控制 [cam(3)] 在探测附加设备前的延迟时间。

  • 改进了对没有自动感应报告的总线上的设备的 SCSI 错误恢复。例如,这允许 [cam(3)] 在 CD 驱动器加载磁盘时等待,而不是立即返回错误状态。

  • [cam(4)] ATA 传输层现在支持电源开启时保持待机(PUIS)。PUIS 是一种配置 SATA 或 PATA 硬盘,以防止它们在通电时自动启动。常见应用是分时启动。

  • [cam(4)] ATA 传输层现在支持协商和启用额外的 SATA 特性,如设备启动的电源管理、从部分模式到待机模式的自动过渡和 DMA 自动激活。

已修复 [ciss(4)] 驱动在高负载下的活锁问题。

修复了 [fdc(4)] 驱动中的一个错误,该错误导致内核模块无法卸载。

[glabel(8)] 现在支持以下每个标签类型的 sysctl 变量,以启用标签功能:

kern.geom.label.ext2fs.enable
kern.geom.label.iso9660.enable
kern.geom.label.msdosfs.enable
kern.geom.label.ntfs.enable
kern.geom.label.reiserfs.enable
kern.geom.label.ufs.enable
kern.geom.label.ufsid.enable
kern.geom.label.gptid.enable
kern.geom.label.gpt.enable

请注意,这些变量也可以作为加载器调优项。默认情况下,它们已启用(值为 1)。

包括复杂的 [gconcat(8)]、[gmirror(8)]、[graid3(8)]、[gstripe(8)] 和一些硬件 RAID 设备驱动(如 [twa(4)])在内的 [geom(8)] 提供者现在会向上层报告其最佳访问块大小。

[gmirror(8)] 工具现在支持配置 -p 优先级 命令,用于改变提供者的优先级。

[gmirror(8)] 工具中用于负载平衡模式的算法已经改变,现在的默认算法取代了原有的 split 模式:

  • 现在不再通过测量每个硬盘的最后一次请求执行时间来选择最小的时间,而是使用每个硬盘上运行的请求的平均数量。这种信息更准确、更及时,能够更均匀、可预测地分配负载。

  • 每个硬盘会跟踪上次提交请求的偏移量。如果新请求的偏移量与之前某个硬盘的请求偏移量相匹配或接近,则优先选择该硬盘。这显著加速了同时的顺序读取。

[gmultipath(8)] 工具现在支持命令 destroyrotategetactive

修复了 graid3(8) 驱动中的一个错误,该错误在收到大请求时会导致系统崩溃。此问题发生在 MAXPHYS 设置大于 128k 时。

gstripe(8) 的默认块大小已从 4k 增加到 64k。

新增了 GEOM_SCHED 模块。该模块支持以设备无关的方式调度磁盘 I/O 请求。支持的算法是预期调度器 gsched_rr,它在存在竞争随机访问模式时提供了显著的性能提升。更多细节请参考 gsched(8) 手册。

新增了 HAST(高度可用存储)框架:

  • 这是一个允许在两个通过 TCP/IP 网络连接的物理分离机器上透明地存储数据的框架。HAST 以主-从(主-备,主-从)配置工作,这意味着任何时刻只有一个集群节点可以处于活动状态。只有主节点能够处理 HAST 管理的设备的 I/O 请求。目前,HAST 限制为最多两个集群节点。

  • 它在块级别操作;它在 /dev/hast/ 目录中提供磁盘类似设备供文件系统和/或应用程序使用。在块级别操作使得它对文件系统和应用程序透明。使用 HAST 提供的设备与使用原始磁盘、分区等没有任何区别。它们都是 FreeBSD 中常规的 geom(8) 提供者。

  • 用户空间部分包括 hastd(8)hastctl(8)hast.conf(5)。更多细节请参见 http://wiki.FreeBSD.org/HAST

isp(4) 驱动的稳定性得到了提升。

为 Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA 控制器新增了 mvs(4) CAM ATA 驱动。此驱动支持与 [ata(4)] 驱动相同的硬件,但提供了更多附加功能,如 NCQ 和 PMP。

siis(4) 驱动现在默认启用 SiI3124 基础设备的 MSI。可以通过使用 hint.siis.0.msi 加载器调优项禁用此功能。

siis(4) 驱动中 PCIe 芯片的最大读取请求大小已从 512 字节增加到 1024 字节,以提供更好的性能。

twa(4) 驱动已更新到 LSI 的最新版本。

2.2.5 文件系统

msdosfs(5) 子系统现在是 MP-safe 的,并且修复了一个在强制卸载时发生的竞态条件。

FreeBSD NFS 子系统现在支持客户端中负面名称缓存条目的超时。这避免了当另一个客户端在相同的 NFS 服务器时间戳内创建一个相同名称的条目时,伪造的负面名称缓存条目永久存在。可以使用挂载选项 negnametimeo 来覆盖默认的超时时间间隔(60秒),并且可以按挂载点单独设置。将 negnametimeo 设置为 0 可以禁用该挂载点的负面名称缓存。

修复了在创建 nfsiod(8) 线程时发生的 FreeBSD NFS 子系统中的竞态条件。此修复还解决了 FreeBSD NFS 客户端与 Linux NFS 服务器组合时出现的互操作性问题。

ffs(7) 文件系统中的 inode 编号处理现在为无符号类型。之前,一些较大的 inode 编号可能会被误认为是负值,这一问题在 16k 块大小的 16Tb 以上的文件系统中显现出来。newfs(8) 工具永远不会创建超过 2^32 个 inode 的文件系统,必要时通过减少每个圆柱组的 inode 数量来保持在限制范围内。

UFS 文件系统(ffs(7))现在支持 NFSv4 ACL。

FreeBSD VFS(9) 子系统现在支持新的 sysctl 变量 vfs.vlru_allow_cache_src。这允许 vnlru 内核线程回收作为名称缓存记录源的目录 vnodes。默认情况下未启用此功能,因为对于典型工作负载,它会使名称缓存变得不可用,但大规模嵌套目录树容易使任何访问文件系统的进程陷入 1 秒的等待,直到 vnlru 内核线程完成。

ZFS 文件系统得到了改进:

  • 现在支持 NFSv4 ACL。

  • L2ARC 代码在稳定性和性能方面得到了改进。

  • zpool 版本已更新至版本 14,现在可以使用在 OpenSolaris 2009.06 上创建的 zpools。

  • 添加了 sysctl 变量 vfs.zfs.txg.write_limit_override,可以用于调节 ZFS 写入限速。

  • 添加了 ZFS 预取统计信息作为 sysctl 变量 kstat.zfs.misc.zfetchstats

  • zfs(8) 的 zpool export 命令现在支持 -F 参数。使用此参数导出时,zpool.cache 保持不变。

  • 修复了 ZFS 在不同平台之间发送/接收数据时可能出现的数据损坏问题,先前版本可能会导致符号链接损坏。

  • 修复了 ZFS 接收时可能发生的死锁问题。

  • 修复了 ZFS 销毁和回滚时可能出现的崩溃问题。

  • 修复了由于忙碌状态导致 ZFS 重命名偶尔失败的问题。

  • 修复了当文件系统忙碌时 zfs snapshot -r 失败以及 zfs receive 可能因 E2BIG 错误而失败的问题。

2.3 用户空间变化

修复了 bsnmpd(1) 程序中的一个错误,该错误会导致在负载较重的系统上出现高 CPU 占用。

修复了 bzip2(1) 工具中的一个错误,该错误使其无法处理多会话的 bzip2 文件。

camcontrol(8) 工具现在支持在子命令 identify 中使用 -v 参数,显示完整的标识数据块。

camcontrol(8) 工具现在支持在子命令 cmd 中使用 -d-f 参数,分别用于指定 ATA 命令使用的 DMA 协议或 FPDMA(NCQ)协议。

chgrp(1)chown(8) 现在支持 -x 参数,以便在递归操作时不遍历多个挂载点。

cp(1) 现在支持 -x 参数,以便在递归操作时不遍历多个挂载点。

cp(1)find(1)getfacl(1)mv(1)setfacl(1) 工具现在支持 NFSv4 ACL。

diskinfo(8) 现在支持报告磁盘条带大小和偏移量。这帮助用户优化对齐并调整文件系统以获得更好的性能。

修复了 ee(1) 工具中的一个错误,该错误可能导致程序崩溃。

修复了 factor(6) 工具中的一个错误,该错误导致性能下降。

fetch(1) 工具现在支持 HTTP 摘要认证。

修复了 fetch(1) 工具中的一个错误,该错误错误地评估了变量 NO_PROXY

修复了 find(1) 工具中的一个错误,选项 -newerXB 被错误地解释为与 -newerXm 相同。

修复了 fnmatch(3) 函数中的一个错误。当字符串中包含 * 字符并且指定了 FNM_PATHNAME 时,FNM_PERIOD 参数未能正确工作。

修复了 fsck_ffs(8) 工具中的一个错误,该错误导致 UFS1 文件系统的最后一个柱面组在修复后仍被报告为损坏。

gcore(1) 工具现在能够识别进程中的线程,并支持在线程级别上进行转储操作。

ifconfig(8) 工具现在支持操作 ndp(8) 处理的 NDP 参数。

ifconfig(8) 工具现在支持一个描述 value 命令,用于为指定的接口添加描述 value

indent(1) 工具现在支持 -ta 参数,将所有以 _t 结尾的标识符视为类型。

LZMA2 无损数据压缩算法的 liblzma 库和用户空间工具 xz(1)xzdec(1)lzma(1)lzmainfo(1) 已经导入。当旧系统升级到 8.1-RELEASE 时,可能需要卸载在 Ports 中找到的版本(archivers/xz),并重新编译依赖于它的软件包。

[amd64, i386] libz 库的性能得到了提升。对于 FreeBSD/i386,请注意此改进仅在 i686 类 CPU 上使用默认指令,且默认情况下已禁用。可以在 /etc/make.conf 中指定 CPUTYPE=pentium4 来启用这些指令。

ln(1) 工具现在在命令行选项中指定 -f 参数和两个相同的文件条目时能够正确报告错误。它首先删除文件,然后报告“未找到”错误。

ln(1) 工具现在在创建指向目录的链接时会删除末尾的斜杠字符。在以前的版本中,以下命令序列会报告错误:

% mkdir test1 test2
% ln -s ../test2/ test1

mount_nfs(8) 工具现在支持除了现有的方式之外,还支持语法 [ipaddr]:path。这允许在地址字段中使用 IPv6 地址,并允许挂载包含“:”的路径。

修复了 netstat(1) 工具中的一个错误,该错误导致 netstat -f netgraph 无法正常工作。

netstat(1) 工具现在支持在 -s 参数显示的统计信息中包含 ARP 信息。

netstat(1) 工具现在支持 -q <number> 选项,用于指定输出的数量。此选项与 -w 选项一起使用。

newfs_msdos(8) 工具现在使用 NO_NAME 作为默认卷标,并使用 BSD4.4 作为 OEM 字符串。

newsyslog(8) 工具现在不再将 PID 文件不存在视为错误。一个新的 -P 参数可以将其恢复到旧的行为。

ntpd(8) 程序现在不再尝试绑定到 IPv6 任播地址。

pam_krb5(8) PAM 模块现在支持 no_user_check 选项。此选项允许授权一个本地系统未知的用户。

pathchk(1) 工具现在支持 POSIX-1.2008 中定义的 -P 参数。此参数检查空路径名和以 “-” 开头的组件。

periodic(8) 日常脚本中使用的变量 daily_clean_tmps_ignore 现在包括 /tmp/.snap。这可以防止 /tmp/.snap 被删除。

procstat(1) 工具现在支持两个新参数 -i-j,用于显示信号处置信息以及信号的挂起/阻塞状态。

pwait(1) 工具已被添加。它类似于 Solaris 工具,等待任何进程终止。

修复了 restore(8) 工具中的一个错误,该错误在使用 -P 选项时导致短读取。

rtsold(8)-a 参数现在排除禁用 IPv6 或 ICMPv6 路由器广告消息接收的接口,避免它们出现在自动探测接口列表中。

scandir(3)alphasort(3) 函数已更新,以符合 POSIX.1-2008(IEEE Std 1003.1-2008)标准。

sed(1) 工具现在支持 -r 参数,该参数与 -E 参数完全相同。此参数用于与 GNU 版本的兼容性。

服务名称数据库 services(5)(通常位于 /etc/services)现在也支持 db(3) 样式的数据库,以提高查找性能。以下 /etc/nsswitch.conf 中的条目启用使用二进制数据库文件:

services: db

请注意,可以通过 services_mkdb(8) 在 /var/db/service.db 中创建 db(3) 样式的数据库。

sighold(2)sigignore(2)sigpause(2)sigrelse(2)sigset(2) 函数已实现,以便从 System V 类系统移植软件时更为简便。请注意,这些函数在 POSIX.1-2008 XSI(IEEE Std 1003.1-2008,X/Open 系统接口)中已定义,但现在已过时。由于 FreeBSD 已经有来自 4.2BSD 的另一个 sigpause(3) 函数,因此 XSI 接口的版本已实现为 xsi_sigpause()

sshd(8)cron(8)inetd(8)syslogd(8) 程序现在会设置内存参数 MADV_PROTECT,以保护它们免受 FreeBSD 内核的终止,尤其是在内存不足时。这种进程终止通常发生在交换空间密集的工作负载中。

stat(1) 工具现在支持 %Sf 输出说明符,用于以符号形式显示文件参数。

strsignal(3) 函数现在是线程安全的。

sysctl(8) 工具现在支持一个 -i 参数,用于在检索单个 OID 时忽略失败。这允许将相同的 OID 列表传递给不同系统上的 sysctl(8),即使某些 OID 在某些系统上不存在,仍然能够尽可能多地获取信息。

traceroute(8) 工具现在即使在 VIMAGE jail(8) 环境中,也能正确执行源地址选择。

unifdef(1) 工具已更新为版本 1.188。现在支持一个新的 -B 参数,用于压缩已删除部分周围的空行,以防止代码段周围的空行被重复。

unzip(1) 工具现在支持在提取文件时,如果已经存在同名文件,则支持重命名查询。

unzip(1) 工具现在支持与 Info-ZIP 兼容的参数 -C-c-f-p-v

usbconfig(8) 工具现在支持一个新的 -d 参数,用于指定 ugen(4) 设备,并支持命令 add_quirkremove_quirk

whois(1) 工具现在支持像查询 IPv4 一样查询 IPv6 地址,无需指定 ARIN 服务器。-d 参数已被移除,因为它现在已经过时。

新增了一个错误号 ENOTCAPABLE,当进程请求对一个文件描述符进行操作,而该文件描述符的能力参数不授权此操作时,将返回该错误。

zfs(8) 命令现在支持一个新的 receive -u 参数,用于指定接收到的 ZFS 不应自动挂载。

2.3.1 /etc/rc.d 脚本

添加了 service(8) 命令。该命令提供了一个简单的命令行接口,供用户操作 rc.d 系统。

rc.d/ipfw 脚本和 /etc/rc.firewall 现在支持 IPv6,而 rc.d/ip6fw 脚本和 /etc/rc.firewall6 已被废弃。请注意,rc.conf(5) 中的 ipv6_firewall_* 变量已被 firewall_client_net_ipv6firewall_simple_iif_ipv6firewall_simple_inet_ipv6firewall_simple_oif_ipv6firewall_simple_onet_ipv6 替代。

新增了一个 rc.d 脚本 rc.d/rtsold。该脚本用于管理 rtsold(8) 守护进程。

新增了一个 rc.d 脚本 rc.d/static_arp。该脚本允许管理员在启动时静态定义 MAC 地址与 IPv4 地址的映射。有关更多详情,请参见 rc.conf(5) 手册。

rc.d/tmp 脚本现在使用以 /tmp/.diskless 为前缀的唯一目录名,而不是直接使用 /tmp/.diskless。这修复了当 /tmp/.diskless 在脚本运行之前已经存在时的问题。

新增了一个 rc.d 脚本 rc.d/ubthidhci。该小脚本调用 usbconfig(8) 将 USB 蓝牙控制器从 HID 模式切换到 HCI 模式。

rc.conf(5) 现在支持 firewall_coscripts 变量。该变量应包含在防火墙启动或停止后执行的命令列表。

rc.conf(5) 现在支持配置 vlan(4) 接口作为类似于 wlan(4) 接口的子设备。通过新的 vlans_IF 变量列出 vlan(4) 接口。如果 VLAN 接口是数字,则该数字将作为接口的 VLAN 标签,接口将命名为 IF.tag。否则,VLAN 标签必须通过 create_args_IF 变量中的 VLAN 参数提供。

2.4 第三方软件

ACPI-CA 已更新至 20100304 版本。

awk 已更新从 2007 年 10 月 23 日的版本到 2009 年 11 月 26 日的版本。

ISC BIND 已更新至 9.6.2-P2 版本。

netcat 已更新至 4.7 版本。

OpenSSH 已更新从 5.1p1 版本到 5.4p1 版本。

OpenSSL 已更新至 0.9.8n 版本。

sendmail 已更新至 8.14.4 版本。

时区数据库已更新至 tzdata2010j 版本。

2.5 发布工程与集成

FreeBSD 发布版本的 ISO 镜像文件名现在以 FreeBSD- 开头。

支持的 GNOME 桌面环境版本 (x11/gnome2) 已更新至 2.28.2。

支持的 KDE 桌面环境版本 (x11/kde4) 已更新至 4.4.3。

3 从旧版 FreeBSD

[amd64, i386] 通过 freebsd-update(8) 工具支持在 RELEASE 版本之间进行升级(包括各种安全分支的快照)。二进制升级过程将更新未修改的用户空间实用工具以及未修改的 GENERIC 内核,这些内核作为 FreeBSD 官方发行版的一部分进行分发。freebsd-update(8) 工具要求升级的主机具有互联网连接。

通过从 CDROM 发行媒体的 sysinstall(8) 主菜单中的 Upgrade 选项,支持旧版本的二进制升级。这种类型的二进制升级对于非 i386、非 amd64 的机器或没有互联网连接的系统可能会有用。

根据 /usr/src/UPDATING 中的说明,支持基于源代码的升级(即通过重新编译 FreeBSD 基本系统从源代码升级)。

重要提示:

在升级 FreeBSD 之前,务必先备份 所有 数据和配置文件。


此文件及其他与发布相关的文档可以从 ftp://ftp.FreeBSD.org/ 下载。

如有 FreeBSD 相关问题,请在联系 questions@FreeBSD.org 之前阅读 文档

如有关于此文档的问题,请发送电子邮件至 doc@FreeBSD.org

最后更新于