物理磁盘命名规则驱动器类型驱动设备命名IDE 硬盘驱动器adIDE CDROM 驱动器acdSCSI 硬盘以及 USB 大容量存储设备daSCSI CDROM 驱动器cd各类非标准 CDROM 驱动器用于 Mitsumi CD-ROM 的 mcd 以及用于
Sony CD-ROM 驱动器的 scdFloppy drivesfdSCSI tape drivessaIDE tape drivesastFlash drivesfla for &diskonchip; Flash deviceRAID drivesaacd for &adaptec; AdvancedRAID,
mlxd and mlyd
for &mylex;,
amrd for AMI &megaraid;,
idad for Compaq Smart RAID,
twed for &tm.3ware; RAID.
DavidO'BrienOriginally contributed by 添加磁盘磁盘添加假设我们要给一台只有一个磁盘的机器增加一个新的 SCSI 磁盘。首先
需要关掉计算机,然后按操作规程来安装驱动器,控制器和驱动程序。由于
各厂家生产的产品各不相同,具体的安装细节不在此文档介绍之内。以 root 用户登录。安装完驱动后,检查一下
/var/run/dmesg.boot 有没有找到新的磁盘。在我们
的例子中新增加的磁盘就是 da1,我们从
/1 挂上它。 (如果您正添加 IDE 驱动器,
则设备名应该是 ad1)。
partitionsslicesfdisk因为 FreeBSD 运行在 IBM-PC 兼容机上,它必须遵循 PC BIOS 分区规范。
这与传统的 BSD 分区是不同的。一个 PC 的磁盘最高只能有四个 BIOS
主分区。如果磁盘只安装 FreeBSD 您可以使用 dedicated
模式。另外, FreeBSD 必须安装在 PC BIOS 支持的分区内。FreeBSD 把分区叫作
slices 这可能会把人搞糊涂。您也可以在只安装
FreeBSD 的磁盘上使用 slices,也可以在安装有其它操作系统的磁盘上使用
slices。这不会影响其它操作系统的 fdisk 分区工具。在 slice 方式表示下,驱动器被添加到 /dev/da1s1e。
可以读作:SCSI 磁盘,编号为 1 (第二个SCSI 磁盘), slice 1 (PC BIOS 分区 1),
的 BSD 分区 e 。在有些例子中,也可以简化为
/dev/da1e。由于 &man.bsdlabel.8; 使用 32-位 的整数来表示扇区号,
因此在多数情况下它的表现力限于每个磁盘
2^32-1 个扇区或 2TB。 &man.fdisk.8; 格式允许的起始扇区号不能高于
2^32-1 而分区长度也不能大于 2^32-1, 通常情况下这限制了分区大小最大为
2TB 而磁盘大小则是 4TB。 &man.sunlabel.8; 格式的限制是每个分区
2^32-1 个扇区, 但允许 8 个分区因此最大支持 16TB 的磁盘。
要使用更大的分区, 则应使用 &man.gpt.8;。使用 &man.sysinstall.8;sysinstalladding diskssu使用 Sysinstall您可以使用 sysinstall
命令的菜单来分区和标记一个新的磁盘。 这一操作需要有 root 权限,
您可以直接使用 root 账户登录或者使用
su 命令来切换到 root 用户。运行
sysinstall ,然后选择
Configure 菜单。在
FreeBSD Configuration Menu 下,上下滚动,
选择 Fdisk 条目。fdisk 分区编辑器进入 fdisk 分区编辑器后,选择
A ,FreeBSD 将使用全部的磁盘。当被告知
remain cooperative with any future possible operating
systems时,回答 YES。使用
W 保存刚才的修改。现在使用 Q
退出 FDISK 编辑器。下面会看到有关 主引导区
的信息。 现在您已经在运行的系统上添加了一个磁盘,
因此应该选择 None。Disk Label 编辑器BSD partitions接下来,您应该退出 sysinstall
并且再次启动它,并按照上面的步骤直接进入
Label 选项。进入 磁盘标签编辑器。
这就是您要创建的 BSD 分区。一个磁盘最多可以有 8 个分区,标记为
a-h。有几个分区标签有特殊的用途。
a 分区被用来作为根分区(/)。
系统磁盘(例如:从那儿启动的分区)必须有一个 a
分区。b 分区被用作交换分区,可以用很多磁盘用作交
换分区。 c 分区代表整个硬盘,或在 FreeBSD slice
模式下代表整个 slice。其它分区作为一般分区来使用。sysinstall 的标签编辑器用 e
表示非 root 和非 swap 分区。在标签编辑器中,可以使用键入 C
创建一个文件系统。当提示这是否是一个 FS(文件系统)或 swap 时,选择
FS,然后给出一个加载点(如: /mnt)。
当在 post-install 模式时添加一个磁盘, sysinstall
不会在 /etc/fstab 中创建记录,所以是否指定加载点并不重要。
现在已经准备把新标签写到磁盘上,然后创建一个文件系统,可以按下
W。出现任何错误都会不能创建新的分区。可以退出标签编辑
器然后重新执行 sysinstall 。完成下面一步就是编辑 /etc/fstab,为您的磁盘添加一个新
记录。使用命令行工具使用 Slices这步安装将允许磁盘与可能安装在您计算机上的其它操作系统一起
正确工作,而不会搞乱其它操作系统的分区。推荐使用这种方法来安装
新磁盘,除非您有更好的理由再使用 dedicated
模式!&prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1
&prompt.root; fdisk -BI da1 #初始化新磁盘
&prompt.root; bsdlabel -B -w da1s1 auto #加上标签
&prompt.root; bsdlabel -e da1s1 # 现在编辑您刚才创建的磁盘分区
&prompt.root; mkdir -p /1
&prompt.root; newfs /dev/da1s1e # 为您创建的每个分区重复这个操作
&prompt.root; mount /dev/da1s1e /1 # 挂上分区
&prompt.root; vi /etc/fstab # 完成之后,添加合适的记录到您的 /etc/fstab文件。如果有一个 IDE 磁盘,记得要用 ad 替换前面的
da。专用模式OS/2如果您并没有安装其它的操作系统,可以使用 dedicated
模式。记住这种模式可能会弄乱 Microsoft 的操作系统,但不会对它进行破坏。
它不识别找到的 IBM &os2 的 appropriate 分区。&prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1
&prompt.root; bsdlabel -Bw da1 auto
&prompt.root; bsdlabel -e da1 # 创建 `e' 分区
&prompt.root; newfs /dev/da1e
&prompt.root; mkdir -p /1
&prompt.root; vi /etc/fstab # 为 /dev/da1e添加一个记录
&prompt.root; mount /1另一种方法:&prompt.root; dd if=/dev/zero of=/dev/da1 count=2
&prompt.root; bsdlabel /dev/da1 | bsdlabel -BR da1 /dev/stdin
&prompt.root; newfs /dev/da1e
&prompt.root; mkdir -p /1
&prompt.root; vi /etc/fstab # 为 /dev/da1e添加一个记录
&prompt.root; mount /1RAID软件 RAIDChristopherShumwayOriginal work by JimBrownRevised by RAIDsoftwareRAIDCCD连接磁盘驱动器配置 (CCD) 选择一个大容量存储比较好的解决方案,最重要的因素是产品的速度、
性能和成本。 通常这三者不可能都满足;要获得比较快和可靠的大容量存储设备,
就比较昂贵。但如果将成本降下来,那它的速度或可靠性就会打折扣。
在设计下面描述的系统时, 价格被选为最重要的因素,
接下来是速度和性能。 这个系统的数据传输速度基本上受限于网络。
性能也非常重要,
CCD 驱动器上的所有数据都被备份到了 CD-R 盘, 可以很容易地对数据进行恢复。
在选择一个大容量的存储解决方案时,第一步是要设计您自己的需求。
如果您的需求更偏重于速度和性能,那么您的解决方案将就不同于上面的设计。
安装硬件除了 IDE 系统磁盘外,还有三个 Western Digital 30GB、5400 RPM
的 IDE 磁盘构成了大约 90G 的连接磁盘驱动存储空间。 理想情况是每个 IDE
硬盘都独占 IDE 控制器和数据线, 但为了尽可能降低成本, 通常并不会安装更多的控制器,
而是通过配置跳线,使每个 IDE 控制器都管理一个主盘和一个从盘。重启动后,系统 BIOS 被配置成自动检测硬盘。FreeBSD 检测到它们:ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33如果 FreeBSD 没有检测到它们,请确定它们的跳线是否设置
正确。大多数 IDE 磁盘有一个 Cable Select 跳线。这个
不是 设置 master/slave 硬盘的跳线。查阅文档
信息来确定正确的跳线设置。接下来考虑的是,如何创建文件系统。应该好好研究一下 &man.vinum.8; ()和 &man.ccd.4; 两种方式,在这里我们选择 &man.ccd.4;
安装 CCD&man.ccd.4; 允许用户将几个相同的的磁盘通过一个逻辑文件系统
连接起来。要使用 &man.ccd.4;,您需要在内核中配置 &man.ccd.4;
支持选项。把这行加入到内核配置文件中,然后重建内核:device ccd对 &man.ccd.4; 的支持也可以内核模块的形式载入。要安装 &man.ccd.4;, 首先需要使用 &man.bsdlabel.8; 来编辑硬盘:bsdlabel -w ad1 auto
bsdlabel -w ad2 auto
bsdlabel -w ad3 auto此处将整个硬盘创建为 ad1c, ad2c
和 ad3c。下一步是改变 disklable 的类型。也可以使用 &man.bsdlabel.8; 来编辑:bsdlabel -e ad1
bsdlabel -e ad2
bsdlabel -e ad3这儿在每个已经设置了 EDITOR 环境变量的磁盘上打开了
disklable,在我我例子中使用的是 &man.vi.1;。可以看到:8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)添加一个新的 e 分区给 &man.ccd.4; 用。这可以是
c 分区的一个副本, 但 必须
是 4.2BSD。做完之后,您会看到一面这些:8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)建立文件系统现在已给每个磁盘都加上了标签,下面需要建立 &man.ccd.4;。要这样做,
需要使用 &man.ccdconfig.8; 工具,同时要提供类似下面的选项:ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e每个选项的意义和用法如下所示:配置设备的第一个参数,在这是 /dev/ccd0c。
/dev/ 部分是任选项。下一个参数是文件系统的插入页(interleave)。插入页定义了一个
磁盘块中一个分段或条带(stripe)的大小,通常是 512 个字节。所以一个为
32 的插入页将是 16,384 字节。插入页为 &man.ccdconfig.8; 附带了标记。如果您要启用驱动器镜像,
需要在这儿指定它。在这个配置中没有做 &man.ccd.4; 的镜像,所以把它
设为 0 (zero)。 &man.ccdconfig.8; 的最后配置是设备的排列问题。使用完整的设备
路径名。运行 &man.ccdconfig.8; 后 &man.ccd.4; 就配置好了。现在要创建文件
系统了,参考 &man.newfs.8; 选项,执行下同的命令: newfs /dev/ccd0c自动创建最后,要挂上 &man.ccd.4; ,需要先配置它。把当前的配置文件写入
/etc/ccd.conf 中,使用下面的命令:ccdconfig -g > /etc/ccd.conf当重新启动系统时,如果 /etc/ccd.conf 存在,
脚本 /etc/rc 就运行 ccdconfig -C。
这样就能自动配置 &man.ccd.4; 以到它能被挂上。如果启动进入了单用户模式,在 &man.mount.8; 上 &man.ccd.4;
之前,需要执行下面的命令来配置队列:ccdconfig -C要自动挂接 &man.ccd.4;,需要为 &man.ccd.4; 在
/etc/fstab 中配置一个记录,以便在启动时它能被挂上。
如下所示:/dev/ccd0c /media ufs rw 2 2 Vinum 卷管理RAIDsoftwareRAIDVinumVinum 卷管理是一个实现虚拟磁盘的块驱动设备工具。它使磁盘从
块设备的接口和数据映射中独立出来。与传统的存储设备相比,增加了
灵活性、性能和可靠性。 &man.vinum.8; 实现了 RAID-0、RAID-1 和
RAID-5 三种模式,它们既可以独立使用,也可组合使用。参考 得到更多 &man.vinum.8;
的信息。硬件 RAIDRAIDhardwareFreeBSD 支持很多硬件 RAID 控制器。
这些硬件不需要 FreeBSD 指定软件来管理 RAID 系统。
使用 BIOS 支持的硬件,一般情况下这些硬件可以自行操作。
下面是一个简明的描述设置一个 Promise IDE RAID 控制器。
当硬件设备装好且系统重启后,屏幕上显示一个询问信息。接着进入硬件设置屏幕。在这里,
您可以把所有的磁盘联合在一起使用。这样 FreeBSD 将磁盘看作一个驱动器。其它
级别的 RAID 也可以相应的进行设置。
重建 ATA RAID1 阵列FreeBSD 允许您热插拔阵列中损坏的磁盘。
在您重新启动系统之前请注意这一点。您可能会在 /var/log/messages 或者在 &man.dmesg.8;
的输出中看到类似下面这些的内容:ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\
status=59 error=40
ar0: WARNING - mirror lost使用 &man.atacontrol.8;,查看更多的信息:&prompt.root; atacontrol list
ATA channel 0:
Master: no device present
Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0
ATA channel 1:
Master: no device present
Slave: no device present
ATA channel 2:
Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
ATA channel 3:
Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
&prompt.root; atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED首先您应将包含故障盘的 ata 通道卸下,
以便安全地将其拆除:&prompt.root; atacontrol detach ata3换上磁盘重新挂接 ata 通道:&prompt.root; atacontrol attach ata3
Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present将新盘作为热备盘加入阵列:&prompt.root; atacontrol addspare ar0 ad6重建阵列:&prompt.root; atacontrol rebuild ar0可以通过下面的命令来查看进度:&prompt.root; dmesg | tail -10
[output removed]
ad6: removed from configuration
ad6: deleted from ar0 disk1
ad6: inserted into ar0 disk1 as spare
&prompt.root; atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed等待操作完成。MarcFonvieilleContributed by USB 存储设备USBdisks到目前为止,有许多外部外部存储解决方案,
例如:通用串行总线 (USB):硬盘、USB thumbdrives、CD-R burners
等等。 &os; 为这些设备提供了支持。配置 USB 大容量存储设备驱动,在 &man.umass.4;,
中提供了对 USB 存储设备的支持。如果您使用
GENERIC 内核,您不必要改变配置文件里的任何内容。
如果您使用了定制的内核,就要确定下面的行出现在您的内核配置文件里:device scbus
device da
device pass
device uhci
device ohci
device usb
device umass &man.umass.4; 驱动程序使用 SCSI 子系统来访问 USB 存储设备,
您的 USB 设备将被系统看成为一个 SCSI 设备。依靠您主板上的 USB 芯片,
您只须选择 device
uhci 或 device ohci 二者之一即可,
但是两者都加入内核配置文件当中也没有坏外。
不要忘了如果您加入了上面的几行要重新编译和安装内核。如果您的 USB 设备是一个 CD-R 或 DVD 刻录机, SCSI CD-ROM
驱动程序, &man.cd.4;, 就必须加入内核中通过下面这行:device cd由于刻录机被视为 SCSI 设备, 因此, 不应该在内核配置文件中使用
&man.atapicam.4; 驱动程序。在 &os; 中已经提供了对 USB 2.0 控制器的内建支持;
然而, 您必须在编译内核时在配置中加入:device ehci注意, 如果需要 USB 1.X 的支持, 您仍需要使用
&man.uhci.4; 和 &man.ohci.4; 驱动程序。测试配置配置好后准备进行测试:插入您的 USB 设备,
在系统信息中 (&man.dmesg.8;), 应该会出现像下面的设备:umass0: USB Solid state disk, rev 1.10/1.00, addr 2
GEOM: create disk da0 dp=0xc2d74850
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device
da0: 1.000MB/s transfers
da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C)当然啦,商标,设备标识
(da0) 和其它的细节信息会根据您的配置不同
而有所不同。因为 USB 设备被看作 SCSI 设备中的一个,
camcontrol 命令也能够用来列出
USB 存储设备和系统的关联:&prompt.root; camcontrol devlist
<Generic Traveling Disk 1.11> at scbus0 target 0 lun 0 (da0,pass0)如果设备上已经包含了文件系统, 现在应该就可以挂接它了。 如果需要,
请参阅 来了解如何在 USB驱动器上格式化和创建分区。如果希望设备能够被普通用户挂接,
还需要做一些其它操作。 首先, 在 USB 存储设备连接到计算机上时,
系统自动生成的设备文件, 必须是该用户能够读写的。
一种做法是让所有属于 operator 组的用户都可以访问该设备。
要完成这项工作, 首先需要用 &man.pw.8; 来给用户指定组。 其次,
在生成设备文件时, operator 组应能读写它们。 这可以通过在
/etc/devfs.rules 中增加一些相应的设置来实现:[localrules=5]
add path 'da*' mode 0660 group operator如果系统中已经有其它 SCSI 磁盘, 则上述操作必须做一些变化。
例如, 如果系统中已经存在了设备名为 da0 到
da2 的磁盘, 则第二行应改为:add path 'da[3-9]*' mode 0660 group operator这会将系统中已经存在的磁盘, 排除在属于 operator
组的设备之外。另外, 您还需要在 /etc/rc.conf 文件中,
启用 &man.devfs.rules.5; 规则集:devfs_system_ruleset="localrules"接下来, 需要配置内核, 令普通用户能够挂接文件系统。
最简单的方法是将下面的配置加入到
/etc/sysctl.conf:vfs.usermount=1注意, 这个设置只有在下次重启系统时才会生效。
另外, 您也可以使用 &man.sysctl.8; 来设置这个变量。最后一步是创建将要挂接文件系统的目录。
这个目录必须是属于将要挂接文件系统的用户的。
以 root 身份为用户建立属于该用户的
/mnt/username
(此处 username 应替换成用户的登录名,
并把 usergroup 替换成用户所属的组):&prompt.root; mkdir /mnt/username
&prompt.root; chown username:usergroup /mnt/username假设已经插入了一个 USB 读卡设备, 并且系统将其识别为
/dev/da0s1, 由于这些设备通常是 FAT
文件系统, 用户可以这样挂接它们:&prompt.user; mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username如果拔出设备 (必须首先将其对应的磁盘卷卸下),
则您会在系统消息缓冲区中看到类似下面的信息:umass0: at uhub0 port 1 (addr 2) disconnected
(da0:umass-sim0:0:0:0): lost device
(da0:umass-sim0:0:0:0): removing device entry
GEOM: destroy disk da0 dp=0xc2d74850
umass0: detached深入阅读除了 Adding
Disks 和 Mounting and
Unmounting File Systems 章之外,阅读
&man.umass.4;, &man.camcontrol.8;, 和 &man.usbdevs.8;
也是很有益的。MikeMeyerContributed by 创建和使用光学介质(CD)CDROMscreating介绍CD 与普通的磁盘相比有很多不同的特性。最初它们是不能被用户写入的。
由于没有磁头和磁道移动时的延迟,所以它们可以连续的进行读取。
方便的在两个系统之间进行数据的传输,比起相同大小的存储介质来说。CD 有磁道,这关系到数据读取时的连续性而不是物理磁盘的性能。
要在 FreeBSD 中制作一个 CD,您要准备好要写到 CD 上的数据文件,
然后根据每个 tracks 写入到 CD。ISO 9660文件系统ISO 9660ISO 9660 文件系统被设计用来处理这些差异。
但令人遗憾的是, 它也有一些其他文件系统所没有的限制, 不过幸运的是,
它提供了一项扩展机制, 使得正确写入的 CD 能够超越这些限制,
而又能在不支持这些扩展的系统上正常使用。sysutils/cdrtoolssysutils/
port 包括了 &man.mkisofs.8;, 这是一个可以用来生成包含 ISO 9660 文件系统的数据文件的程序。
他也提供了对于一些扩展的支持选项,下面将详细介绍。CD burner (刻录机)ATAPI使用哪个工具来刻录 CD 取决于您的 CD 刻录机是 ATAPI 的,
还是其他类型的。 对于 ATAPI CD 刻录机, 可以使用基本系统附带的 burncd 程序。 SCSI 和 USB CD
刻录机, 则需要配合
cdrecord 程序使用,
它可以通过 sysutils/cdrtools port
安装。 除此之外, 在 ATAPI 接口的刻录机上, 也可以配合 ATAPI/CAM 模块 来使用 cdrecord 以及其它为 SCSI
刻录机撰写的工具。如果您想使用带图形界面的 CD 刻录软件,
可以考虑一下
X-CD-Roast 或
K3b。 这些工具可以通过使用预编译安装包,
或通过 sysutils/xcdroast 和 sysutils/k3b ports 来安装。
X-CD-Roast 和
K3b 需要 ATAPI/CAM 模块 配合 ATAPI
硬件。mkisofs&man.mkisofs.8; 程序作为
sysutils/cdrtools port 的一部分,
将生成 ISO 9660 文件系统,其中包含 &unix; 命名空间中的文件名。
最简单的用法是:&prompt.root; mkisofs -o imagefile.iso/path/to/tree文件系统ISO 9660这个命令将创建一个包含 ISO9660 文件系统的 imagefile.iso
文件,它是目录树 /path/to/tree 的一个副本。 在处理过程中,
它将文件名称映射为标准的 ISO9660 文件系统的文件名,将排除那些不典型的 ISO
文件系统的文件。文件系统HFS文件系统Joliet有很多选项能够用来克服那些限制。特别的, 选项能够启用
Rock Ridge 扩展一般的 &unix; 系统, 选项能启用用于
Microsoft 系统的 Joliet 扩展, 选项能用来创建用于
&macos; 系统的 HFS 文件系统。对于那些即将要在 FreeBSD 系统中使用 CD 的人来说,
选项能用来消除所有文件名的限制。当使用 选项时,它会产生一个
文件系统映像,它与您从那儿启动 FreeBSD 树是一样的,虽然它在许多方面也违反了
ISO 9660 的标准。CDROMs创建启动光盘最后一个常用的选项是 。
它用来指定启动映像的位置, 用以生成
El Torito 启动 CD。 这个选项使用一个参数,
用以指定将写入 CD 的目录的根。 默认情况下, &man.mkisofs.8;
会以常说的 软盘模拟 方式来创建 ISO,
因此它希望引导映像文件的尺寸恰好是 1200, 1440 或
2880 KB。 某些引导加载器, 例如
FreeBSD 发行版磁盘, 并不使用模拟模式; 这种情况下,
需要使用 选项。 因此, 如果
/tmp/myboot 是一个包含了启动映像文件
/tmp/myboot/boot/cdboot 的可引导的
FreeBSD 系统, 您就可以使用下面的命令生成 ISO 9660 文件系统映像
/tmp/bootable.iso:&prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot完成这些工作之后, 如果您的内核中配置了 md,
就可以用下列命令来挂接文件系统了:&prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
&prompt.root; mount -t cd9660 /dev/md0 /mnt可以发现 /mnt 和 /tmp/myboot
是一样的。还可以使用 &man.mkisofs.8;
的其它选项来调整它的行为。特别是修改 ISO 9660 的划分格式,创建 Joliet
和 HFS 格式的磁盘。查看 &man.mkisofs.8; 联机手册得到更多的帮助。burncdCDROMsburning如果用的是 ATAPI 的 CD 刻录机,可以使用 burncd
命令来刻录您的 CD ISO 映像文件。 burncd 命令是基本
系统的一部分,中以使用 /usr/sbin/burncd 来安装。
用法如下:&prompt.root; burncd -f cddevice data imagefile.iso fixate在 cddevice 上刻录一份
imagefile.iso 的副本。
默认的设备是
/dev/acd0。
请参考 &man.burncd.8; 以了解设置写入速度的参数,如何在刻录完成之后自动弹出CD,以及刻录音频数据。cdrecord如果没有一个 ATAPI CD 刻录机,必须使用 cdrecord
来刻录您的 CD 。 cdrecord 不是基本系统的一部分;必须
从 sysutils/cdrtools 或适当的
package 安装它。基本系统的变化可能会引起这个程序的错误。可能是由
coaster 引起的。当升级系统时,同时需要升级 port,
或者如果您 使用 -STABLE,
那么在升级到新版本时也要升级 port。cdrecord 有许多选项,基本用法与 burncd
相似。刻录一个 ISO 9660 映像文件只需这样做:&prompt.root; cdrecord dev=deviceimagefile.iso使用 cdrecord 的比较巧妙的方法是找到使用的
。要找到正确的设置,可以使用 cdrecord
的 标记,这会产生这样的结果:CDROMsburning&prompt.root; cdrecord -scanbus
Cdrecord-Clone 2.01 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk
0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk
0,2,0 2) *
0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk
0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM
1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner
1,7,0 107) *这个列表列出了设备的的适当的 值。找到您的
CD burner ,使用三个用逗号分隔的数值来表示 .在
这个例子中,CRW 是 ,所以正确的输入应是
dev=1,5,0 。有一个很容易的方法可以指定这个值;看看 &man.cdrecord.1;
的介绍了解有关音轨,控制速度和其他的东西。复制音频 CD您可以这样复制 CD,把 CD 上面的音频数据解压缩出一系列的文件,
再把这些文件写到一张空白 CD 上。
这个过程对于 ATAPI 和 SCSI 驱动器来说有些微的不同。
SCSI 驱动器使用 cdda2wav 来解压缩音频。&prompt.user; cdda2wav -v255 -D2,0 -B -Owav使用 cdrecord 来写
.wav 文件。&prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav确保 2,0 被适当地设置了,
具体方法在 中有所描述。ATAPI 驱动器ATAPI CD 驱动用
/dev/acddtnn表示每个轨道,
这里 d 是驱动器号,
nn 是轨道号,由两位小数位组成,省略前缀零。
所以第一个盘片上的第一个轨道就是
/dev/acd0t01,第二个就是
/dev/acd0t02,第三个就是
/dev/acd0t03,等等。请务必确认在
/dev 中出现了对应的文件。
如果您发现有某些项目缺失, 则应强制系统重新识别介质:&prompt.root; dd if=/dev/acd0 of=/dev/null count=1使用 &man.dd.1; 解压缩每个轨道。当解压缩文件的时候您也必须使用
一个特殊的块大小。&prompt.root; dd if=/dev/acd0t01 of=track1.cdr bs=2352
&prompt.root; dd if=/dev/acd0t02 of=track2.cdr bs=2352
...
使用
burncd 把解压缩的文件刻录到光盘上。您必须指定
这些文件是音频文件,这样 burncd 会在刻录完成时
结束光盘。&prompt.root; burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate复制数据 CD您可以把数据 CD 复制成一个与之等价的映像文件,
可以使用 &man.mkisofs.8; 创建这种文件,
或使用它来复制任何数据 CD。 这里给出的例子假定您的 CDROM
设备是 acd0, 您应将其替换为您实际使用的 CDROM 设备。&prompt.root; dd if=/dev/acd0 of=file.iso bs=2048现在您有一个映像文件了,您可以像上面描述的那样把它刻录成 CD。
使用数据 CD现在您已经创建了一张标准的数据 CDROM,您或许想要
挂载来读取上面的设备。
默认情况下,&man.mount.8; 假定文件系统是
ufs 类型的。如果您尝试下面的命令:&prompt.root; mount /dev/cd0 /mnt您会得到一条 Incorrect super
block 的错误信息,没有挂载成功。CDROM 不是
UFS 文件系统,所以试图这样挂载它是
是不行的。您需要告诉 &man.mount.8;
文件系统是 ISO9660 类型的,这样
就可以了。只需要指定 &man.mount.8; 的
选项。例如,
如果您想要挂载 CDROM 设备,
/dev/cd0 到
/mnt 目录,您需要执行:&prompt.root; mount -t cd9660 /dev/cd0 /mnt注意您的设备名
(在这个例子中是 /dev/cd0)可能
有所不同,取决于您的 CDROM 使用的接口。另外,
选项等同于执行
&man.mount.cd9660.8;。上面的例子可以缩短
为:&prompt.root; mount_cd9660 /dev/cd0 /mnt用这种方法您基本可以使用任何买到的数据 CDROM。
然而某些有 ISO 9660 扩展的光盘可能会行为古怪。
例如,joliet 光盘用两个字节的 unicode 字符存储所有的文件名。
FreeBSD 内核并不使用 Unicode, 但 &os; CD9660 驱动可以将
Unicode 字符自动转换为内核可以识别的形式。 如果您发现有些非英文字符显示为问号,
就绪要使用 选项来指定字符集了。
欲了解进一步的详情, 请参见联机手册 &man.mount.cd9660.8;。如果希望通过 选项来进行字符集转换,
则内核会需要加载 cd9660_iconv.ko 模块。 这项工作可以通过在
loader.conf 中加入下列配置:cd9660_iconv_load="YES"并重新启动计算机来完成, 除此之外, 也可以通过 &man.kldload.8; 来手动加载。有时候,当您试图挂载 CDROM 的时候,会得到一条 Device not
configured 的错误信息。这通常
表明 CDROM 驱动认为托盘里没有光盘,
或者驱动器在总线上不可见。
需要几秒钟时间等待 CDROM 驱动器辨别已经接到反馈的信息,
请耐心等待。有时候,SCSI CDROM 可能会找不到,因为没有足够的
时间来应答总线的 reset 信号。如果您有一个 SCSI
CDROM 请将下面的选项添加到您的内核
配置文件并重建您的内核。options SCSI_DELAY=15000这个告诉您的 SCSI 总线启动时暂停 15 秒钟,
给您的 CDROM 驱动器足够的机会来应答
总线 reset 信号。刻录原始数据 CD您可以选择把一个文件目录刻录到 CD 上而不用
创建 ISO 9660 文件系统。有些人这么做是为了备份的
目的。这个运行的比刻录一个标准 CD 速度要快得多:&prompt.root; burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate要重新找回这样刻录到 CD 上的数据,
您必须从原始设备节点读取数据:&prompt.root; tar xzvf /dev/acd1您不能像挂载一个通常的 CDROM 一样挂载这张光盘。
这样的 CDROM 也不能在除了 FreeBSD 之外的任何操作系统上读出。
如果您想要可以挂载 CD,或者
和另一种操作系统共享数据,您必须像上面描述的那样使用
&man.mkisofs.8;。MarcFonvieilleContributed by CD burnerATAPI/CAM driver使用 ATAPI/CAM 驱动这个驱动允许 ATAPI 设备(CD-ROM, CD-RW, DVD
驱动器等...)通过 SCSI 子系统访问,
这样允许使用像 sysutils/cdrdao 或者
&man.cdrecord.1; 这样的程序。要使用这个驱动, 您需要把下面这行添加到 /boot/loader.conf
文件中:atapicam_load="YES"接下来, 重新启动计算机。如果您希望将 &man.atapicam.4; 以静态联编的形式加入内核,
则需要在内核配置文件中加入这行:device atapicam此外还需要在内核配置文件中加入:device ata
device scbus
device cd
device pass这些应该已经有了。 然后, 重新联编并安装新内核,
并重新启动计算机。在引导过程中, 您的刻录机将会出现在内核的提示信息中,
就像这样:acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed驱动器现在可以通过
/dev/cd0 设备名访问了,例如要
挂载 CD-ROM 到 /mnt,只需要键入下面的
命令:&prompt.root; mount -t cd9660 /dev/cd0 /mnt作为 root,您可以运行下面的
命令来得到刻录机的 SCSI 地址:&prompt.root; camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)这样 1,0,0 就是 SCSI 地址了,可以被
&man.cdrecord.1; 和其他的 SCSI 程序使用。有关 ATAPI/CAM 和 SCSI 系统的更多信息,
可以参阅 &man.atapicam.4; 和 &man.cam.4; 手册
页。MarcFonvieilleContributed by AndyPolyakovWith inputs from 创建和使用光学介质(DVD)DVDburning介绍和 CD 相比,DVD 是下一代光学存储介质技术。
DVD 可以容纳比任何 CD 更多的数据,已经成为现今视频出版业的标准。我们称作可记录 DVD 的有五种物理记录格式:DVD-R:这是第一种可用的 DVD 可记录格式。
DVD-R 标准由 DVD Forum 定义。
这种格式是一次可写的。DVD-RW:这是 DVD-R 标准的可覆写版本。
一张 DVD-RW 可以被覆写大约 1000
次。DVD-RAM:这也是一种被 DVD Forum 所支持的可覆写格式。
DVD-RAM 可以被看作一种可移动硬盘。
然而,这种介质和大部分
DVD-ROM 驱动器以及 DVD-Video 播放器不兼容;
只有少数 DVD 刻录机支持 DVD-RAM。
请参阅
以了解关于如何使用 DVD-RAM 的进一步详情。DVD+RW:这是一种由
DVD+RW
Alliance 定义的可覆写格式。一张 DVD+RW 可以被覆写大约 1000
次。DVD+R:这种格式是 DVD+RW 格式的一次可写变种。一张单层的可记录 DVD 可以存储
4,700,000,000 字节,相当于 4.38 GB 或者说
4485 MB (1 千字节等于 1024 字节)。必须说明一下物理介质与应用程序的分歧。
例如 DVD-Video 是一种特殊的文件系统,
可以被覆写到任何可记录的 DVD 物理介质上:
DVD-R、DVD+R、DVD-RW 等等。在选择介质类型之前,
您一定要确认刻录机和
DVD-Video 播放器 (一种单独的播放器或者计算机上的 DVD-ROM 驱动器)
是和这种介质兼容的。配置&man.growisofs.1; 将被用来实施 DVD
刻录。 这个命令是
dvd+rw-tools 工具集 (sysutils/dvd+rw-tools) 的一部分。
dvd+rw-tools 支持所有的 DVD 介质类型。这些工具将使用 SCSI 子系统来访问设备,因此
ATAPI/CAM 支持 必须加入内核。
如果您的刻录机采用 USB 接口则不需要这么做,请参考
来了解 USB
设备配置的进一步详情。此外,还需要启用 ATAPI 设备的 DMA 支持。 这一工作可以通过在
/boot/loader.conf 文件中加入下面的行来完成:hw.ata.atapi_dma="1"试图使用
dvd+rw-tools 之前您应该参考
dvd+rw-tools
硬件兼容性列表 是否有与您的 DVD 刻录机有关的信息。如果您想要一个图形化的用户界面,您应该看一看
K3b (sysutils/k3b),它提供了
&man.growisofs.1; 的一个友好界面和许多其他刻录工具。刻录数据 DVD&man.growisofs.1; 命令是 mkisofs 的前端,它会调用
&man.mkisofs.8; 来创建文件系统布局,完成到 DVD 上的刻录。
这意味着您不需要在刻录之前创建数据映像。要把 /path/to/data 目录的数据刻录到 DVD+R
或者 DVD-R 上面,使用下面的命令:&prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data 选项传递给
&man.mkisofs.8; 用于文件系统创建 (这表示创建带有带有
joliet 和 Rock Ridge 扩展的 ISO 9660 文件系统),
参考 &man.mkisofs.8; 联机手册了解更多细节。选项 用来在任何情况下初始刻录会话:
不管多会话与否。
DVD 设备,/dev/cd0,
必须依照您的配置做出改变。
参数会结束光盘,
光盘成为不可附加的。这会提供更多的和
DVD-ROM 驱动器的介质兼容性。也可以刻录成一个 pre-mastered 映像,
例如记录一个映像文件
imagefile.iso, 我们可以运行:&prompt.root; growisofs -dvd-compat -Z /dev/cd0=imagefile.iso刻录的速度可以被检测到并自动进行调整,
根据介质和驱动器的使用情况。如果您想强制改变速度,
可以使用
参数。更多的信息,请看 &man.growisofs.1;
联机手册。DVDDVD-Video刻录 DVD-VideoDVD-Video 是一种特殊的基于 ISO 9660
和 micro-UDF (M-UDF) 规范的文件系统。 DVD-Video
也呈现了一个特殊的数据格式,
这就是为什么您需要一个特殊的程序像 multimedia/dvdauthor 来制作
DVD 的原因。如果您已经有了 DVD-Video 文件系统的映像,
就可以以同样的方式制作另一个映像,可以参看前面章节的例子。
如果您想制作 DVD 并想放在特定的目录中,如在目录
/path/to/video 中,
可以使用下面的命令来刻录 DVD-Video:&prompt.root; growisofs -Z /dev/cd0 -dvd-video /path/to/video 选项将传递给
&man.mkisofs.8; 并指示它创建一个 DVD-Video 文件系统布局。
除此之外。 选项也包含了
&man.growisofs.1;
选项。DVDDVD+RW使用 DVD+RW不像 CD-RW, 一个空白的 DVD+RW 在每一次使用前必须先格式化。
&man.growisofs.1; 程序将会适时的自动对其进行适当的处理,
这是 recommended 的方式。您也可以使用
dvd+rw-format 来对 DVD+RW 进行格式化:&prompt.root; dvd+rw-format /dev/cd0您只需要执行这样的操作一次,牢记只有空白的
DVD+RW 介质才需要格式化。您可以以前面章节同样的方式来刻录
DVD+RW。如果您想刻录新的数据 (刻录一个新的完整的文件系统
而不仅仅是追加一些数据) 到 DVD+RW,您不必再将其格式化成空白盘,
您只须要直接覆盖掉以前的记录即可。
(执行一个新的初始化对话), 像这样:&prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/newdataDVD+RW 格式化程序为简单的向以前的记录追加数据提供了可能性。
这个操作有一个新的会话和一个已经存在的会话合并而成。
它不需要多个写会话过程,
&man.growisofs.1; 将在介质上 增加
ISO 9660 文件系统。例如,我们想追加一些数据到到我们以前的
DVD+RW 上,我们可以使用下面的命令:&prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata在以后的写操作时, 应使用与最初的刻录会话时相同的 &man.mkisofs.8;
选项。如果您想获得与 DVD-ROM 驱动更好的兼容性,可以使用
选项。 在 DVD+RW 这种情况下, 这样做并不妨碍您添加数据。如果出于某种原因您真的想要空白介质盘,
可以执行下面的命令:&prompt.root; growisofs -Z /dev/cd0=/dev/zeroDVDDVD-RW使用 DVD-RW DVD-RW 接受两种光盘格式:增补顺序写入和受限式覆写。默认的
DVD-RW 盘是顺序写入格式。空白的 DVD-RW 能够直接进行刻录而不需要格式化操作,
然而非空的顺序写入格式的 DVD-RW 需要格式化才能写入新的初始区段。要格式化一张 DVD-RW 为顺序写入模式,运行:&prompt.root; dvd+rw-format -blank=full /dev/cd0一次完全的格式化 ()
在 1x 倍速的介质上将会花费大约 1 个小时。快速格式化可以使用
选项来进行,如果
DVD-RW 要以 Disk-At-Once (DAO) 模式刻录的话。要以
DAO 模式刻录 DVD-RW,使用命令:&prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso 选项不是必需的,
因为 &man.growisofs.1; 试图最低限度的检测 (快速格式化) 介质并进行
DAO 写入。事实上对于任何 DVD-RW 都应该使用受限式覆写模式,
这种格式比默认的增补顺序写入更加灵活。在一张顺序 DVD-RW 上写入数据,使用和其他 DVD 格式相同的指令:&prompt.root; growisofs -Z /dev/cd0 -J -R /path/to/data如果您想在您以前的刻录上附加数据,您必须使用
&man.growisofs.1; 的 选项。然而,
如果您在一张增补顺序写入模式的 DVD-RW 上附加数据,
将会在盘上创建一个新的区段,结果就是一张多区段光盘。受限式覆写格式的 DVD-RW 在新的初始化区段前不需要格式化,
您只是要用 选项覆写光盘,这和
DVD+RW 的情形是相似的。也可以用和 DVD+RW 同样方式的
选项把现存的 ISO 9660 文件系统写入光盘。
结果会是一张单区段 DVD。要把 DVD-RW 置于受限式覆写格式,
必须使用下面的命令:&prompt.root; dvd+rw-format /dev/cd0更改回顺序写入模式使用:&prompt.root; dvd+rw-format -blank=full /dev/cd0多区段几乎没有哪个 DVD-ROM 驱动器支持多区段
DVD,它们大多数时候都只读取第一个区段。
顺序写入格式的 DVD+R、DVD-R 和 DVD-RW 可以支持多区段,
DVD+RW 和 DVD-RW 受限式覆写格式不存在多区段的概念。在 DVD+R、DVD-R 或者 DVD-RW 的顺序写入格式下,
一次初始化 (未关闭) 区段之后使用下面的命令,
将会在光盘上添加一个新的区段:&prompt.root; growisofs -M /dev/cd0 -J -R /path/to/nextdata对 DVD+RW 或者 DVD-RW 在受限式覆写模式下使用这条命令,
会合并新区段到存在的区段中来附加数据。
结果就是一张单区段光盘。
这是在这些介质上用于在最初的写操作之后添加数据的方式。介质上的一些空间用于区段之间区段的开始与结束。
因此,应该用大量的数据添加区段来优化介质空间。
对于 DVD+R 来说区段的数量限制为 154,
对于 DVD-R 来说大约是 2000,对于双层 DVD+R 来说是 127。更多的信息要获得更多的关于 DVD 的信息
dvd+rw-mediainfo
/dev/cd0 命令可以运行来获得
更多的信息。更多的关于
dvd+rw-tools 的信息可以在
&man.growisofs.1; 联机手册找到,在 dvd+rw-tools
web site 和 cdwrite mailing
list 联接中也可找到。dvd+rw-mediainfo 命令的输出结果记录,
以及介质的问题会被用来做问题报告。 如果没有这些输出,
就很难帮您解决问题。使用 DVD-RAMDVDDVD-RAM配置DVD-RAM 刻录机通常使用 SCSI 或 ATAPI
两种接口之一。 对于 ATAPI 设备, DMA 传输模式必须手工启用。
这一工作可以通过在
/boot/loader.conf 文件中增加下述配置来完成:hw.ata.atapi_dma="1"初始化介质如本章前面的介绍所言,
DVD-RAM 可以视为一移动硬盘。 与任何其它型号的移动硬盘类似,
首次使用它之前, 应首先 初始化 DVD-RAM。
在下面的例子中, 我们将在全部空间上使用标准的 UFS2 文件系统:&prompt.root; dd if=/dev/zero of=/dev/acd0 bs=2k count=1
&prompt.root; bsdlabel -Bw acd0
&prompt.root; newfs /dev/acd0您应根据实际情况将 acd0 改为您所使用的设备名。使用介质一旦您在 DVD-RAM 上完成了前面的操作,
就可以像普通的硬盘一样挂接它了:&prompt.root; mount /dev/acd0/mnt然后就可以正常地对 DVD-RAM 进行读写了。JulioMerino原作 MartinKarlsson重写 创建和使用软盘把数据存储在软盘上有时也是十分有用的。
例如, 在没有其它可靠的存储介质,
或只需将少量数据传到其他计算机时。这一章将介绍怎样在 FreeBSD 上使用软盘。
在使用 DOS 3.5 英寸软盘时首要要涉及的就是格式化,
但其概念与其它的软盘格式化极为类似。格式化软盘设备软盘的访问像其它设备一样是通过在
/dev 中的条目来实现的。
直接访问软盘时, 只需简单地使用
/dev/fdN 来表示。格式化一张软盘在使用这前必须先被低级格式化。
通常卖主已经做过了,但格式化是检测介质完整性的一种好方法。
尽管这有可能会强取大量(或少量)的硬盘大小,但
大部分磁盘都能被格式化设计为 1440kB 。低级格式化软盘你需要使用
&man.fdformat.1; 命令。这个程序需要设备名作为参数。要留意一切错误信息,这些信息能够帮助你确定
磁盘的好与坏。软盘的格式化使用
/dev/fdN
设备来格式化软盘。插入一张新的 3.5 英寸的软盘在你的设备中:&prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0磁盘标签经过低级格式化后, 你需要给它分配一个标签。
这个磁盘标签以后会被删去, 但系统需要使用它来确定磁盘的尺寸。新的磁盘标签将会接管整个磁盘,会包括所有合适的关于软盘的 geometry 信息。
磁盘标签的 geometry 值列在
/etc/disktab中。现在可以用下面的方法来使用 &man.bsdlabel.8; 了:&prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440文件系统现在对软盘进行高级格式化。
这会在它上面安置一个新的文件系统,可使 FreeBSD 来对它进行读写。
在创建完新的文件系统后,磁盘标签将被消毁,所以如果你想重新格式化磁盘,
你必须重新创建磁盘标签。软盘的文件系统可以选择 UFS 或 FAT 。
FAT 是通常情况下软盘比较好的选择。要制作新的文件系统在软盘上,可以使用下面的命令:&prompt.root; /sbin/newfs_msdos /dev/fd0现在磁盘已经可以进行读取和使用。使用软盘要使用软盘,需要先使用 &man.mount.msdosfs.8; 挂接它。
除此之外, 也可以使用在 ports 套件中的
emulators/mtools 程序。用磁带机备份tape media主流的磁带机有 4mm, 8mm, QIC, mini-cartridge 和 DLT。4mm (DDS: Digital Data Storage)tape mediaDDS (4mm) tapestape mediaQIC tapes4mm 磁带机正在逐步取代 QIC 成为工作站备份数据的首选设备。
在 Conner 收购了 QIC 磁带机领域领先的制造商 Archive 之后不久,
即不再生产这种磁带机, 这使得这一趋势变得愈加明显。
4mm 的驱动器更加小和安静,但对于数据保存的可靠性仍不及 8mm
驱动器。它要比 8mm 的便宜和小得多 (3 x 2 x 0.5 inches, 76 x 51
x 12 mm) 。和 8mm 的一样,读写关的寿命都不长,因为它们同样使用螺旋式
的方式来读写。这些设备的数据传输的速度约在 ~150 kB/s 到 ~500 kB/s 之间,
存储空间从 1.3 GB 到 2.0 GB 之间,硬件压缩可使空间加倍。磁带库
单元可以有 6 台磁带机,120 个磁带匣,以自动切换的方式使用同一个磁带柜,
磁带库的容量可达 240 GB 。DDS-3 标准现在支持的磁带机容量最高可达到 12 GB (或压缩的 24 GB )。4mm 和 8mm 同样都使用螺旋式读写的方式,所有螺旋式读写的优点及缺点,
都可以在 4mm 和 8mm 磁带机上看到。磁带在经过 2,000 次的使用或 100 次的全部备份后,就该退休了。8mm (Exabyte)tape mediaExabyte (8mm) tapes8mm 磁带机是最常见的 SCSI 磁带机,也是磁带交换的最佳选择。几乎每个
工作站都有一台 2 GB 8mm 磁带机。8mm 磁带机可信度高、方便、安静。
卡匣小 (4.8 x 3.3 x 0.6 inches; 122 x 84 x 15 mm)而且不贵。8mm 磁带机
的下边是一个短短的读写头,而读写头的寿命取决于磁带经过读写头时,相对高
速运动情况。数据传输速度约在 250 kB/s 到 500 kB/s 之间,可存储的空间从
300 MB 到 7 GB,硬件压缩可使空间加倍。磁带库单元可以有 6 台磁
带机,120 个磁带匣,以自动切换的方式使用同一个磁带柜,磁带库的容量可达
840+ GB。Exabyte Mammoth 模型支持 12 GB 的容量在一个磁带
上(压缩后可达 24 GB )相当于普通磁带的二倍。数据是使用螺旋式读写的方式记录在磁带上的,读写头和磁带约相差 6 度,
磁带以 270 度缠绕着轴,并抵住读写头,轴适时地旋转,使得磁带具有高密度,
从一端到另一端并可使磁道紧密地分布。QICtape mediaQIC-150QIC-150 磁带和磁带机可能是最常见的磁带机和介质了。
QIC 磁带机是最便宜的 正规 备份设备。
它的缺点在于介质的价格较高。 QIC 磁带要比 8mm 或 4mm 磁带贵,
每 GB 的数据存储价格可能最高高出 5 倍。 但是,
如果您的需求能够为半打磁带所满足的话, 那么 QIC
可能是明智之选。 QIC 是
最 常见的磁带机。 每个站点都会有某种密度的 QIC。
这有时是一种麻烦, QIC 有很多在外观上相似(有时一样),但是密度不同的磁带。
QIC 磁带机噪音很大。
它们在寻址以及读写时都会发出声音。 QIC 磁带的规格是 6 x 4 x 0.7 英寸
(152 x 102 x 17 毫米)。数据传输的速度介于 150 kB/s 到 500 kB/s 之间,可存储的空间
从 40 MB 到 15 GB。较新的 QIC 磁带机具有硬件压缩的功能。 QIC
的使用率愈来愈低,渐渐被 DAT 所取代。数据以磁道的方式记录在磁带上,磁道数及磁道的宽度会根据容量而有所不同。
通常新的磁带机具有的向后兼容的读取功能(通常也具备写入的功能)。对于数据
的安全性,QIC 具有不错的评价。磁带机在经过 5,000 次的使用后,就该退休了。DLTtape mediaDLT在这一章列出的磁带机中 DLT 具有最快的数据传输率。 1/2" (12.5mm) 的
磁带包含在单轴的磁带匣 (4 x 4 x 1 inches; 100 x 100 x 25 mm)中。磁带匣
的一边是一个旋转匣道,通过匣道的开合,可以让磁带卷动。磁带匣内只有一个
轴,而本章中所提到的其他磁带匣都是有两个轴的(9磁道磁带机例外)。数据传输的速度约 1.5 MB/s,是 4mm, 8mm, 或 QIC 磁带机的三倍。
可存储的空间从 10 GB 到 20 GB,具有磁带机数据库。磁带机数据库
单元可以有 1 to 20 台磁带机,5 到 900 个磁带匣,磁带机数据库的容量可达
50 GB 到 9 TB 。如果要压缩的话,DLT 型 IV 格式的磁带机最高可支持 70 GB 的存储
容量。数据存储在平行于磁带运行方向的磁道上(就像 QIC 磁带),一次写入两个
磁道。读写头的寿命相当长,每当磁带停止前进,磁带与读写头之间没有相对运动。AITtape mediaAITAIT 是 Sony 开发的一种新格式,每个磁带最高可以存储 50 GB。磁带
机使用内存芯片来保存磁带上的索引内容。这个索引能够被磁带机驱动器快速阅读
来搜索磁带机上文件所处的位置,而不像其他的磁带机需要花几分钟的时间才能找
到文件。像 SAMS:Alexandria 这样的软件:能够操
作四十或者更多的 AIT 磁带库,直接使用内存芯片来进行通信把内容显示在屏幕上,
以决定把什么文件备份到哪个磁带上,加载和恢复数据。像这样的库成本大概在 $20,000 美元左右,零售市场可能还要贵一点。第一次使用新的磁带机当在一块完全空白的磁带上尝试定入数据时,会得到类似下面这样的错误信息:sa0(ncr1:4:0): NOT READY asc:4,1
sa0(ncr1:4:0): Logical unit is in process of becoming ready信息指出这块磁带没有块编号 (block 编号为 0)。在 QIC-525 之后的所有 QIC
磁带,都采用 QIC-525 标准,必须写入一个 Identifier Block 。对于这种问题,
有以下两种解决的办法:
用mt fsf 1 可以让磁带机对磁带写入 Identifier Block 。使用面板上的按钮磁带。再插入一次,并存储 dump 数据到磁带上。这时dump 将传回 DUMP: End of tape
detected ,然后您会得到这样的错误信息: HARDWARE
FAILURE info:280 asc:80,96。这时用 mt rewind 来倒转磁带。磁带操作的后续操作就完成了。用软盘备份能够使用软盘来备份数据吗backup floppiesfloppy disks软磁盘通常是用来备份的设备中不太合适的设备:这种设备不太可靠,特别是长期使用。备份和恢复都很慢它们只有非常有限的存储容量。然而,如果没有其它的备份数据的方法,那软盘备份总比没有备份要好。如果必须使用软盘的话,必须确保盘片的质量。软盘在办公室中使用已经有许多
年了。最好使用一些名牌厂商的产品以确保质量。如何备份数据到软盘最好的备份数据到软盘的方法是使用 &man.tar.1; 程序加上 选项,
它可以允许数据备份到多张软盘上。要备份当前目录中所有的文件可以使用这个命令 (需要有 root权限):&prompt.root; tar Mcvf /dev/fd0 *当第一张盘满的时候, &man.tar.1; 会指示您插入下一张盘,插入第二张盘之后就按回车。Prepare volume #2 for /dev/fd0 and hit return:这个步骤可能需要重复很多次,直到这些文件备份完成为止。可以压缩备份吗targzipcompression不幸的是,&man.tar.1; 在为多卷文件作备份时是不允许使用
选项的。当然,可以用 &man.gzip.1; 压缩所有的文件,把它们打包到磁盘,以后在用
&man.gunzip.1; 解开。如何恢复备份要恢复所有文件:&prompt.root; tar Mxvf /dev/fd0有两种方法来恢复软盘中的个别文件。首先,就要用第一张软盘启动:&prompt.root; tar Mxvf /dev/fd0 filename&man.tar.1; 程序会提示您插入后面的软盘,直到它找到所需要的文件。如果您知道哪个文件在哪个盘上,您就可以插入那张盘,然后使用上同同样的命令。
如果软盘上的第一个文件与前面的文件是连续的,那 &man.tar.1; 命令会警告您它无法
恢复,即使您不要求它这样做。LowellGilbert原作 备份策略设计备份计划的第一要务是确认以下问题皆已考虑到:磁盘故障文件的意外删除随机的文件损毁机器完全损毁 (例如火灾), 包括破坏全部在线备份。针对上述的每个问题采用完全不同的技术来解决是完全可行的。
除了只包含少量几乎没有价值数据的个人系统之外,
一般来说很少有一种技术能够同时兼顾前面所有的需要。可以采用的技术包括:对整个系统的数据进行存档, 备份到永久性的离线介质上。
这种方法实际上能够提供针对前面所有问题的保护, 但这样做通常很慢,
而且恢复时会比较麻烦。 您可以将备份置于近线或在线的状态,
然而恢复文件仍然是一个难题, 特别是对没有特权的那些用户而言。文件系统快照。 这种技术实际上只对无意中删除文件这一种情况有用,
但在这种情况下它会提供
非常大 的帮助,
而且访问迅速, 操作容易。直接复制整个文件系统和/或磁盘 (例如周期性地对整个机器做 &man.rsync.1;)。
通常这对于在网络上的单一需求最为适用。 要为磁盘故障提供更为通用的保护,
通常这种方法要逊于 RAID。
对于恢复无意中删除的文件来说, 这种方法基本上与
UFS 快照属于同一层次, 使用哪一个取决于您的喜好。RAID。 它能够最大限度地减少磁盘故障导致的停机时间。
其代价是需要处理更为频繁的磁盘故障 (因为磁盘的数量增加了),
尽管这类故障不再需要作为非常紧急的事项来处理。检查文件的指纹。 &man.mtree.8; 工具对于这种操作非常有用。
尽管这并不是一种备份的技术, 但它能够确保您有机会注意到那些您需要求助于离线备份的事情。
这对于离线备份非常重要, 而且应有计划地加以检查。很容易列举更多的技术, 它们中有许多实际上是前面所列出的方法的变种。
特别的需求通常会需要采用特别的技术 (例如, 备份在线运行的数据库,
往往需要数据库软件提供某种方法来完成中间步骤) 来满足。
最重要的事情是, 一定要了解需要将数据保护起来免受何种风险,
以及发生问题时应该如何处理。备份程序有三个主要的备份程序 &man.dump.8;、&man.tar.1; 和 &man.cpio.1;。Dump 和 Restore备份软件dump / restoredumprestoredump 和 restore 是 &unix;
- 传统的备份程序。它以 block 而不是以文件为单位来备份数据、链接或目录。
- dump 备份的是设备上的整个文件系统,不能只备份一
- 一个文件系统的部分或是用到两个以上文件系统的目录树。
- dump 不会写文件和目录到磁带机,而是写入包含文件
- 和目录的原始数据块。
-
- 如果在您的 root 目录使用 dump ,将不需要
- 备份 /home、/usr 或其他目录,
+ 传统的备份程序。 它以 block 而不是以文件为单位来备份数据、链接或目录。
+ dump 备份的是设备上的整个文件系统,
+ 不能只备份一个文件系统的部分或是用到两个以上文件系统的目录树。
+ 与其他备份软件不同的是,
+ dump 不会写文件和目录到磁带机, 而是写入包含文件
+ 和目录的原始数据块。 当需要恢复数据的时候,restore
+ 默认在 /tmp/ 下保存临时数据 —
+ 如果你正在操作的恢复盘只有比较小的 /tmp
+ 的话, 你可能需要把环境变量 TMPDIR
+ 设置到一个有更多空间的目录, 使得此过程更容易成功。
+
+ 如果在您的 root 目录使用 dump,
+ 将不需要备份 /home、/usr 或其他目录,
因为这些是典型的其他文件系统或符号连接到那些文件系统的加载点。dump 是最早出现于 AT&T UNIX 的 Version 6 (约 1975)。
- 默认的参数适用于 9-track 磁带(6250 bpi),所以如果要用高密度的磁带(最高可达
- 62,182 ftpi),就不能用默认的参数,而要另外指定参数。这些默认值必须在命令行被
- 修改以更好地利用当前磁带机的功能。
+ 默认的参数适用于 9-track 磁带(6250 bpi), 所以如果要用高密度的磁带(最高可达
+ 62,182 ftpi), 就不能用默认的参数, 而要另外指定参数。
+ 这些默认值必须在命令行被修改以更好地利用当前磁带机的功能。
.rhosts
- rdump 和 rrestore 可以通过网络在另一
- 台计算机的磁带机上备份数据。这两个程序都是依靠 &man.rcmd.3; 和
- &man.ruserok.3; 来访问远程的磁带机。因此,运行备份的用户必须要有远程
- 主机的 .rhosts 访问权。rdump 和
- rrestore 的参数必须适用于远程主机(例如,当您从 FreeBSD 连到
- 一台 SUN 工作站 knomodo 去使用磁带机时,使用:
+ rdump 和 rrestore
+ 可以通过网络在另一台计算机的磁带机上备份数据。
+ 这两个程序都是依靠 &man.rcmd.3; 和 &man.ruserok.3; 来访问远程的磁带机。
+ 因此,运行备份的用户必须要有远程主机的 .rhosts 访问权。
+ rdump 和 rrestore 的参数必须适用于远程主机
+ 例如,当您从 FreeBSD 连到一台 SUN 工作站 knomodo 去使用磁带机时,使用:&prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1要注意的是:必须检查您在使用 .rhosts 时的安全情况。也可以通过使用 ssh 用一个更安全的方式来使用 dump
和 restore 。通过 ssh 使用 dump&prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz或使用 dump 的 built-in 方法,
设置环境变量 RSH:通过设置 ssh 环境变量 RSH 使用 dump&prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usrtar备份软件tar&man.tar.1; 也同样是在第 6 版 AT&T UNIX
(大约是 1975 前后) 出现的。 tar 对文件系统直接操作;
其作用是把文件和目录写入磁带。 tar 并不支持
&man.cpio.1; 所提供的全部功能, 但也不需要 cpio
所需要使用的诡异的命令行管道。tar在 FreeBSD 5.3 和更高版本中, 同时提供了 GNU tar
和默认的 bsdtar。
GNU 的版本可以通过 gtar 来使用。 它通过与
rdump 一样的语法来支持远程设备。
要 tar 到连接在名为
komodo 的 Sun 机器上的
Exabyte 磁带机, 可以使用:&prompt.root; /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1您也可以让
bsdtar 通过管道和
rsh 将数据发送到远程的磁带机上。&prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b如果您担心通过网络备份会有安全问题,应当使用 ssh ,
而不是 rsh。cpiobackup softwarecpio&man.cpio.1; 是 &unix; 最早用来作文件交换的磁带机程序。它有执行字节
交换的选项,可以用几种不同的格式写入,并且可以将数据用管道传给其他程序。
cpio 没办法自动查找目录树内的文件列表,必须通过标准
输入 stdin 来指定。cpiocpio 不支持通过网络的备份方式。可以使用 pipeline 和
rsh 来传送数据给远程的磁带机。&prompt.root; for f in directory_list; dofind $f >> backup.listdone
&prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"这里的 directory_list 是要备份的目录列表,
user@host 结合了将
要执行备份的用户名和主机名,backup_device 是写
入备份的设备(如 /dev/nsa0)。paxbackup softwarepaxpaxPOSIXIEEE&man.pax.1; 是符合 IEEE/&posix; 标准的程序。多年来各种不同版本
的 tar 和 cpio 间有些不兼容。
为了防止这种情况,并使其标准化,&posix; 出了这套新的工具程序。
pax 尝试可以读写各种 cpio
和 tar 的格式,并可以自己增加新的格式。它的命令
集比 tar 更接近 cpio。Amandabackup softwareAmandaAmandaAmanda (Advanced Maryland
Network Disk Archiver) 并非单一的程序,而是一个客户机/服务器模式的备份系统
。一台 Amanda 服务器可以备份任意数量执行
Amanda 的客户机或是将连上 Amanda
服务器的计算机上的数据备份到一台磁带机上。一个常见的问题是,数据写入磁带机的时间将超
过取行数据的时间,而 Amanda 解决了这个问题。它使用一个
holding disk 来同时备份几个文件系统。 Amanda
建立 archive sets 的一组磁带,用来备份在 Amanda
的配置文件中所列出的完整的文件系统。Amanda 配置文件提供完整的备份控制及
Amanda 产生的网络传输。 Amanda
可以使用上述任何一个设备程序来向磁带写入数据。Amanda
可以从 port 或 package 取得,它并非系统默认安装的。Do Nothing 备份策略Do nothing 不是一个程序,而是被广泛使用的备份策略。
不需要预算,不需要备份的计划表,全部都不用。如果您的数据发生了什么问题,
忽略它!如果您的时间和数据不值得您做这些事,那么 Do nothing
将是最好的备份程序。要注意的是,&unix; 是相当好用的工具,您可能在几个月
内,就发现您已经收集了不少对您来说相当具有价值的文件和程序。Do nothing 对于像 /usr/obj 和其他
可由您的计算机产生的文件来说,是最好的方法。例如这本手册包含有 HTML 或
&postscript; 格式的文件。这些文档格式是从 SGML 输入文件创建的。创建 HTML
或 &postscript; 格式的文件的备份就没有必要了。只要经常备份 SGML 文件就够了。哪个备份程序最好?LISA在&man.dump.8; 时期 Elizabeth D. Zwicky
测试了所有以上列出的备份程序。在各种各样怪异的文件系统中,
dump 是您明智的选择。Elizabeth 建立起各种各样、
奇怪或常见的文件系统,并用各种备份程序,测试在各种文件系统上备份
及恢复数据。这些怪异之处包括:具有 holes 和一个 nulls block 的文件,
文件名具有有趣字符,无法读写的文件及设备,在备份时改变文件大小,在
备份时建立或删除的文件。她将结果刑在: LISA V in Oct. 1991.
See torture-testing
Backup and Archive Programs.应急恢复程序在出现灾难前在遇到灾难前,只需要执行以下四个步骤:bsdlabel第一,打出您的每个磁盘驱动器的磁盘标签 (例如:
bsdlabel da0 | lpr),文件系统表,
(/etc/fstab) ,以及所有启动信息,
并将其复制两份。fix-it floppies第二,确定遇到的情况时,用来启动及修复的软盘
(boot.flp 和 fixit.flp)
具有您所有的设备代号。最简单的方法是用软盘启动,然后检查启动信息,
如果设备都被列出,并且可以正常使用,就可以跳到第三步。否则,必须建立两张传统的可启动软盘,并包含:
fdisk, bsdlabel,
newfs, mount, 以及所有使用的
备份程序。这些程序必须被静态的连接。如果使用的是 dump,
那么这张软盘就必须包含 restore。第三,定期将数据备份到磁带。任何在上次备份后的改变都无法恢复。记得将
磁盘写保护。第四,测试在第二步所建立的软盘及备份的磁带,将过程记录下来,并和这张
可启动的软盘和磁带放在一起。也许您在恢复时会想要,而这份记录将防止您破坏
您的磁带 (怎么说呢?因为您可能将 tar xvf /dev/sa0 打成
tar cvf /dev/sa0 而重写了备份磁带)。为了安全,您可以每次都做两份备份磁带及一张启动磁盘,并将其中
一份备份磁带存放在其它地方。其它地方不是指同一栋办公大楼的地下室
(世贸中心的一些公司应该学到了一些教训),而是真的要让人的磁带离您
的的计算机远远的。一个建立启动磁盘的 shell 脚本例子: /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore
gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync
cp /root/.profile /mnt/root
chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore
#
# create minimum file system table
#
cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd <出现灾难后关键问题是: 您的硬件是否幸免于难?
由于已经做好了定期的备份工作, 因此并不需要担心软件的问题。如果硬件已经损毁, 这些部分应该在尝试使用计算机之前换掉。如果硬件还能用, 检查一下您的软盘。 如果使用定制的引导软盘,
启动单用户模式 (在 boot: 提示后输入
-s)。 跳过下面一段。如果您使用 boot.flp 和
fixit.flp 软盘, 请继续阅读。 将
boot.flp
软盘插到计算机的第一个软驱并启动机器。 此时,
最初的安装菜单将显示在屏幕上。
选择 Fixit--Repair mode with CDROM or floppy.
选项。 在得到提示后插入
fixit.flp 。
restore 以及其他需要的程序,
可以在 /mnt2/rescue
(对于 &os; 5.2 之前的版本, 则是
/mnt2/stand)。分别恢复每一个文件系统mountroot partitionbsdlabelnewfs试着 mount 上您的第一个磁盘的 root 分区(例如: mount /dev/da0a
/mnt)。假如这个磁盘标签已经损坏,使用 bsdlabel
来重新分割并分配磁盘标签(利用您以前保留下来的数据)。使用 newfs
来建立文件系统,并重新挂上软盘读写的 root 分区 (mount -u -o rw
/mnt)。然后使用备份程序及备份磁带来修复文件系统 (例如: restore vrf
/dev/sa0)。最后 Unmount 这个文件系统 (例如: umount
/mnt)。对于每个损坏的文件系统都重复一次。当您的系统正常启动后,将您的数据备份到新的磁带。任何造成数据丢失的
的灾难都可能再次发生。现在花一些时间,也许可以使您免于下次的灾难。* I Did Not Prepare for the Disaster, What Now?
]]>
MarcFonvieilleReorganized and enhanced by 网络、内存和 和以及映像文件为介质的虚拟文件系统virtual disks磁盘虚拟除了插在您计算机上的物理磁盘:
软盘、 CD、 硬盘驱动器, 等等之外, FreeBSD
还能识别一些其他的磁盘形式 - 虚拟磁盘。NFSCodadisksmemory这还包括, 如 网络文件系统 (Network File System) 和 Coda一类的网络文件系统、
内存以及映像文件为介质的虚拟文件系统。随运行的 FreeBSD 版本不同,
用来创建和使用以映像文件介质文件系统和内存文件系统的工具也不尽相同。系统会使用 &man.devfs.5; 来创建设备节点, 这对用户来说是透明的。以映像文件为介质的文件系统disks (磁盘)file-backed (采用文件作为介质)在 FreeBSD 系统中, 可以用 &man.mdconfig.8;
程序来配置和启用内存磁盘, &man.md.4;。 要使用
&man.mdconfig.8;, 就需要在内核配置文件中添加 &man.md.4; 模块来支持它:device md &man.mdconfig.8; 命令支持三种类型的虚拟文件系统:
使用 &man.malloc.9;,来分配内存文件系统,内存文件系统作为文件或作为
备用的交换分区。一种使用方式是在文件中来挂载一个软盘和
CD 镜像。将一个暨存的映像文件作为文件系统挂载:使用 mdconfig 挂载已经存在的映像文件&prompt.root; mdconfig -a -t vnode -f diskimage -u 0
&prompt.root; mount /dev/md0/mnt使用 &man.mdconfig.8; 来创建新的映像文件:使用 mdconfig 将映像文件作为文件系统挂载&prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
&prompt.root; mdconfig -a -t vnode -f newimage -u 0
&prompt.root; bsdlabel -w md0 auto
&prompt.root; newfs md0a
/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.
super-block backups (for fsck -b #) at:
160, 2720, 5280, 7840
&prompt.root; mount /dev/md0a /mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0a 4710 4 4330 0% /mnt如果没有通过 选项指定一个标识号
&man.mdconfig.8; 将使用
&man.md.4; 为它自动选择一个未用的设备标识号。
分配给它的标识名将被输出到标准输出设备, 其形式是与
md4 类似。 如果希望了解更多相关信息, 请参见联机手册
&man.mdconfig.8;。&man.mdconfig.8; 功能很强大,
但在将映像文件作为文件系统挂载时, 仍需使用许多行的命令。 为此
FreeBSD 也提供了一个名为 &man.mdmfs.8; 的工具, 该程序使用
&man.mdconfig.8; 来配置 &man.md.4; 设备, 并用
&man.newfs.8; 在其上创建 UFS 文件系统, 然后用 &man.mount.8; 来完成挂载操作。 例如,
如果想创建和挂接像上面那样的文件系统映像,
只需简单地执行下面的步骤:使用 mdmfs 命令配置和挂载一个映像文件为文件系统&prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
&prompt.root; mdmfs -F newimage -s 5m md0/mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0 4718 4 4338 0% /mnt如果你使用没有加标识号的 选项,
&man.mdmfs.8; 将使用 &man.md.4; 的自动标示号特性来自动为其
选择一个未使用的设备。更详细的
&man.mdmfs.8;,请参考联机手册。以内存为介质的文件系统disks (磁盘)内存文件系统一般来说, 在建立以内存为介质的文件系统时, 应使用 交换区作为介质
(swap backing)。 使用交换区作为介质,
并不意味着内存盘将被无条件地换出到交换区,
它只是表示将根据需要从可换出的内存池中分配内存。
此外, 也可以使用
&man.malloc.9; 创建以内存作为介质的文件系统。
不过在内存不足时, 这种方式可能引致系统崩溃。用 mdconfig
创建新的内存盘设备&prompt.root; mdconfig -a -t swap -s 5m -u 1
&prompt.root; newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 2752, 5344, 7936
&prompt.root; mount /dev/md1/mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md1 4718 4 4338 0% /mnt使用 mdmfs 来新建内存介质文件系统&prompt.root; mdmfs -s 5m md2/mnt
&prompt.root; df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md2 4846 2 4458 0% /mnt从系统中移除内存盘设备磁盘移除内存盘设备当不再使用内存盘设备时, 应将其资源释放回系统。
第一步操作是卸下文件系统, 然后使用
&man.mdconfig.8; 把虚拟磁盘从系统中分离, 以释放资源。例如, 要分离并释放所有
/dev/md4 使用的资源, 应使用命令:&prompt.root; mdconfig -d -u 4mdconfig -l 命令可以列出关于配置
&man.md.4; 设备的信息。TomRhodesContributed by 文件系统快照文件系统快照FreeBSD 提供了一个和 Soft Updates
关联的新功能: 文件系统快照快照允许用户创建指定文件系统的映像,并把它们当做一个文件来对待。
快照文件必须在文件系统正在使用时创建,一个用户对每个文件系统创建的
快照不能大于20个。活动的快照文件被记录在超级块中,所以它们可以在系统
启动的时候一块进行挂接后摘掉。当一个快照不再需要时,可以使用标准的
&man.rm.1; 使用来使其删除。快照可以以任何顺序进行移除,但所有使用
的快照不可能同时进行移除,因为其它的快照将有可能互相引用一些块。不可改的 文件标志,
是由 &man.mksnap.ffs.8; 在完成创建快照文件时设置的。
&man.unlink.1; 命令是一个特例, 以允许删除快照文件。快照可以通过 &man.mount.8; 命令创建。 将文件系统
/var 的快照放到
/var/snapshot/snap 可以使用下面的命令:&prompt.root; mount -u -o snapshot /var/snapshot/snap /var作为选择,你也可以使用 &man.mksnap.ffs.8; 来创建一个快照:&prompt.root; mksnap_ffs /var /var/snapshot/snap可以查找文件系统中的快照文件 (例如 /var),
方法是使用 &man.find.1; 命令:&prompt.root; find /var -flags snapshot当快照文件被创建好后,可以用于下面一些目的:有些管理员用文件快照来进行备份,
因为快照可以被转移到 CD 或磁带上。文件系统一致性检查程序 &man.fsck.8; 可以用来检查快照文件。
如果文件系统在挂接前是一致的, 则检查结果也一定是一致的
(也就是不会做任何修改)。 实际上这也正是后台 &man.fsck.8;
的操作过程。在快照上运行 &man.dump.8; 程序。
dump 将返回包含文件系统和快照的时间戳。&man.dump.8;
也能够抓取快照,使用
标志可以首先创建快照, 完成 dump 映像之后再自动删除它。用 &man.mount.8; 来挂接快照作为文件系统的一个冻结的镜像。
要 &man.mount.8; 快照
/var/snapshot/snap 运行:&prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4
&prompt.root; mount -r /dev/md4 /mnt现在你就可以看到挂接在 /mnt 目录下的 /var
文件系统的快照。 每一样东西都保存的像它创建时的状态一样。
唯一例外的是更早的快照文件将表现为长度为 0 的文件。
用完快照文件之后可以把它卸下,使用:&prompt.root; umount /mnt
&prompt.root; mdconfig -d -u 4想了解更多关于 和
文件系统快照的信息, 包括技术说明, 可以访问
Marshall Kirk McKusick 的 WWW 站点
。文件系统配额accountingdisk spacedisk quotas配额是操作系统的一个可选的功能,
它允许管理员以文件系统为单元,
限制分派给用户或组成员所使用的磁盘空间大小或是使用的总文件数量。
这经常被用于那些分时操作的系统上, 对于这些系统而言,
通常希望限制分派到每一个用户或组的资源总量,
从而可以防止某个用户占用所有可用的磁盘空间。配置系统来启用磁盘配额在决定使用磁盘配额前,确信磁盘配额已经在内核中配置好了。只要在在内核
中配置文件中添加下面一行就行了:options QUOTA在默认情况下 GENERIC 内核是不会启用这个功能的,
所以必须配置、重建和安装一个定制的内核。请参考 FreeBSD 内核配置
这章了解更多有关内核配置的信息。接下来,需要在 /etc/rc.conf 中启用磁盘配额。可以
通过添加下面这行来完成:enable_quotas="YES"disk quotaschecking为了更好的控制配额时的启动,还有另外一个可配置的变量。通常
启动时,集成在每个文件系统上的配额会被配额检查程序
&man.quotacheck.8; 自动检查。配额检查功能能够确保在配额数据库中
的数据正确地反映了文件系统的数
据情况。这是一个很耗时间的处理进程,它会影响系统的启动时间。如果
想跳过这一步,可以在文件 /etc/rc.conf 加入
下面这一行来达到目的:check_quotas="NO"最后,要编辑 /etc/fstab 文件,以在每一个
文件系统基础上雇用磁盘配额。这是启用用户和组配额,或同时启用用户
和组配额的地方。要在一个文件系统上启用每个用户的配额,可以在 /etc/fstab
里添加 选项在要雇用配额文件的系统上。例如:/dev/da1s2g /home ufs rw,userquota 1 2同样的,要启用组配额,使用 选项来代替
选项。要同时启用用户和组配额,可以这样做:/dev/da1s2g /home ufs rw,userquota,groupquota 1 2默认情况下,配额文件是存放在文件系统的以 quota.user
和 quota.group 命名的根目录下。可以查看 &man.fstab.5;
联机手册了解更多信息。 尽管联机手册 &man.fstab.5; 提到,
可以为配额文件指定其他的位置, 但并不推荐这样做,
因为不同的配额工具并不一定遵循此规则。到这儿,可以用新内核重新启动系统。 /etc/rc 将自动
运行适当的命令来创建最初的配额文件,所以并不需要手动来创建任何零长度的配额
文件。在通常的操作过程中,并不要求手动运行 &man.quotacheck.8;、
&man.quotaon.8;, 或 &man.quotaoff.8; 命令,然而可能需要阅读与他们的操作
相似的联机手册。设置配额限制disk quotaslimits一旦您配置好了启用配额的系统,可以检查一下它们是真的有用。
可以这样做:&prompt.root; quota -v您应该能够看到一行当前正在使用的每个文件系统启用的磁盘配额
使用情况的摘要信息。现在可以使用 &man.edquota.8; 命令准备启用配额限制。有几个有关如何强制限制用户或组可以分配到的磁盘空间大小的选项。
您可以限制磁盘存储块的配额, 或文件的数量, 甚至同时限制两者。
这些限制最终可分为两类: 硬限制和软限制。硬性限制硬性限制是一种不能越过的限制。 一旦用户达到了系统指定的硬性限制,
他就无法在对应的文件系统分配到更多的资源。
例如, 如果文件系统上分给用户的硬性限制是
500 KB, 而现在已经用掉了 490 KB,
那么这个用户最多还能再分配 10 KB 的空间。
换言之, 如果这时试图再分配 11 KB, 则会失败。软性限制而与此相反, 软性限制在一段时间内是允许越过的。
这段时间也称为宽限期, 其默认值是一周。
如果一个用户延缓时间太长的话,软限制将会变成硬限制,
而继续分配磁盘空间的操作将被拒绝。
当用户占用的空间回到软性限制值以下时, 宽限期将重新开始计算。下面是一个运行 &man.edquota.8; 时看到的例子。当 &man.edquota.8;
命令被调用时,会被转移进 EDITOR 环境变量指派的编辑
器中,允许编辑配额限制。如果环境变量没有设置,默认在
vi 编辑器上进行。&prompt.root; edquota -u testQuotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)在每一个启用了磁盘配额的文件系统上,通常会看到两行。一行是
block 限制,另一行是 inode 限制。简单地改变要修改的配额限制的值。
例如,提高这个用户软限制的数值到 500 ,硬限制到 600 :/usr: kbytes in use: 65, limits (soft = 50, hard = 75)to:/usr: kbytes in use: 65, limits (soft = 500, hard = 600)当离开编辑器的时候,新的配额限制设置将会被保存。有时,在 UIDs 的范围上设置配额限制是非常必要的。这可以通过在
&man.edquota.8; 命令后面加上 选项来完成。首先,
给用户分配所需要的配额限制,然后运行命令
edquota -p protouser startuid-enduid。例如,如果
用户 test 已经有了所需要的配额限制,下面的命令
可以被用来复制那些 UIDs 为10,000 到 19,999 的配额限制:&prompt.root; edquota -p test 10000-19999更多细节请参考 &man.edquota.8; 联机手册。检查配额限制和磁盘使用disk quotaschecking既可以使用 &man.quota.1; 也可以使用 &man.repquota.8; 命令来检查
配额限制和磁盘使用情况。 &man.quota.1; 命令能够检查单个用户和组的配置
使用情况。只有超级用户才可以检查其它用户的配额和磁盘使用情况。
&man.repquota.8; 命令可以用来了解所有配额和磁盘的使用情况。下面是一个使用 quota -v 命令后的输出情况:Disk quotas for user test (uid 1002):
Filesystem usage quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60宽限期前面以 /usr 作为例子。
此用户目前已经比软限制 50 KB 超出了 15 KB,
还剩下 5 天的宽限期。 请注意,
星号 * 说明用户已经超出了其配额限制。通常, 如果用户没有使用文件系统上的磁盘空间, 就不会在
&man.quota.1; 命令的输出中显示, 即使已经为那个用户指定了配额。
而使用 选项则会显示它们, 例如前面例子中的
/usr/var。通过 NFS 使用磁盘配额NFS配额能够在 NFS 服务器上被配额子系统强迫使用。在 NFS 客户端,
&man.rpc.rquotad.8; 命令可以使用 quota 信息用于 &man.quota.1;
命令, 可以允许用户查看它们的 quota 统计信息。可以这样在 /etc/inetd.conf 中启用
rpc.rquotad:rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad现在重启 inetd:&prompt.root; /etc/rc.d/inetd restartLuckyGreenContributed by shamrock@cypherpunks.to加密磁盘分区disksencryptingFreeBSD 提供了极好的数据保护措施,防止未受权的数据访问。
文件权限和强制访问控制(MAC)(看 )
可以帮助预防在操作系统处于运行状态和计算机加电时未受权的第三方访问数据。
但是,和操作系统强制受权不相关的是,如果黑客有物理上访问计算机的可能,
那他就可以简单的把计算机的硬件安装到另一个系统上复制出敏感的数据。无论攻击者如何取得停机后的硬件或硬盘驱动器本身, &os; GEOM
Based Disk Encryption (基于 GEOM 的磁盘加密, gbde) 和
geli 加密子系统都能够保护计算机上的文件系统数据,
使它们免受哪怕是训练有素的攻击者获得有用的资源。
与那些只能加密单个文件的笨重的加密方法不同,
gbde 和 geli
能够透明地加密整个文件系统。 明文数据不会出现在硬盘的任何地方。使用 gbde 对磁盘进行加密成为 root配置 gbde
需要超级用户的权力。&prompt.user; su -
Password:在内核配置文件中添加对 &man.gbde.4; 的支持在您的内核配置中加入下面一行:options GEOM_BDE按照 所进行的介绍重新编译并安装内核。重新引导进入新的内核。另一种无需重新编译内核的方法, 是使用
kldload 来加载 &man.gbde.4;:&prompt.root; kldload geom_bde准备加密盘下面这个例子假设您添加了一个新的硬盘在您的系统并将拥有一个单独的加密分区。
这个分区将挂接在 /private目录下。
gbde 也可以用来加密
/home 和 /var/mail,
但是这需要更多的复杂命令来执行。添加新的硬盘添加新的硬盘到系统中可以查看在 中的说明。
这个例子的目的是说明一个新的硬盘分区已经添加到系统中如:
/dev/ad4s1c。在例子中
/dev/ad0s1*
设备代表系统中存在的标准 FreeBSD 分区。&prompt.root; ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4创建一个目录来保存 gbde Lock 文件&prompt.root; mkdir /etc/gbdegbde lock 文件包含了
gbde 需要访问的加密分区的信息。
没有 lock 文件,
gbde 将不能解密包含在加密分区上的数据。
每个加密分区使用一个独立的 lock 文件。初始化 gbde 分区一个 gbde 分区在使用前必须被初始化,
这个初始化过程只需要执行一次:&prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock&man.gbde.8; 将打开您的编辑器,
提示您去设置在一个模板文件中的配置变量。
使用 UFS1 或 UFS2,设置扇区大小为 2048:$FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
#
# Sector size is the smallest unit of data which can be read or written.
# Making it too small decreases performance and decreases available space.
# Making it too large may prevent filesystems from working. 512 is the
# minimum and always safe. For UFS, use the fragment size
#
sector_size = 2048
[...]
&man.gbde.8; 将让您输入两次用来加密数据的密钥短语。
两次输入的密钥必须相同。
gbde
保护您数据的能力依靠您选择输入的密钥的质量。
这个提示教您怎样选择一个安全易记的密钥短语,
请看 Diceware
Passphrase 网站。gbde init 命令为您的
gbde 分区创建了一个 lock 文件,
在这个例子中存储在
/etc/gbde/ad4s1c.lock中。
gbde lock 文件必须使用
.lock 扩展名才能够被
/etc/rc.d/gbde 启动脚本正确识别。gbde lock
文件 必须 和加密分区上的内容同时备份。
如果发生只有 lock 文件遭到删除的情况时, 就没有办法确定
gbde 分区上的数据是否是解密过的。
另外, 如果没有 lock 文件, 即使磁盘的合法主人,
不经过大量细致的工作也无法访问加密分区上的数据,
而这是在设计 &man.gbde.8; 时完全没有考虑过的。把加密分区和内核进行关联&prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock在加密分区的初始化过程中您将被要求提供一个密码短语。
新的加密设备将在
/dev 中显示为
/dev/device_name.bde:&prompt.root; ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde在加密设备上创建文件系统当加密设备和内核进行关联后,
您就可以使用 &man.newfs.8; 在此设备上创建文件系统,
使用 &man.newfs.8; 来初始化一个 UFS2
文件系统比初始化一个 UFS1 文件系统还要快,摧荐使用
选项。&prompt.root; newfs -U -O2 /dev/ad4s1c.bde&man.newfs.8; 命令必须在一个
gbde 分区上执行,
这个分区通过一个存在的
*.bde
设备名进行标识。挂接加密分区为加密文件系统创建一个挂接点。&prompt.root; mkdir /private挂接加密文件系统。&prompt.root; mount /dev/ad4s1c.bde /private校验加密文件系统是否有效加密的文件系统现在对于
&man.df.1; 应该可见并可以使用。&prompt.user; df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 1037M 72M 883M 8% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 8.1G 55K 7.5G 0% /home
/dev/ad0s1e 1037M 1.1M 953M 0% /tmp
/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr
/dev/ad4s1c.bde 150G 4.1K 138G 0% /private挂接已有的加密文件系统每次系统启动后,
在使用加密文件系统前必须和内核重新进行关联,
校验错误和再次挂接。使用的命令必须由
root用户来执行。关联 gbde 分区到内核&prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock接下来系统将提示您输入在初始化加密的
gbde 分区时所用的密码短语。校验文件系统错误加密文件系统不能列在
/etc/fstab 文件中进行自动加载,
在加载前必须手动运行 &man.fsck.8;
命令对文件系统进行错误检测。&prompt.root; fsck -p -t ffs /dev/ad4s1c.bde挂接加密文件系统&prompt.root; mount /dev/ad4s1c.bde /private加密后的文件系统现在可以有效使用。自动挂接加密分区可以创建脚本来自动地附加、 检测, 并挂接加密分区,
然而, 处于安全考虑, 这个脚本不应包含 &man.gbde.8; 密码。
因而, 我们建议这类脚本在控制台或通过 &man.ssh.1;
执行并要求用户输入口令。除此之外, 系统还提供了一个 rc.d 脚本。
这个脚本的参数可以通过
&man.rc.conf.5; 来指定, 例如:gbde_autoattach_all="YES"
gbde_devices="ad4s1c"
gbde_lockdir="/etc/gbde"在启动时将要求输入 gbde
的口令。 在输入正确的口令之后, gbde
加密分区将被自动挂接。 对于将 gbde
用在笔记本电脑上时, 这就很有用了。gbde 提供的密码学保护&man.gbde.8; 采用 CBC 模式的 128-位 AES 来加密扇区数据。
磁盘上的每个扇区都采用不同的 AES 密钥来加密。
要了解关于 gbde 的密码学设计,
包括扇区密钥如何从用户提供的口令字中生成等细节,
请参考 &man.gbde.4;。兼容性问题&man.sysinstall.8; 是和
gbde 加密设备不兼容的。
在启动 &man.sysinstall.8; 时必须将
*.bde
设备和内核进行分离,否则在初始化探测设备时将引起冲突。
与加密设备进行分离在我们的例子中使用如下的命令:&prompt.root; gbde detach /dev/ad4s1c还需要注意的是, 由于 &man.vinum.4; 没有使用
&man.geom.4; 子系统, 因此不能同时使用
gbde 与
vinum 卷。DanielGerzo撰写者 使用 geli 对磁盘进行加密从 &os; 6.0 开始提供了一个新的密码学 GEOM class —
geli。 它目前由
&a.pjd; 开发。 Geli 工具与
gbde 不同; 它提供了一些不同的功能,
并采用了不同的方式来进行密码学运算。&man.geli.8; 最重要的功能包括:使用了 &man.crypto.9; 框架 —
如果系统中有加解密硬件加速设备, 则 geli
会自动加以利用。支持多种加密算法 (目前支持
AES、 Blowfish, 以及 3DES)。允许对根分区进行加密。 在系统启动时,
将要求输入用于加密根分区的口令。允许使用两个不同的密钥 (例如, 一个
个人密钥 和一个 公司密钥)。geli 速度很快 —
它只进行简单的扇区到扇区的加密。允许备份和恢复主密钥。 当用户必须销毁其密钥时,
仍然可以通过从备份中恢复密钥来存取数据。允许使用随机的一次性密钥来挂接磁盘
— 这对于交换区和临时文件系统非常有用。更多 geli 功能介绍可以在
&man.geli.8; 联机手册中找到。下面的步骤介绍了如何启用 &os; 内核中的
geli 支持,
并解释了如何创建新和使用 geli
加密 provider。要使用 geli, 您必须运行
&os; 6.0-RELEASE 或更新版本。 由于需要修改内核,
因此您还需要拥有超级用户权限。在内核中加入 geli 支持在内核配置文件中加入下面两行:options GEOM_ELI
device crypto按照 介绍的步骤重新编译并安装内核。另外, geli 也可以在系统引导时加载。 这是通过在
/boot/loader.conf 中增加下面的配置来实现的:geom_eli_load="YES"&man.geli.8; 现在应该已经为内核所支持了。生成主密钥下面的例子讲描述如何生成密钥文件, 它将作为主密钥 (Master Key)
的一部分, 用于挂接到
/private 的加密 provider。
这个密钥文件将提供一些随机数据来加密主密钥。 同时,
主密钥也会使用一个口令字来保护。 Provider 的扇区尺寸为 4kB。
此外, 这里的讨论将介绍如何挂载
geli provider, 在其上创建文件系统,
如何挂接并在其上工作, 最后将其卸下。建议您使用较大的扇区尺寸 (例如 4kB),
以获得更好的性能。主密钥将由口令字保护, 而密钥文件的数据来源则将是
/dev/random。 我们称之为 provider 的
/dev/da2.eli 的扇区尺寸将是 4kB。&prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1
&prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2
Enter new passphrase:
Reenter new passphrase:同时使用口令字和密钥文件并不是必须的;
您也可以只使用其中的一种来加密主密钥。如果密钥文件写作 -, 则表示使用标准输入。
下面是关于如何使用多个密钥文件的例子:&prompt.root; cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2将 provider 与所生成的密钥关联&prompt.root; geli attach -k /root/da2.key /dev/da2
Enter passphrase:新的明文设备将被命名为
/dev/da2.eli。&prompt.root; ls /dev/da2*
/dev/da2 /dev/da2.eli创建新的文件系统&prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m
&prompt.root; newfs /dev/da2.eli
&prompt.root; mount /dev/da2.eli /private现在加密的文件系统应该已经可以被 &man.df.1; 看到,
并处于可用状态了:&prompt.root; df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 248M 89M 139M 38% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr
/dev/ad0s1d 989M 1.5M 909M 0% /tmp
/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var
/dev/da2.eli 150G 4.1K 138G 0% /private卸下卷并断开 provider一旦在加密分区上的工作完成,
并且不再需要 /private 分区,
就应考虑将其卸下并将 geli 加密分区从内核上断开。&prompt.root; umount /private
&prompt.root; geli detach da2.eli关于如何使用 &man.geli.8; 的更多信息,
可以在其联机手册中找到。使用 gelirc.d 脚本geli 提供了一个 rc.d 脚本,
它可以用于简化 geli 的使用。 通过
&man.rc.conf.5; 配置 geli 的方法如下:geli_devices="da2"
geli_da2_flags="-p -k /root/da2.key"这将把 /dev/da2 配置为一个
geli provider, 其主密钥文件位于
/root/da2.key, 而
geli 在连接 provider 时将不使用口令字
(注意只有在 geli init 阶段使用了
才可以这样做)。
系统将在关闭之前将 geli provider 断开。关于如何配置 rc.d 的详细信息可以在使用手册的
rc.d 一节中找到。ChristianBrüffer原作 对交换区进行加密swap (交换区)encrypting (加密)从 &os; 5.3-RELEASE 开始, &os; 提供了易于配置的交换区加密机制。
随所用的 &os; 版本, 可用的配置选项会有所不同,
而配置方法也会有一些差异。 从 &os; 6.0-RELEASE 开始,
已经可以使用 &man.gbde.8; 和 &man.geli.8;
两种加密系统来进行交换区的加密操作了。 在更早的版本中,
则只提供了 &man.gbde.8;。 前面所说的这两种加密系统,
都用到了 encswap 这个
rc.d 脚本。在前面的小节 如何加密磁盘分区
中, 已经就不同的加密系统之间的区别进行了简单的讨论。为什么需要对交换区进行加密?与加密磁盘分区类似, 加密交换区有助于保护敏感信息。
为此, 我们不妨考虑一个需要处理敏感信息的程序, 例如,
它需要处理口令。 如果这些口令一直保持在物理内存中, 则一切相安无事。
然而, 如果操作系统开始将内存页换出到交换区,
以便为其他应用程序腾出内存时, 这些口令就可能以未加密的形式写到磁盘上,
并为攻击者所轻易获得。 加密交换区能够有效地解决这类问题。准备在本节余下的部分中, 我们约定使用 ad0s1b
作为交换区。到目前为止, 交换区仍是未加密的。
很可能其中已经存有明文形式的口令或其他敏感数据。
要纠正这一问题, 首先应使用随机数来覆盖交换分区的数据:&prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1m使用 &man.gbde.8; 来加密交换区如果使用 &os; 6.0-RELEASE 或更新的版本, 则 /etc/fstab
中与交换区对应的行中, 设备名应追加
.bde 后缀:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.bde none swap sw 0 0
对于 &os; 6.0-RELEASE 之前的版本,
还需要在 /etc/rc.conf 中加入:gbde_swap_enable="YES"使用 &man.geli.8; 来加密分区另一种方法是使用 &man.geli.8; 来达到加密交换区的目的,
其过程与使用 &man.gbde.8; 大体相似。 此时, 在 /etc/fstab
中交换区对应的行中, 设备名应追加
.eli 后缀:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.eli none swap sw 0 0
&man.geli.8; 默认情况下使用密钥长度为 256-位的
AES 加密算法。当然, 这些默认值是可以通过 /etc/rc.conf 中的
geli_swap_flags 选项来修改的。 下面的配置表示让 rc.d 脚本
encswap 创建一个 &man.geli.8; 交换区,
在其上使用密钥长度为 128-位 的 Blowfish 加密算法, 4 kilobytes
的扇区尺寸, 并采用 最后一次关闭时卸下 的策略:geli_swap_flags="-e blowfish -l 128 -s 4096 -d"For systems prior to &os; 6.2-RELEASE, use the following line:geli_swap_flags="-a blowfish -l 128 -s 4096 -d"请参见 &man.geli.8; 联机手册中关于 onetime
命令的说明, 以了解其他可用的选项。验证所作的配置能够发挥作用在重启系统之后, 就可以使用
swapinfo 命令来验证加密交换区是否已经在正常运转了。如果使用了 &man.gbde.8;, 则:&prompt.user; swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.bde 542720 0 542720 0%
如果使用了 &man.geli.8;, 则:&prompt.user; swapinfo
Device 1K-blocks Used Avail Capacity
/dev/ad0s1b.eli 542720 0 542720 0%
diff --git a/zh_CN.GB2312/books/handbook/dtrace/chapter.sgml b/zh_CN.GB2312/books/handbook/dtrace/chapter.sgml
index f391d34443..fbd429f049 100644
--- a/zh_CN.GB2312/books/handbook/dtrace/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/dtrace/chapter.sgml
@@ -1,370 +1,370 @@
TomRhodesWritten by
- DTrace
+ &dtrace;概述
- DTrace
+ &dtrace;
- DTrace support
- DTrace
+ &dtrace; support
+ &dtrace;
- DTrace,也称为动态跟踪,是由 &sun;
+ &dtrace;,也称为动态跟踪,是由 &sun;
开发的一个用来在生产和试验性生产系统上找出系统瓶颈的工具。
在任何情况下它都不是一个调试工具,
而是一个实时系统分析寻找出性能及其他问题的工具。
- DTrace 是个特别好的分析工具,带有大量的帮助诊断系统问题的特性。
+ &dtrace; 是个特别好的分析工具,带有大量的帮助诊断系统问题的特性。
还可以使用预先写好的脚本利用它的功能。
- 用户也可以通过使用 DTrace D 语言创建他们自己定制的分析工具,
+ 用户也可以通过使用 &dtrace; D 语言创建他们自己定制的分析工具,
以满足特定的需求。在阅读了这一章节之后,你将了解:
- DTrace 是什么,它提供了些哪些特性。
+ &dtrace; 是什么,它提供了些哪些特性。
- DTrace 在 &solaris; 与 &os; 上的实现的差别。
+ &dtrace; 在 &solaris; 与 &os; 上的实现的差别。
- 如何在 &os; 上开启和使用 DTrace。
+ 如何在 &os; 上开启和使用 &dtrace;。在阅读这一章节之前,你应该了解:了解 &unix; 和 &os; 的基本知识
()。熟悉基本的内核配置/编译
().熟悉 &os; 有关的安全知识
()。了解如何获取和重新编译 &os; 源代码
- ()。
+ ()。这项特性目前仍被认为是试验性的。
有些选项功能性缺失,另有一些可能还无法运行。最终,
这个特性会适合用于生产,届时这篇文档也会做些适当的修改。实现上的差异
- 虽然 &os; 上的 DTrace 与 &solaris; 上的非常相似,
+ 虽然 &os; 上的 &dtrace; 与 &solaris; 上的非常相似,
在继续深入之前我们需要说明一下存在的差异。
- 用户首先会注意到的便是 &os; 上的 DTrace 需要明确的被启用。
- DTrace 相关的内核选项和模块必须开启后才能正常工作。
+ 用户首先会注意到的便是 &os; 上的 &dtrace; 需要明确的被启用。
+ &dtrace; 相关的内核选项和模块必须开启后才能正常工作。
稍后我们会作详细介绍。有一个 DDB_CTF
内核选项用来开启从内核与内核模块加载
CTF 数据。
CTF 是 &solaris; Compact C Type Format
封装了类似于 DWARF 和 venerable stabs
简化的调试信息。CTF 数据是由
ctfconvert 和 ctfmerge
工具加入二进制文件的。ctfconvert
工具分析由编译器生成的 DWARF 调试
ELF section,
ctfmerge 合并目标文件的
CTF ELF section
到可执行文件或共享库。更多关于在启用 &os;
内核上启用此项的详细内容即将完成。比起 &solaris;, &os; 有几个不同提供器。
最值得注意的时 dtmalloc 提供器,
可以让你根据类型追踪 &os; 内核中的
malloc()。
- 只有 root 可以使用 &os; 上的 DTrace。
+ 只有 root 可以使用 &os; 上的 &dtrace;。
这是由系统安全上的差异造成的,&solaris; 提供了一些 &os;
上还为实现的低层的安全检查。同样,
/dev/dtrace/dtrace 也被严格的限制为仅供
root 用户访问。
- 最后,DTrace 为 &sun; CDDL
+ 最后,&dtrace; 为 &sun; CDDL
许可下发布的软件。随 &os; 发行的
Common Development and Distribution License
可以在查阅
/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE
或者通过
查看在线版本。
- 这个许可表示带有 DTrace 选项的 &os; 内核仍为
+ 这个许可表示带有 &dtrace; 选项的 &os; 内核仍为
BSD 许可;然而以二进制发布模块,
或者加载二进制模块则需遵守 CDDL。
- 启用 DTrace 支持
+ 启用 &dtrace; 支持
- 在内核配置文件中加入以下几行来开启对 DTrace 的支持:
+ 在内核配置文件中加入以下几行来开启对 &dtrace; 的支持:options KDTRACE_HOOKS
options DDB_CTF使用 AMD64 架构的需要在内核配置文件中加入如下这行:options KDTRACE_FRAME此选项提供了对 FBT 特性的支持。
- DTrace 可以在没有此选项的情况下正常工作,
+ &dtrace; 可以在没有此选项的情况下正常工作,
但是函数边界跟踪便会有所限制。所有的源代码都必须重新使用 CTF
选项编译安装。重新编译 &os; 源代码可以通过以下的命令完成:&prompt.root; cd /usr/src
&prompt.root; make WITH_CTF=1 kernel系统需要重新启动。在重新启动和新内核载入内存之后,需要添加 Korn shell
- 的支持。因为 DTrace 工具包有一些工具是由 ksh
+ 的支持。因为 &dtrace; 工具包有一些工具是由 ksh
写的。安装 shells/ksh93。
同样也可以通过 shells/pdksh
或者 shells/mksh
使用这些工具。最后是获得最新的 DTrace 工具包。
当前版本可以通过下面的链接找到
。
这个工具包含有一个安装机制,尽管如此,并不需要安装便可使用它们。
- 使用 DTrace
+ 使用 &dtrace;
- 在使用 DTrace 的功能之前,DTrace 设备必须存在。
+ 在使用 &dtrace; 的功能之前,&dtrace; 设备必须存在。
使用如下的命令装载此设备:&prompt.root; kldload dtraceall
- DTrace 支持现在应该可以使用了。
+ &dtrace; 支持现在应该可以使用了。
管理员现在可以使用如下的命令查看所有的探测器:&prompt.root; dtrace -l | more所有的输出都传递给 more 工具,
- 因为它们会很快超出屏幕的显示区域。此时,DTrace
+ 因为它们会很快超出屏幕的显示区域。此时,&dtrace;
应该被认为是能够正常工作的了。现在是该考察工具包的时候了。
- 工具包是实现写好的一堆脚本,与 DTrace 一起运行来收集系统信息。
+ 工具包是实现写好的一堆脚本,与 &dtrace; 一起运行来收集系统信息。
有脚本用来检查已打开的文件,内存,CPU
使用率和许多东西。使用如下的命令解开脚本:&prompt.root; gunzip -c DTraceToolkit* | tar xvf -使用 cd 命令切换到那个目录,
并修改所有文件的可执行权限,把那些名字小写的文件权限改为
755。所有这些脚本都需要修改它们的内容。那些指向
/usr/bin/ksh 需要修改成
/usr/local/bin/ksh,另外使用
/usr/bin/sh 需要变更为
/bin/sh,最后还有使用
/usr/bin/perl 的需要变更为
/usr/local/bin/perl。
- 此刻还需谨慎提醒一下读者 &os; 的 DTrace 支持仍是
+ 此刻还需谨慎提醒一下读者 &os; 的 &dtrace; 支持仍是
不完整的 和 试验性 的。
这些脚本中的大多数都无法运行,因为它们过于针对 &solaris;
或者使用了目前还不支持的探测器。
- 在撰写这篇文章的时候,DTrace 工具包中只有两个脚本在
+ 在撰写这篇文章的时候,&dtrace; 工具包中只有两个脚本在
&os; 上是完全支持的:
hotkernel 和 procsystime
脚本。这两个脚本便是我们下一部分将要探讨的:hotkernel
被设计成验明哪个函数占用了内核时间。
正常运行的话,它将生成类似以下的输出:&prompt.root; ./hotkernel
Sampling... Hit Ctrl-C to end.系统管理员必须使用
CtrlC 组合键停止这个进程。
紧接着中止之后,脚本便会一张内核函数与测定时间的列表,
使用增量排序输出:kernel`_thread_lock_flags 2 0.0%
0xc1097063 2 0.0%
kernel`sched_userret 2 0.0%
kernel`kern_select 2 0.0%
kernel`generic_copyin 3 0.0%
kernel`_mtx_assert 3 0.0%
kernel`vm_fault 3 0.0%
kernel`sopoll_generic 3 0.0%
kernel`fixup_filename 4 0.0%
kernel`_isitmyx 4 0.0%
kernel`find_instance 4 0.0%
kernel`_mtx_unlock_flags 5 0.0%
kernel`syscall 5 0.0%
kernel`DELAY 5 0.0%
0xc108a253 6 0.0%
kernel`witness_lock 7 0.0%
kernel`read_aux_data_no_wait 7 0.0%
kernel`Xint0x80_syscall 7 0.0%
kernel`witness_checkorder 7 0.0%
kernel`sse2_pagezero 8 0.0%
kernel`strncmp 9 0.0%
kernel`spinlock_exit 10 0.0%
kernel`_mtx_lock_flags 11 0.0%
kernel`witness_unlock 15 0.0%
kernel`sched_idletd 137 0.3%
0xc10981a5 42139 99.3%这个脚本也能与内核模块一起工作。要使用此特性,
用 标志运行脚本:&prompt.root; ./hotkernel -m
Sampling... Hit Ctrl-C to end.
^C
MODULE COUNT PCNT
0xc107882e 1 0.0%
0xc10e6aa4 1 0.0%
0xc1076983 1 0.0%
0xc109708a 1 0.0%
0xc1075a5d 1 0.0%
0xc1077325 1 0.0%
0xc108a245 1 0.0%
0xc107730d 1 0.0%
0xc1097063 2 0.0%
0xc108a253 73 0.0%
kernel 874 0.4%
0xc10981a5 213781 99.6%procsystime
脚本捕捉并打印给定 PID 的系统调用时间。
在下面的例子中,新生成了一个 /bin/csh
实例。procsystime 执行后则等待在新运行的
csh 上键入一些命令。 这是测试的结果:&prompt.root; ./procsystime -n csh
Tracing... Hit Ctrl-C to end...
^C
Elapsed Times for processes csh,
SYSCALL TIME (ns)
getpid 6131
sigreturn 8121
close 19127
fcntl 19959
dup 26955
setpgid 28070
stat 31899
setitimer 40938
wait4 62717
sigaction 67372
sigprocmask 119091
gettimeofday 183710
write 263242
execve 492547
ioctl 770073
vfork 3258923
sigsuspend 6985124
read 3988049784正如显示的那样,read
系统调用似乎使用了最多的纳秒单位时间,
getpid() 系统调用使用了最少的时间。D 语言
- DTrace 工具包包括了很多由 DTrace 特殊语言写成的脚本。
+ &dtrace; 工具包包括了很多由 &dtrace; 特殊语言写成的脚本。
在 &sun; 的文档中称这类语言为 D 语言,
它与 C++ 非常类似。对此语言更深入的讨论则超出了这篇文章的范围。
更多相关的讨论可以在
找到。
diff --git a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml
index ce6f1195dd..7f2601bb73 100644
--- a/zh_CN.GB2312/books/handbook/eresources/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/eresources/chapter.sgml
@@ -1,1745 +1,1772 @@
Internet上的资源发展迅猛的FreeBSD使得现有的印刷、平面媒体跟不上它的发展进度!
而电子版的也许是最好的,通常是唯一一个可以跟上最新发展方向的。FreeBSD来自于志愿者的成果,
- 用户社区通常也扮演着是“技术支持部门”的角色。通过电子邮件和USENET新闻组可以很快的找到他们。
+ 用户社区通常也扮演着是“技术支持部门”的角色。通过电子邮, Web 论坛件和 USENET
+ 新闻组可以很快的找到他们。
以下列出了尽量多的联系FreeBSD用户社区的方式。如果您发现有其他的资源没有被包括在这儿,
请告诉&a.doc;,以便将它们加入到这里。邮件列表
- 虽然大部分的FreeBSD开发人员都会阅读USENET,
- 如果您只将问题发表在 comp.unix.bsd.freebsd.* 其中之一的讨论组上,
- 我们也不能保证我们永远可以及时了解您的问题。如果您将问题发到适当的邮件列表上,
- 您不但可以同时让FreeBSD研发人员和其他的读者看到,
- 通常也可以得到一个较好的(至少会比较快)的回应。
+ 邮件列表通常是提问或是发起有关 FreeBSD
+ 某一方面的专项技术讨论最直接的途径。 有多种针对于不同 FreeBSD 话题的邮件列表。
+ 把你的问题发送到最合适的邮件列表通常能获得更加快速准确的回复。本文的最后给出了各个不同的邮件列表的使用规则。
在订阅其中任何一个列表之前,请先阅读使用条文。
现在订阅这些邮件列表的人每天都会收到上百封关于FreeBSD的信件。
设立列表的使用条文有助于维护讨论质量。否则这些讨论计划的列表将失去其意义。如果你想要尝试发送一封邮件到
&os; 邮件列表,你可以把邮件发往 &a.test.name;。
请不要往其他的列表发送测试邮件。如果不知道哪个邮件列表适合于发送您的问题, 请参见 如何从
FreeBSD-questions 邮件列表中更快地得到答案。在列表中发送任何问题之前, 请首先学习使用邮件列表的最佳方式,
例如如何通过阅读
邮件列表常见问题回答集 (FAQ) 文档, 来避免经常重复的讨论。全部的邮件列表记录都可以在FreeBSD World
Wide Web服务器上找到。此服务器提供了很棒的关键词搜寻功能,可让您找到FAQ的解答。
- 而在邮件列表上提问之前,请先搜寻是否已有答案。
+ 而在邮件列表上提问之前,请先搜寻是否已有答案。
+ 请注意这意味着所有发往 FreeBSD 邮件列表的消息都会被永久归档保存。
+ 当涉及到隐私保护的话,
+ 可以考虑使用一个可使用后丢弃的电子邮件地址并只发送公开的信息。
列表摘要一般性的列表: 以下的列表都是一般性的,
而且可以自由地加入,鼓励大家加入他们:目录用途&a.advocacy.name;FreeBSD鼓吹者&a.announce.name;重要的事件和里程碑&a.arch.name;架构和设计的讨论&a.bugbusters.name;与FreeBSD问题报告数据库和有关工具维护相关的讨论&a.bugs.name;报告FreeBSD的Bug&a.chat.name;和技术无关的FreeBSD讨论区&a.current.name;讨论使用 &os.current; 有关的一些问题&a.isp.name;ISP使用FreeBSD的讨论&a.jobs.name;与FreeBSD有关的工作机会&a.policy.name;FreeBSD核心团队方针讨论。低流量并且只读的&a.questions.name;用户问题和技术支持&a.security-notifications.name;安全通知&a.stable.name;讨论使用 &os.stable; 有关的一些问题&a.test.name;在真正发送一个邮件到邮件列表之前可以先发送到这里测试技术性的邮件列表: 以下的邮件列表是用来讨论技术性问题的。
在加入订阅及讨论之前请务必认真阅读每个列表主题,因为他们讨论的内容都是严格地被限制着的。目录用途&a.acpi.name;ACPI 和电源管理的开发&a.afs.name;将 AFS 移植到 FreeBSD&a.aic7xxx.name;为 &adaptec; AIC 7xxx 开发驱动&a.alpha.name;将 FreeBSD 移植到 Alpha 工作站&a.amd64.name;将 FreeBSD 移植到 AMD64 系统&a.apache.name;关于与 Apache 有关的 ports 的讨论&a.arm.name;将 FreeBSD 移植到 &arm; 处理器&a.atm.name;在 FreeBSD 上使用 ATM 网络&a.audit.name;源代码审核&a.binup.name;二进制更新系统的设计和开发&a.bluetooth.name;在 FreeBSD 上使用 &bluetooth; 技术&a.cluster.name;在集群环境中使用 FreeBSD&a.cvsweb.name;CVSweb 维护&a.database.name;讨论 FreeBSD 下开发和使用数据库&a.doc.name;创建 FreeBSD 相关文档&a.drivers.name;为 &os; 撰写驱动&a.eclipse.name;&os; 上的 Eclipse IDE、工具、 富客户应用,
以及 ports 的用户讨论。&a.embedded.name;在嵌入式应用中使用 FreeBSD&a.eol.name;关于与 FreeBSD 有关, 但已不再为 FreeBSD Project
所维护的软件的互助支持。&a.emulation.name;在 FreeBSD 上模拟其它系统, 如
Linux/&ms-dos;/&windows;&a.firewire.name;FreeBSD 的 &firewire; (iLink, IEEE 1394) 技术讨论&a.fs.name;文件系统&a.geom.name;针对 GEOM 的讨论和实现&a.gnome.name;移植 GNOME 和 GNOME应用程序&a.hackers.name;一般性的技术讨论&a.hardware.name;一般性的支持 FreeBSD 的硬件的讨论&a.i18n.name;FreeBSD 的国际化&a.ia32.name;在 IA-32 (&intel; x86) 平台上运行 FreeBSD&a.ia64.name;将 FreeBSD 移植到 &intel; 即将推出的 IA64 系统&a.ipfw.name;关于 IP 防火墙代码再设计的技术性讨论&a.isdn.name;ISDN开发人员&a.jail.name;关于 &man.jail.8; 机制的讨论&a.java.name;&java; 开发人员以及移植 &jdk;s 到 FreeBSD 的人们&a.kde.name;移植 KDE 和 KDE 应用程序&a.lfs.name;移植 LFS 到FreeBSD上&a.libh.name;第二代的安装和 package 系统&a.mips.name;移植 FreeBSD 到 &mips;&a.mobile.name;关于便携式计算机的讨论&a.mozilla.name;移植 Mozilla 到 FreeBSD 上&a.multimedia.name;多媒体应用程序&a.newbus.name;技术讨论关于总线架构&a.net.name;网络子系统和 TCP/IP 源代码的讨论&a.openoffice.name;移植 OpenOffice.org 和
&staroffice; 到 FreeBSD 上&a.performance.name;高性能、负载下安装后的性能调整问题&a.perl.name;许多与 perl 相关的 ports 的维护&a.pf.name;关于 packet filter
防火墙系统的讨论&a.platforms.name;关于向非 &intel; 架构的平台上移植的讨论&a.ports.name;关于 Ports Collection 的讨论&a.ports-bugs.name;ports bugs/PRs讨论&a.ppc.name;移植 FreeBSD 到 &powerpc;&a.proliant.name;关于 FreeBSD 在 HP ProLiant 服务器平台上的技术讨论&a.python.name;FreeBSD 专属的 Python 问题&a.qa.name;质量保证(QA)讨论, 通常在未发布之前&a.rc.name;关于 rc.d 系统及其开发的讨论&a.realtime.name;FreeBSD 实时扩展的开发&a.ruby.name;关于 FreeBSD 上 Ruby 的讨论&a.scsi.name;SCSI 子系统&a.security.name;系统安全&a.small.name;在嵌入式系统上使用 FreeBSD
(已过时; 请使用 &a.embedded.name; 代替)&a.smp.name;有关对称多处理器的设计讨论&a.sparc.name;移植 FreeBSD 到 &sparc; 系统&a.standards.name;让 FreeBSD 顺应 C99 以及 &posix; 标准&a.sun4v.name;将 FreeBSD 移植到基于 &ultrasparc; T1 的系统上&a.threads.name;线程&a.testing.name;FreeBSD 性能和稳定性测试&a.tokenring.name;在 FreeBSD 中支持 Token Ring&a.usb.name;关于 &os; 的 USB 支持的讨论&a.virtualization.name;讨论各种 &os; 支持的虚拟化技术&a.vuxml.name;关于 VuXML 的问题讨论&a.x11.name;维护和支持在 FreeBSD 上运行的 X11&a.xen.name;讨论 &os; &xen; 上的移植 — 实现和使用限制订阅的列表: 以下的列表是针对某些特定的读者而设的,
而且并不适合被当成是一般公开讨论区。您最好在某一技术讨论区参与讨论后再选择订阅这些
限制订阅的邮件列表,因为这样您可以了解到在这些讨论区发言所需要的礼仪。目录用途&a.hubs.name;运行镜象站点的成员(支持基本服务)&a.usergroups.name;用户组调整&a.vendors.name;商家在发布之前的调整&a.wip-status.name;FreeBSD 项目进度状态&a.www.name;www.FreeBSD.org的维护分类列表: 所有以上的列表在一个分类格式里面是可利用的。
一旦订阅了一个列表,您可以在您的账号选项里面设置您的分类选项。CVS 和 SVN 列表: 以下的邮件是给对FreeBSD源代码的变更记录有兴趣的人看的,
而且它们是只读的邮件列表,您不能发Email给他们。列表源位置描述&a.cvsall.name;/usr/(CVSROOT|doc|ports)所有对源代码的改变纪录 (其他 CVS commit 列表的超集)&a.cvs-doc.name;/usr/(doc|www)所有对 doc 和 www 源代码的改变记录&a.cvs-ports.name;/usr/ports所有对 ports 源代码的改变记录&a.cvs-projects.name;/usr/projects所有对 projects 源代码的改变记录&a.cvs-src.name;/usr/src所有对 src 源代码的改变记录
(由 svn-to-cvs 提交导入程序生成)&a.svn-src-all.name;/usr/src所有对 Subversion 仓库的改变记录
(除了 user 和
projects)&a.svn-src-head.name;/usr/src所有对 Subversion 仓库 head
分支的改变记录 (&os;-CURRENT 分支)&a.svn-src-projects.name;/usr/projects所有对 Subversion 源码仓库中有关
projects 部分的改变记录&a.svn-src-release.name;/usr/src所有对 Subversion 源码仓库中有关
releases 部分的改变记录&a.svn-src-releng.name;/usr/src所有对 Subversion 源码仓库中有关
releng 部分的改变记录
(security / release engineering 分支)&a.svn-src-stable.name;/usr/src所有对 Subversion 源码仓库中有关
stable 分支的改变记录&a.svn-src-stable-6.name;/usr/src所有对 Subversion 源码仓库中有关
stable/6 分支的改变记录&a.svn-src-stable-7.name;/usr/src所有对 Subversion 源码仓库中有关
stable/7 分支的改变记录&a.svn-src-stable-other.name;/usr/src所有对 Subversion 源码仓库中早期
stable 分支的改变记录&a.svn-src-svnadmin.name;/usr/src所有对 Subversion 源码仓库中管理用脚本, hook
和其他配置数据的改变记录&a.svn-src-user.name;/usr/src所有对 Subversion 源码仓库中有关
user 部分的改变记录&a.svn-src-vendor.name;/usr/src所有对 Subversion 源码仓库中有关
vender 部分的改变记录如何订阅订阅一个列表,点击上面的列表名字或到 &a.mailman.lists.link;
并点击进入您感兴趣的列表,这个列表的页面包含了所必需的订阅操作指南。其实您只需发送邮件到
列表名@FreeBSD.org。
它将被再次转发到全世界的这个邮件列表的成员。点击上面的 URL,在列表的底部可以从订阅的列表中退出。
也可以发送一个电子邮件到
列表名-unsubscribe@FreeBSD.org
来退订。此外,我们要求您必须保持在技术性的邮件列表中只是讨论技术。
如果您只是对一些重要的公告感兴趣,建议您加入 &a.announce;,
它的通信量比较低。列表规章所有 FreeBSD 的邮件列表都有同样的基本规则,
所有人必须按照规则来做。 违反这些规则时,
FreeBSD Postmaster postmaster@FreeBSD.org
会在前两次发送警告, 如果第三次违反, FreeBSD Postmaster
将从所有 FreeBSD 的邮件列表中删除这样的人,
并过滤来自发信人之后的所有邮件。
我们很遗憾必须要遵守这样的规则,
但今天的互联网是一个很混乱的环境,
它上面的很多约束机制, 都相当脆弱。具体规则:任何发表的主题都应当附合基本的列表概况。例如,如果列表是有关技术问题的,
那您发表的文章包含技术讨论。不要把不相关的讨论放在一起。
对于没有主题的自由形式的讨论,可以使用 FreeBSD-chat freebsd-chat@FreeBSD.org。不要将同一个问题发送到超过两个的邮件列表上,当有一个清晰和明显的必须要
发表到两个列表的要求时,也只能是两个。对于大多数的列表,已经有相当多的订户了,
除了一些比较深奥的问题(如-stable & -scsi) ,没有必要同时将一个问题发到多个列表上。
如果一个信息以这种方式(多个邮件列表在Cc行出现)被发送给您,
那Cc行在把它再发送出去之前也将被整理。
无论谁是最初发表者,都会导致您自己的交叉发送。不容许进行人身攻击和亵渎(在前后的争论中),包括用户和开发人员。
应当遵守最起码的网络礼节,象需要征得同意才可以引用或张贴私人邮件等。
然而,也有非常少的情况下,这样的内容会符合列表规章,
因此,它会在最初给予警告(或禁止)。严格的禁止非FreeBSD相关产品或服务的广告,一旦发现将马上取缔。单独的列表规章:&a.acpi.name;ACPI和电源管理开发&a.afs.name;Andrew文件系统这个列表是用来讨论porting和从CMU/Transarc使用AFS。&a.announce.name;重要事件/里程碑这是一个发布FreeBSD重大事件的邮件列表。这包括有关snapshots和其他版本的公告,
新的FreeBSD的性能的公告,还可以用于指派志愿者等等。这个列表比较小。&a.arch.name;架构和设计讨论这个列表是讨论FreeBSD的架构。本质上应保证内容的纯技术性。例如主题是:如何重新创建系统使其同时有几个自己构造的系统运行。需要什么才能修复VFS来使Heidemann层工作。我们怎么改变设备驱动程序接口以便能够在多种总线和体系结构上使用同样的驱动程序。如何写一个网络驱动。&a.audit.name;源代码审核计划这个是针对FreeBSD源代码审核计划的邮件列表,
虽然这最初是针对安全方面代码修正的讨论,现在它已经扩展到任何代码修正的讨论。这个列表涉及补丁方面的问题比较多,可能普通的FreeBSD用户对此不感兴趣。
不与一个特定的代码修正相关的安全讨论将放在freebsd-security中。相反的,
所有的开发人员都被鼓励把他们的补丁发到这儿来,
特别是如果他们发现有一个错误可能会影响系统的完整性时。&a.binup.name;FreeBSD二进制升级计划这个列表主要是讨论二进制升级binup系统。
设计问题,执行细节,补丁,错误报告,状态报告,特性要求,
提交日志,和所有其他与 binup相关的东西都可以。&a.bluetooth.name;FreeBSD 上的 &bluetooth;这是一个 FreeBSD 的 &bluetooth; 用户聚集的讨论区。
这里欢迎关于设计问题、 实现细节、 补丁、 问题报告、 开发进度报告,
功能需求以及其他与 &bluetooth; 相关的讨论。&a.bugbusters.name;同等问题报告处理结果这个列表的目的是作为一个调整和讨论论坛来服务于Bug列表的成员,Bugbuster列表成员
和其他任何的对PR数据库真正的有兴趣的成员。这个列表不是为了讨论关于Bug细节,补丁或PRs。&a.bugs.name;Bug报告这是一个报告FreeBSD的Bug的邮件列表。可以随时通过
&man.send-pr.1;
命令或WEB页面来提交Bug。&a.chat.name;与FreeBSD社区相关的非技术性项目这个列表超出了其他有关非技术、社会信息的内容。
包括谈论Jordan看起来是否像一个机敏的侦探,是否句首的字母要大写, 谁喝了很多咖啡,
哪儿的啤酒酿造的最好,谁在他们的地下室里酿造了啤酒等等。对于偶然宣布重大的事件
(例如:将要举行的聚会,婚礼,生日,新工作等等)也能使用这种技术列表,除上述列举之外
任何事情都可以发布在-chat列表上。&a.core.name;FreeBSD核心团队这是一个只供核心成员内部使用的邮件列表,只有当一个与FreeBSD相关的严重的事情需要裁决或严格审核时,
才能发送消息到这个邮件列表。&a.current.name;关于使用&os.current;版的讨论这是一个针对&os.current;用户的邮件列表。
它包括一些可能影响用户的新特性的警告,使用FreeBSD-current的一些指导。
任何运行CURRENT的人必须同意这个列表,这是一个纯技术的邮件列表。&a.cvsweb.name;FreeBSD CVSweb计划关于FreeBSD-CVSweb的使用,开发和维护的技术性讨论。&a.doc.name;文档计划这个邮件列表是与FreeBSD创建的文档的出版和计划的讨论。
这个邮件列表的成员都会提交到The FreeBSD Documentation Project。
它是一个开放的列表,可以自由地加入和做贡献!&a.drivers.name;为 &os; 撰写设备驱动这是关于 &os; 上的设备驱动的技术论坛。
它主要供编写设备驱动的开发人员提出关于如何使用 &os;
内核提供的 API 来编写设备驱动程序的问题。&a.eclipse.name;&os; 上的 Eclipse IDE、工具、
富客户应用, 以及 ports 的用户讨论。这个邮件列表的目的, 是为在 &os; 平台上选择、 安装、
使用、 开发和维护 Eclipse IDE、 工具、 富客户应用的用户,
提供互助式支持, 以及为将 Eclipse IDE 和插件移植到
&os; 环境中提供帮助。另一个目的是建立一个在 Eclipse 社区和 &os;
社区之间的交流管道, 以达到互惠互利。尽管这个列表主要关注的是 Eclipse 用户的诉求,
它也为使用 Eclipse 框架开发 &os; 专用的应用提供了论坛。
&a.embedded.name;在嵌入式应用中使用 FreeBSD这个列表讨论关于在嵌入式系统中如何使用 FreeBSD 的话题。
这是一个技术性的邮件列表, 其主要内容是技术讨论。
针对这一邮件列表, 我们将嵌入式系统定义为那些不作为桌面系统、
只完成某些单一任务的计算设备。 这些实例包括路由器交换机和
PBX 这样的网络设备、 远程测量设备、 PDA、
PoS 系统,等等。&a.emulation.name;模拟其他系统, 例如
Linux/&ms-dos;/&windows;这是一个讨论关于如何在 &os;
上运行为其他操作系统所撰写的程序的论坛。
&a.eol.name;关于与 FreeBSD 有关, 但已不再为 FreeBSD Project
所维护的软件的互助支持。这个邮件列表主要用于那些有兴趣提供或使用针对已不再为 FreeBSD Project
官方所支持 (例如, 以安全更新或补丁的形式) 的 FreeBSD 相关软件的用户或公司讨论。&a.firewire.name;&firewire; (iLink, IEEE 1394)这个邮件列表是关于FreeBSD子系统&firewire; (aka IEEE 1394 aka
iLink)的设计和执行。相关特定的主题包括标准,总线设计和他们的协议,
适配器板/卡/芯片设置,及他们的正确的代码的结构和实施。&a.fs.name;文件系统关于FreeBSD文件系统的讨论。这是一个纯技术的邮件列表。&a.geom.name;GEOM针对GEOM和相关执行的讨论。这是一个纯技术的邮件列表。&a.gnome.name;GNOME讨论关于在FreeBSD系统上的GNOME桌面环境
这是一个纯技术的邮件列表。&a.ipfw.name;IP防火墙这是关于在FreeBSD里重新设计IP防火墙代码的技术讨论论坛。&a.ia64.name;移植FreeBSD到IA64这是一个有关将FreeBSD移植到&intel; IA64架构上的技术讨论列表,
讨论一些相关的问题与解决方案。也欢迎对这些问题感兴趣的个别讨论者。&a.isdn.name;ISDN通信这是一个FreeBSD支持的ISDN系统开发的邮件列表。&a.java.name;&java;开发这是一个讨论&java; 应用开发和 &jdk;s的porting与维护的邮件列表。&a.jobs.name;工作的提供和寻找这个论坛是针对与 &os; 相关的雇佣信息和个人简历,
比如: 如果您想找一个与 &os; 相关的工作或有一个工作需要
&os; 这是一个让您来广告的好地方。 这 不
是对一般性雇佣问题的邮件列表, 对这个问题已经有了足够多的论坛。注意这个列表,像其他的
FreeBSD.org
邮件列表一样是会分发给全世界的订阅者的。
因此,您需要明白关于位置和地域问题,确定之间是容易联系和可合作的。Email最好应该使用 —纯文本格式,不过基本的PDF,HTML和
很少其他的能被更多读者接受的格式也是可以的。µsoft; Word (.doc)
格式是被邮件列表服务器拒绝的。&a.kde.name;KDE讨论关于在FreeBSD系统上使用KDE。
这是一个纯技术的邮件列表。&a.hackers.name;技术讨论这是一个与FreeBSD相关的技术讨论论坛,是一个主要的技术性邮件列表。
他是针对个别的工作在FreeBSD上的人来提出问题或讨论相关的解决方案,
也欢迎对这些问题感兴趣的个别的讨论者。这是一个纯技术的邮件列表。&a.hardware.name;FreeBSD硬件的普通讨论有关FreeBSD运行的硬件类型的普通讨论,包括是否该买的一些问题和建议。&a.hubs.name;镜象站点人们运行FreeBSD的镜象站点的公告和讨论。&a.isp.name;ISP供应商问题这是一个讨论使用FreeBSD的ISP供应商的邮件列表。这是一个纯技术的邮件列表。&a.openoffice.name;OpenOffice.org关于OpenOffice.org和&staroffice;.
的移植和维护。&a.performance.name;讨论关于调整及高速运行FreeBSD这个邮件列表提供了一个为黑客,管理员和有关的团体去讨论与FreeBSD性能相关的主题的空间。
可以在这里进行讨论的包括在任意高负载下,体验版下或者是有限制的条件下安装FreeBSD。
非常鼓励自愿地为了改进FreeBSD性能的相关团体去订阅这个列表。
这是个高技术含量的列表理论上说适合有丰富经验的FreeBSD用户,黑客,或对FreeBSD的速度、性能
、升级感兴趣的管理员。这不是一个问答式的列表,关于这些应该去读相关文档,但他是
一个可以投稿的地方,或者了解关于待解决的与性能相关的主题。&a.pf.name;关于 packet filter 防火墙系统的问题和讨论关于 FreeBSD 环境下 packet filter (pf) 防火墙系统的讨论。
这里欢迎技术讨论, 以及一般的应用问题。 此外,
这里也是讨论 ALTQ QoS 框架的合适场所。&a.platforms.name;移植到非 &intel; 平台上跨平台的 FreeBSD 问题,
关于非 &intel; FreeBSD 移植版本的讨论和提议。
这是一个纯技术性的邮件列表,
其讨论内容严格限制为技术。&a.policy.name;核心团队策略的决定这是一个很小的只读的有关核心团队策略决定的邮件列表。&a.ports.name;ports的讨论关于FreeBSD的ports collection (/usr/ports)的讨论,
ports的基础构造和调整过的ports结构。这是一个纯技术的邮件列表。&a.ports-bugs.name;ports bugs的讨论讨论关于FreeBSD的ports collection (/usr/ports),问题报告
ports建议,或者ports的修正。这是一个纯技术的邮件列表。&a.proliant.name;关于 FreeBSD 在 HP
ProLiant 服务器平台上的技术讨论这个邮件列表用来讨论在 HP ProLiant 服务器上使用 FreeBSD,
包括讨论 ProLiant 专用的驱动、 管理软件、
配置工具, 以及 BIOS 更新等。 同样地,
这里也是讨论 hpasmd、 hpasmcli,
以及 hpacucli 模块的主要场所。&a.python.name;FreeBSD 上的 Python这是一个讨论关于如何在 FreeBSD 上改善 Python 支持的邮件列表。
这是一个纯技术的邮件列表。 它是为那些移植 Python、 其第三方模块,
以及 Zope 相关软件到 FreeBSD 上的人准备的。
这里也欢迎参与技术讨论的人。&a.questions.name;用户问题这是一个有关FreeBSD问题的邮件列表。您不应当发送how to
问题给技术列表,除非您认为这个问题是非常可爱的技术问题。&a.ruby.name;有关 FreeBSD 上 Ruby
的讨论这是一个讨论关于 Ruby 在 FreeBSD 上支持的邮件列表。
这是一个纯技术的邮件列表。它是为那些移植 Ruby、第三方库以及
各种 framework 准备的。这里也欢迎参与技术讨论的人。&a.scsi.name;SCSI子系统这是一个讨论FreeBSD的SCSI子系统的邮件列表。这是一个纯技术的列表。&a.security.name;安全问题FreeBSD的计算机安全问题(DES,Kerberos,已知的安全漏洞和修复等)。
这是一个纯技术的邮件列表。注意:这不是一个问和答的列表,但是同时给出
问题和答案到FAQ是欢迎的。&a.security-notifications.name;安全通知FreeBSD安全问题和修复的通知。这不是一个讨论列表,讨论的列表应当是FreeBSD-security&a.small.name;在嵌入式应用程序中使用FreeBSD这个列表讨论了与极小的和嵌入的FreeBSD安装的讨论主题。
这是一个纯技术的列表。这一列表已被 &a.embedded.name; 代替。&a.stable.name;讨论关于&os.stable;版的使用这是一个&os.stable;用户的邮件列表。它包括-STABLE的新特性可能会影响用户的警告。
任何运行STABLE的人应当经常关注这个列表。这是一个纯技术的列表。&a.standards.name;C99 & POSIX一致这是关于FreeBSD顺应C99和POSIX标准的技术讨论论坛。&a.usb.name;讨论 &os; 的
USB 支持这个邮件列表是关于 &os; 上的 USB 支持的技术性讨论。&a.usergroups.name;用户组调整列表这个邮件列表为协调从各地的使用群体到彼此相互讨论问题和
从核心团队中指定个人。这个邮件列表应被限制到大纲和协调用户组
计划的范围之内。&a.vendors.name;商家讨论FreeBSD计划和FreeBSD软硬件商家的协调。&a.virtualization.name;讨论各种 &os;
支持的虚拟化技术讨论 &os; 所支持的各种虚拟化技术的邮件列表。
在注重实现基本功能,加入新特性的同时,
也为用户提供了一个寻求帮助和讨论他们的使用经验的场所。&a.wip-status.name;&os; 项目进度状态这个邮件列表是用来发布 &os; 相关项目的创建和工作进度的。
发至这个列表的消息将会先被审核。通常建议把消息用 "To:"
发给一个更典型的 &os; 列表,而只仅仅 "BCC:" 给这个列表。
这样你的工作进度就能在典型的列表上讨论,
因为这个列表是不允许讨论问题的。查看一下归档中合适的消息作为例子。可能每隔几个月,
会从这个列表中的消息中提取出一个评论性的消息摘要发到
&os; 网站做为状态报告的一部分
。
你也能从那里找到更多的例子和以往的报告。&a.xen.name;讨论 &os; 有关 &xen; 上的移植
— 实现和使用这个邮件列表集中讨论 &os; 的 &xen; 移植。
预期的流量会很小,所以这个列表旨在同时为
设计与实现细节的技术讨论和管理部属问题
提供一个讨论的场所。过滤邮件列表&os;邮件列表是使用了多种过滤方法去消除垃圾邮件、病毒和其他没用的电子邮件。
这部分所描述的并不包括所有常用的保护邮件列表的消除方法。邮件列表只包含一些允许的附件类型。所有在列表中有MIME类型的附件的电子邮件在
邮件列表中被转发之前将被过滤掉。application/octet-streamapplication/pdfapplication/pgp-signatureapplication/x-pkcs7-signaturemessage/rfc822multipart/alternativemultipart/relatedmultipart/signedtext/htmltext/plaintext/x-difftext/x-patch一些邮件列表可以允许附件为其他MIME类型,但是以上列出的
应该被多数的邮件列表所采用。如果一个电子邮件包含HTML和纯文本形式,HTML的形式将被删除。
如果一个电子邮件内容只是HTML形式,他将被转换为纯文本格式。Usenet新闻组除了FreeBSD两个特殊的新闻组,还有很多讨论FreeBSD或与FreeBSD用户相关的其他讨论组。
一些新闻组的关键词搜索档案是可以使用的,
有什么问题可以与Warren Toomey wkt@cs.adfa.edu.au联系。BSD特殊的新闻组comp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscde.comp.os.unix.bsd (德语)fr.comp.os.bsd (法语)it.comp.os.freebsd (意大利语)tw.bbs.comp.386bsd (繁体中文)Internet上其他的&unix;新闻组comp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.user-friendlycomp.security.unixcomp.sources.unixcomp.unix.advocacycomp.unix.misccomp.bugs.4bsdcomp.bugs.4bsd.ucb-fixescomp.unix.bsdX Window系统comp.windows.x.i386unixcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.windows.x.intrinsicscomp.windows.x.motifcomp.windows.x.pexcomp.emulators.ms-windows.wineWorld Wide Web服务器
- &chap.eresources.www.inc;
+
+ 论坛, 部落格, 社会性网络
+
+
+ The
+ FreeBSD Forums 提供了一个基于 web 的论坛用以讨论
+ FreeBSD 相关问题与技术。
+
+ Planet FreeBSD
+ 提供了众多由 FreeBSD 开发者部落格摘要的集合。
+ 很多的开发者都在上面发表有关他们工作简要的笔记,
+ 新的补丁和工作进度。
+
+ The BSDConferences
+ YouTube Channel 提供了一组世界各地 BSD
+ 峰会的高质量视频。 这个是一个不错的观看重要开发者展示最新
+ FreeBSD 有关成果的方法。
+
+
+
+
+ Official Mirrors
+ &chap.eresources.www.inc;
+ Email地址下面的用户组提供了与FreeBSD相关的邮件地址。如果他被滥用的话,
这个列表的管理员有收回的权利。域工具用户组管理员ukug.uk.FreeBSD.orgForwarding onlyukfreebsd@uk.FreeBSD.orgLee Johnston
lee@uk.FreeBSD.org
diff --git a/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml b/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml
index 6efe9249af..e5b31d2596 100644
--- a/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/filesystems/chapter.sgml
@@ -1,572 +1,572 @@
TomRhodesWritten by 文件系统 Support概述File SystemsFile Systems SupportFile Systems文件系统对于任何操作系统来说都是一个不可缺的部分。
它们允许用户上载和存储文件,提供对数据的访问,当然,
是使硬盘能具有实际的用途。不同的操作系统通常都有一个共同的主要方面,
那就是它们原生的文件系统。在 &os;
上这个文件系统通常被称为快速文件系统或者 FFS,
这是基于原来的 Unix™ 文件系统,通常也被称为
UFS。 这是 &os;
用于在磁盘上访问数据的原生的文件系统。&os; 也支持数量繁多的不同的文件系统,
用于提供本地从其他操作系统上访问数据的支持,
那些就是指存放在本地挂载的 USB
存储设备,闪存设备和硬盘上的数据。还支持一些非原生的文件系统。
这些文件系统是在其他的操作系统上开发的,像 &linux;
的扩展文件系统 (EXT),和 &sun;
的 Z 文件系统 (ZFS)。&os; 上对于各种文件系统的支持分成不同的层次。
一些要求加载内核模块,另外的可能要求安装一系列的工具。
这一章节旨在帮助 &os; 用户在他们的系统上访问其他的文件系统,
由 &sun; 的 Z 文件系统开始。在阅读了这一章节之后,你将了解:原生与被支持的文件系统之间的区别。&os; 支持哪些文件系统。如何起用,配置,访问和使用非原生的文件系统。在阅读这章以前,你应该:了解 &unix; 和 &os; 基本知识
()。熟悉基本的内核配置/编译方法
()。熟悉在 &os; 上安装第三方软件
()。熟悉 &os; 上的磁盘,存储和设备名
()。ZFS 特性目前仍被认为是试验性的。
有些选项功能性缺失,另有一些可能还无法运行。最终,
这个特性会适合用于生产,届时这篇文档也会做些适当的修改。Z 文件系统Z 文件系统是由 &sun; 开发使用存储池方法的新技术。
这就是说只有在需要存储数据的时候空间才会被使用。
它也为保护数据最大完整性而设计的,支持数据快照,
多份拷贝和数据校验。增加了被称为 RAID-Z
的新的数据复制类型。RAID-Z 是种类似于
RAID5类型, 但被设计成防止写入漏洞。调整 ZFSZFS 子系统需利用到大量的系统资源,
所以可能需要一些调校来为日常应用提供最大化的效能。
作为 &os; 的一项试验性的特性,这可能在不久的将来有所变化;
无论如何,下面的这些步骤是我们推荐的:内存总共的系统内存至少应有 1GB,推荐 2GB 或者更多。
在此处所有的例子中,我们使用了 1GB
内存的系统并配合了一些恰当的调校。有些人在少于 1GB 内存的环境有幸正常使用,
但是在这样有限的物理内存的条件下,当系统的负载很高时,
&os; 极有可能因于内存耗尽而崩溃。内核配置我们建议把未使用的驱动和选项从内核配置文件中去除。
既然大部份的驱动都有以模块的形式存在,它们就可以很容易的通过
/boot/loader.conf 加载。i386 构架的用户应在内核配置文件中加入以下的选项,
重新编译内核并重启机器:options KVA_PAGES=512这个选项将扩展内核的地址空间, 因而允许
vm.kvm_size 能够超越 1 GB
的限制(PAE为 2 GB)。
为了找出这个选项最合适的值,
把以兆(MB)为单位所需的地址空间除以 4 得到。
在这个例子中,512 则为 2 GB。Loader 可调参数所有构架上 &os; 都应该加大 kmem
地址空间。在有 1GB 物理内存的测试系统上,在
/boot/loader.conf
中加入如下的参数并且重启后通过了测试。
- vm.kmem_slze="330M"
+ vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"更多 ZFS 相关推荐调校的细节请参阅
.使用 ZFS&os; 有一种启动机制能在系统初始化时挂在
ZFS 存储池。
可以通过以下的命令设置:&prompt.root; echo 'zfs_enable="YES"' >> /etc/rc.conf
&prompt.root; /etc/rc.d/zfs start这份文档剩余的部分假定系统中有2块
SCSI 磁盘可用,
它们的设备名分别为
da0
和 da1。
IDE 硬件的用户可以使用
ad
代替 SCSI。单个磁盘存储池在单个磁盘上创建 ZFS,
使用 zpool 命令:&prompt.root; zpool create example /dev/da0可以通过 df
的输出查看新的存储池:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235230 1628718 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032846 48737598 2% /usr
example 17547136 0 17547136 0% /example这份输出清楚的表明了 example
存储池不仅创建成功而且被 挂载 了。
我们能像访问普通的文件系统那样访问它,
就像以下例子中演示的那样,用户能够在上面创建文件并浏览:&prompt.root cd /example
&prompt.root; ls
&prompt.root; touch testfile
&prompt.root; ls -al
total 4
drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .
drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..
-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile遗憾的是这个存储池并没有利用到
ZFS 的任何特性。
在这个存储池上创建一个文件系统,并启用压缩:&prompt.root; zfs create example/compressed
&prompt.root; zfs set compression=gzip example/compressed现在 example/compressed
是一个启用了压缩的 ZFS 文件系统了。
可以尝试复制一些大的文件到
/example/compressed。使用这个命令可以禁用压缩:&prompt.root; zfs set compression=off example/compressed使用如下的命令卸载这个文件系统,并用
df 工具确认:&prompt.root; zfs umount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235232 1628716 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example重新挂在这个文件系统使之能被访问,
并用 df 确认:&prompt.root; zfs mount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressed存储池与文件系统也可通过 mount
的输出查看:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
example on /example (zfs, local)
example/data on /example/data (zfs, local)
example/compressed on /example/compressed (zfs, local)正如前面所提到的,ZFS 文件系统,
在创建之后就能像普通的文件系统那样使用。然而,
还有很多其他的特性是可用的。在下面的例子中,
我们将创建一个新的文件系统,data。
并要在上面存储些重要的文件,
所以文件系统需要被设置成把每一个数据块都保存两份拷贝:&prompt.root; zfs create example/data
&prompt.root; zfs set copies=2 example/data现在可以再次使用 df
查看数据和空间的使用状况:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressed
example/data 17547008 0 17547008 0% /example/data请注意存储池上的每一个文件系统都有着相同数量的可用空间。
这就是我们在这些例子中使用 df 的原因,
是为了文件系统都是从相同的存储池取得它们所需的空间。
ZFS 去掉了诸如卷和分区此类的概念,
并允许多个文件系统占用同一个存储池。
不再需要文件系统与存储池的时候能像这样销毁它们:&prompt.root; zfs destroy example/compressed
&prompt.root; zfs destroy example/data
&prompt.root; zpool destroy example磁盘无法避免的会坏掉和停止运转。
当这块磁盘坏掉的时候,上面的数据都将丢失。
一个避免因磁盘损坏而丢失数据的方法是使用
RAID。ZFS
在它的存储池设计中支持这样的特性,
这便是下一节将探讨的。ZFS RAID-Z正如前文中所提到的,这一章节将假设存在两个
SCSI 设备,
da0 和
da1。
使用如下的命令创建一个 RAID-Z
存储池:&prompt.root; zpool create storage raidz da0 da1zpool storage 至此就创建好了。
可以如前文提到的那样使用 &man.mount.8; 和 &man.df.1; 确认。
如需配给更多的磁盘设备则把它们加这个列表的后面。
在存储池上创建一个叫 home 的文件系统,
用户的文件最终都将被保存在上面:&prompt.root; zfs create storage/home像前文中提到的那样,用户的目录与文件也可启用压缩并保存多份拷贝,
可通过如下的命令完成:&prompt.root; zfs set copies=2 storage/home
&prompt.root; zfs set compression=gzip storage/home把用户的数据都拷贝过来并创建一个符号链接,
让他们开始使用这个新的目录:&prompt.root; cp -rp /home/* /storage/home
&prompt.root; rm -rf /home /usr/home
&prompt.root; ln -s /storage/home /home
&prompt.root; ln -s /storage/home /usr/home现在用户的数据应该都保存在新创建的
/storage/home
上了。 测试添加一个新用户并以这个身份登录。尝试创建一个可日后用来回退的快照:&prompt.root; zfs snapshot storage/home@08-30-08请注意快照选项将只会抓取一个真实的文件系统,
而不是某个用户目录或文件。@
字符为文件系统名或卷名的分隔符。
当用户目录被损坏时,可用如下命令恢复:&prompt.root; zfs rollback storage/home@08-30-08获得所有可用快照的列表,可使用
ls 命令查看文件系统的
.zfs/snapshot
目录。例如,执行如下命令来查看之前抓取的快照:&prompt.root; ls /storage/home/.zfs/snapshot可以编写一个脚本来每月定期抓取用户数据的快照,久而久之,
快照可能消耗掉大量的磁盘空间。
之前创建的快照可用以下命令删除:&prompt.root; zfs destroy storage/home@08-30-08在所有这些测试之后,我们没有理由再把
/store/home
这样放置了。让它称为真正的
/home
文件系统:&prompt.root; zfs set mountpoint=/home storage/home使用 df 和
mount
命令将显示现在系统把我们的文件系统真正当作了
/home:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
storage on /storage (zfs, local)
storage/home on /home (zfs, local)
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235240 1628708 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032826 48737618 2% /usr
storage 17547008 0 17547008 0% /storage
storage/home 17547008 0 17547008 0% /home这样就基本完成了 RAID-Z
的配置了。使用夜间 &man.periodic.8;
获取有关文件系统创建之类的状态更新,
执行如下的命令:&prompt.root; echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf修复 RAID-Z每一种软 RAID
都有监测它们 状态 的方法。
ZFS 也不例外。
可以使用如下的命令查看 RAID-Z
设备:&prompt.root; zpool status -x如果所有的存储池处于健康状态并且一切正常的话,
将返回如下信息:all pools are healthy如果存在问题,可能是一个磁盘设备下线了,
那么返回的存储池的状态将看上去是类似这个样子的: pool: storage
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
storage DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
da0 ONLINE 0 0 0
da1 OFFLINE 0 0 0
errors: No known data errors在这个例子中,这是由管理员把此设备下线后的状态。
可以使用如下的命令将磁盘下线:&prompt.root; zpool offline storage da1现在切断系统电源之后就可以替换下
da1 了。
当系统再次上线时,使用如下的命令替换磁盘:&prompt.root; zpool replace storage da1至此可用不带
标志的命令再次检查状态:&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
errors: No known data errors在这个例子中,一切都显示正常。数据校验正如前面所提到的,ZFS
使用 校验和(checksum) 来检查存储数据的完整性。
这时在文件系统创建时自动启用的,可使用以下的命令禁用:&prompt.root; zfs set checksum=off storage/home这不是个明智的选择,因为校验和
不仅非常有用而且只需占用少量的存储空间。
并且启用它们也不会明显的消耗过多资源。
启用后就可以让 ZFS
使用校验和校验来检查数据的完整。
这个过程通常称为 scrubbing。
可以使用以下的命令检查 storage
存储池里数据的完整性:&prompt.root; zpool scrub storage这个过程需花费相当长的时间,取决于存储的数据量。
而且 I/O 非常密集,
所以在任何时间只能执行一个这样的操作。
在 scrub 完成之后,状态就会被更新,
可使用如下的命令查看:&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
errors: No known data errors这个例子中完成时间非常的清楚。
这个特性可以帮助你在很长的一段时间内确保数据的完整。Z 文件系统有更多的选项,请参阅
&man.zfs.8; 和 &man.zpool.8; 手册页。
diff --git a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
index f10bbdb67d..26656b85ce 100644
--- a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
@@ -1,3078 +1,3067 @@
Joseph J.BarbishContributed by BradDavisConverted to SGML and updated by 防火墙防火墙安全防火墙入门防火墙的存在, 使得过滤出入系统的数据流成为可能。
防火墙可以使用一组或多组 规则 (rules),
来检查出入您的网络连接的数据包, 并决定允许或阻止它们通过。
这些规则通常可以检查数据包的某个或某些特征,
这些特征包括, 但不必限于协议类型、 来源或目的主机地址,
以及来源或目的端口。防火墙可以大幅度地改善主机或网络的安全。
它可以用来完成下面的任务:保护和隔离应用程序、 服务程序, 以及您内部网络上的机器,
不受那些来自公共的 Internet 网络上您所不希望的数据流量的干扰。限制或禁止从内部网访问公共的 Internet 上的服务。支持网络地址转换
(NAT),
它使得您的内部网络能够使用私有的 IP 地址,
并分享一条通往公共的 Internet 的连接 (使用一个
IP 地址, 或者一组公网地址)。读完这章, 您将了解:如何正确地定义包过滤规则。&os; 中内建的集中防火墙之间的差异。如何使用和配置 OpenBSD 的
PF 防火墙。如何使用和配置
IPFILTER。如何使用和配置
IPFW。阅读这章之前, 您需要:理解基本的 &os; 和 Internet 概念。防火墙的概念防火墙/primary>
规则集建立防火墙规则集的基本方法有两种:
包容式的 或 排斥式的。
排斥式的防火墙, 允许除了禁止的那些数据之外的所有网络流量通过。
包容式的防火墙正好相反。 后者只允许符合规则的流量通过,
而其他所有的流量都被阻止。包容式防火墙一般说来要比排斥式防火墙安全,
因为他们显著地降低了由于允许不希望的网络流量通过所带来的风险。如果使用了 带状态功能的防火墙 (stateful
firewall), 则安全机制可以进一步地细化。
带状态功能的防火墙能够记录通过防火墙的连接,
进而只允许与现有连接匹配的连接, 或创建新的连接。
带状态功能的防火墙的缺点, 则是在很短时间内有大量的连接请求时,
它们可能会受到拒绝服务
(DoS) 攻击。
绝大多数防火墙都提供了同时启用两种防火墙的能力,
以便为站点提供更好的保护。防火墙软件包&os; 的基本系统内建了三种不同的防火墙软件包。
它们是 IPFILTER
(也被称作 IPF)、
IPFIREWALL (也被称作 IPFW),
以及 OpenBSD 的 PacketFilter (也被称为
PF)。 &os; 也提供了两个内建的、
用于流量整形 (基本上是控制带宽占用) 的软件包:
&man.altq.4; 和 &man.dummynet.4;。 Dummynet 在过去一直和
IPFW 紧密集成, 而
ALTQ 则需要配合
PF 使用。 IPFILTER
对于流量整形可以使用 IPFILTER 的 NAT
和过滤功能以及 IPFW 的 &man.dummynet.4; 配合,
或者 使用 PF 跟
ALTQ 的组合。
IPFW, 以及 PF 都是用规则来控制是否允许数据包出入您的系统,
虽然它们采取了不同的实现方法和规则语法。&os; 包含多个内建的防火墙软件包的原因在于,
不同的人会有不同的需求和偏好。 任何一个防火墙软件包都很难说是最好的。作者倾向于使用 IPFILTER, 因为它提供的状态式规则,
在 NAT 的环境中要简单许多,
而且它内建了 ftp 代理, 这简化了使用外部 FTP 服务时所需的配置。由于所有的防火墙都基于检查所选定的包控制字段来实现功能,
撰写防火墙规则集时, 就必须了解
TCP/IP 是如何工作的,
以及包的控制字段在正常会话交互中的作用。
您可以在这个网站找到一份很好的解释文档:
.JohnFerrellRevised and updated by OpenBSD Packet Filter (PF) 和
ALTQ防火墙PF2003 年 7 月, OpenBSD 的防火墙,
也就是常说的 PF 被成功地移植到了 &os; 上,
并可以通过 &os; Ports Collection 来安装了;
第一个将 PF 集成到基本系统中的版本是
2004 年 11 月发行的 &os; 5.3。
PF 是一个完整的提供了大量功能的防火墙软件,
并提供了可选的 ALTQ (交错队列, Alternate
Queuing) 功能。 ALTQ 提供了服务品质
(QoS) 带宽整形功能。OpenBSD 项目非常杰出的维护着一份
PF FAQ。
就其本身而言,这一节注重于 &os; 的 PF
和提供一些关于使用方面的一般常识。更详细的使用信息请参阅
PF FAQ。更多的详细信息, 可以在 &os; 版本的
PF 网站上找到: 。使用 PF 可装载的内核模块从 &os; 5.3;开始,PF
作为一个单独的运行时可装载的模块被收录进基本的安装系统。
在 &man.rc.conf.5; 加入如下的语句能让系统能够动态装载 PF
内核模块,pf_enable="YES"。
然而如果系统无法找到一份 PF
防火墙规则的配置文件,PF 模块则不会被加载。
配置文件默认的位置在 /etc/pf.conf。
如果你的 PF 规则存放在其他的位置,
那么就需要在 /etc/rc.conf
配置文件中加入以下语句
pf_rules="/path/pf.rules"
来指定一份。从 &os; 7.0 开始,作为例子的存放在
/etc/ 的
pf.conf 被移动到了/usr/share/examples/pf/。
&os; 7.0 以前的版本,默认仍有一份
/etc/pf.conf。PF 模块也能从命令行手工加载:&prompt.root; kldload pf.ko可装载的摸块默认由 &man.pflog.4; 提供日志记录。
如果你需要 PF 其他的特性,
你可能需要把 PF 编译进内核。PF 内核选项内核选项device pf内核选项device pflog内核选项device pfsync虽然你不必亲自把对 PF 的支持编译进 &os;
内核,但是有时你仍然需要这么做来使用到 PF
的某些没有被收录进可装载模块的高级特性,比如 &man.pfsync.4;
伪设备用来发送某些改变到PF 状态表。
它能配合 &man.carp.4; 使用 PF 建立支持故障转移的防火墙。
更多有关 CARP 的详细信息可以参阅
第 29 章。The PF kernel options can be found in
/usr/src/sys/conf/NOTES and are reproduced
below:有关 PF 的内核选项可以在
/usr/src/sys/conf/NOTES 中找到,
以下也略有阐述:device pf
device pflog
device pfsyncdevice pf 选项用于启用
Packet Filter 防火墙的支持
(&man.pf.4;)。device pflog 启用可选的
&man.pflog.4; 伪网络设备, 用以通过 &man.bpf.4;
描述符来记录流量。 &man.pflogd.8; 服务可以用来存储信息,
并把它们以日志形式记录到磁盘上。device pfsync 选项启用可选的
&man.pfsync.4; 支持,这是用于监视 状态变更
的伪网络设备。可用的 rc.conf 选项The following &man.rc.conf.5; statements configure
PF and &man.pflog.4; at boot:以下 &man.rc.conf.5; 中的语句用于启动时配置
PF 和 &man.pflog.4;pf_enable="YES" # 启用 PF (如果需要的话, 自动加载内核模块)
pf_rules="/etc/pf.conf" # pf 使用的规则定义文件
pf_flags="" # 启动时传递给 pfctl 的其他选项
pflog_enable="YES" # 启动 pflogd(8)
pflog_logfile="/var/log/pflog" # pflogd 用于记录日志的文件名
pflog_flags="" # 启动时传递给 pflogd 的其他选项如果您的防火墙后面有一个 LAN,
而且需要通过它来转发 LAN 上的包, 或进行 NAT,
还需要同时启用下述选项:gateway_enable="YES" # 启用为 LAN 网关建立过滤规则PF 会从 &man.pf.conf.5;
(默认为 /etc/pf.conf)
文件中读取配置规则, 并根据那里的规则修改、丢弃或让数据包通过。
默认安装的 &os; 已经提供了一些简单的例子放在
/usr/share/examples/pf/ 目录下。
请参阅 PF FAQ
获取完整的 PF 规则信息。在浏览 PF FAQ 时,
请时刻注意不同版本的 &os; 使用了不同版本的 PF:&os; 5.X —
PF 相当于 OpenBSD 3.5&os; 6.X —
PF 相当于 OpenBSD 3.7&os; 7.X —
PF 相当于 OpenBSD 4.1&a.pf; 是一个提有关配置使用 PF
防火墙问题的好地方。请在提问之前查阅邮件列表的归档!使用 PF使用 &man.pfctl.8; 可以控制 PF。
以下是一些实用的命令
(请查阅 &man.pfctl.8; 获得全部可用的选项):命令作用pfctl 启用 PFpfctl 禁用 PFpfctl all /etc/pf.conf清楚所有规则 (nat, filter, state, table, 等等。)
并读取 /etc/pf.confpfctl [ rules | nat | state ]列出 filter 规则, nat 规则,
或状态表pfctl /etc/pf.conf检查 /etc/pf.conf
中的错误,但不装载相关的规则启用 ALTQALTQ 只有在作为编译选项加入到 &os;
内核时才能使用。ALTQ
目前还不是所有的可用网卡驱动都能够支持的。
请参见 &man.altq.4; 联机手册了解您正使用的 &os;
版本中的驱动支持情况。下面这些选项将启用 ALTQ
以及一些附加的功能:options ALTQ
options ALTQ_CBQ # 基于分类的排列 (CBQ)
options ALTQ_RED # 随机先期检测 (RED)
options ALTQ_RIO # 对进入和发出的包进行 RED
options ALTQ_HFSC # 带等级的包调度器 (HFSC)
options ALTQ_PRIQ # 按优先级的排列 (PRIQ)
options ALTQ_NOPCC # 在联编 SMP 内核时必须使用,禁止读时钟options ALTQ 将启用
ALTQ 框架的支持。options ALTQ_CBQ
用于启用基于分类的队列 (CBQ) 支持。 CBQ
允许您将连接分成不同的类别, 或者说, 队列,
以便在规则中为它们指定不同的优先级。options ALTQ_RED
将启用随机预检测 (RED)。
RED 是一种用于防止网络拥塞的技术。
RED 度量队列的长度,
并将其与队列的最大和最小长度阈值进行比较。
如果队列过长, 则新的包将被丢弃。
如名所示, RED 从不同的连接中随机地丢弃数据包。options ALTQ_RIO 将启用出入的随机预检测。options ALTQ_HFSC
启用层次式公平服务平滑包调度器。
要了解关于 HFSC 进一步的信息, 请参见 。options ALTQ_PRIQ 启用优先队列
(PRIQ)。 PRIQ
首先允许高优先级队列中的包通过。options ALTQ_NOPCC 启用
ALTQ 的
SMP 支持。
如果是 SMP 系统,
则必须使用它。IPFILTER (IPF) 防火墙防火墙IPFILTER这一节的内容正在撰写中。 其内容可能不总是十分准确。IPFILTER 的作者是 Darren Reed。 IPFILTER 是独立于操作系统的:
它是一个开放源代码的应用, 并且已经被移植到了 &os;、 NetBSD、
OpenBSD、 SunOS、 HP/UX, 以及 Solaris 操作系统上。
IPFILTER 的支持和维护都相当活跃, 并且有规律地发布更新版本。IPFILTER 提供了内核模式的防火墙和
NAT 机制,
这些机制可以通过用户模式运行的接口程序进行监视和控制。
防火墙规则可以使用 &man.ipf.8; 工具来动态地设置和删除。
NAT 规则可以通过
&man.ipnat.1; 工具来维护。 &man.ipfstat.8; 工具则可以用来显示
IPFILTER 内核部分的统计数据。 最后, 使用
&man.ipmon.8; 程序可以把 IPFILTER 的动作记录到系统日志文件中。IPF 最初是使用一组
以最后匹配的规则为准 的策略来实现的,
这种方式只能支持无状态的规则。 随着时代的进步,
IPF 被逐渐增强, 并加入了 quick 选项,
以及支持状态的 keep
state 选项, 这使得规则处理逻辑变得更富有现代气息。
IPF 的官方文档介绍了传统的规则编写方法和文件处理逻辑。
新增的功能只是作为一些附加的选项出现, 如果能完全理解这些功能,
则对于建立更安全的防火墙就很有好处。这一节中主要是针对 quick 选项,
以及支持状态的 keep state 选项的介绍。
这是包容式防火墙规则集最基本的编写要素。包容式防火墙只允许与规则匹配的包通过。 这样,
您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务,
同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。
所有其它的访问请求都会被阻止, 并记录下来。
包容式防火墙一般而言要远比排斥式的要安全,
而且也只需要定义允许哪些访问通过。要获得关于传统规则处理方式的详细信息,
请参考:
以及 。IPF FAQ 可以在 找到。除此之外, 您还可以在
找到开放源代码的 IPFilter 的邮件列表存档, 并进行搜索。启用 IPFIPFILTER启用IPF 作为 &os; 基本安装的一部分,
以一个独立的内核模块的形式提供。
如果在 rc.conf 中配置了
ipfilter_enable="YES",
系统就会自动地动态加载 IPF 内核模块。
这个内核模块在创建时启用了日志支持, 并加入了 default
pass all 选项。 如果只是需要把默认的规则设置为
block all 的话, 并不需要把 IPF
编译到内核中。 可以简单地通过把这条规则加入自己的规则集来达到同样的目的。内核选项内核选项IPFILTER内核选项IPFILTER_LOG内核选项IPFILTER_DEFAULT_BLOCKIPFILTER内核选项下面这些 &os; 内核编译选项并不是启用 IPF 所必需的。
这里只是作为背景知识来加以阐述。 如果将 IPF
编入了内核, 则对应的内核模块将不被使用。关于 IPF 选项语句的内核编译配置的例子, 可以在内核源代码中的
/usr/src/sys/conf/NOTES 找到。
此处列举如下:options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCKoptions IPFILTER 用于启用
IPFILTER 防火墙的支持。options IPFILTER_LOG 用于启用 IPF 的日志支持,
所有匹配了包含 log 的规则的包,
都会被记录到 ipl 这个包记录伪—设备中。options IPFILTER_DEFAULT_BLOCK
将改变防火墙的默认动作, 进而, 所有不匹配防火墙的 pass
规则的包都会被阻止。这些选项只有在您重新编译并安装内核之后才会生效。可用的 rc.conf 选项要在启动时激活 IPF, 您需要在 /etc/rc.conf
中增加下面的设置:ipfilter_enable="YES" # 启动 ipf 防火墙
ipfilter_rules="/etc/ipf.rules" # 将被加载的规则定义, 这是一个文本文件
ipmon_enable="YES" # 启动 IP 监视日志
ipmon_flags="-Ds" # D = 作为服务程序启动
# s = 使用 syslog 记录
# v = 记录 tcp 窗口大小、 ack 和顺序号(seq)
# n = 将 IP 和端口映射为名字如果您的 LAN 在防火墙后面, 并且使用了保留的私有 IP 地址范围,
那就需要增加下面的一些选项来启用 NAT 功能:gateway_enable="YES" # 启用作为 LAN 网关的功能
ipnat_enable="YES" # 启动 ipnat 功能
ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件IPFipfipf 命令可以用来加载您自己的规则文件。 一般情况下,
您可以建立一个包括您自定义的规则的文件,
并使用这个命令来替换掉正在运行的防火墙中的内部规则:&prompt.root; ipf -Fa -f /etc/ipf.rules 表示清除所有的内部规则表。 用于指定将要被读取的规则定义文件。这个功能使得您能够修改自定义的规则文件, 通过运行上面的 IPF 命令,
可以将正在运行的防火墙刷新为使用全新的规则集, 而不需要重新启动系统。
这对于测试新的规则来说就很方便, 因为您可以任意执行上面的命令。请参考 &man.ipf.8; 联机手册以了解这个命令提供的其它选项。&man.ipf.8; 命令假定规则文件是一个标准的文本文件。
它不能处理使用符号代换的脚本。也确实有办法利用脚本的非常强大的符号替换能力来构建 IPF 规则。
要了解进一步的细节, 请参考
。IPFSTATipfstatIPFILTER统计默认情况下, &man.ipfstat.8; 会获取并显示所有的累积统计,
这些统计是防火墙启动以来用户定义的规则匹配的出入流量,
您可以通过使用
ipf -Z 命令来将这些计数器清零。请参见 &man.ipfstat.8; 联机手册以了解进一步的细节。默认的 &man.ipfstat.8; 命令输出类似于下面的样子:input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
input packets logged: blocked 99286 passed 0
output packets logged: blocked 0 passed 0
packets logged: input 0 output 0
log failures: input 3898 output 0
fragment state(in): kept 0 lost 0
fragment state(out): kept 0 lost 0
packet state(in): kept 169364 lost 0
packet state(out): kept 431395 lost 0
ICMP replies: 0 TCP RSTs sent: 0
Result cache hits(in): 1215208 (out): 1098963
IN Pullups succeeded: 2 failed: 0
OUT Pullups succeeded: 0 failed: 0
Fastroute successes: 0 failures: 0
TCP cksum fails(in): 0 (out): 0
Packet log flags set: (0)如果使用了 (进入流量)
或者 (输出流量),
它就只获取并显示内核中所安装的对应过滤器规则的统计数据。ipfstat -in 以规则号的形式显示进入的内部规则表。ipfstat -on 以规则号的形式显示流出的内部规则表。输出和下面的类似:@1 pass out on xl0 from any to any
@2 block out on dc0 from any to any
@3 pass out quick on dc0 proto tcp/udp from any to any keep stateipfstat -ih 显示内部规则表中的进入流量,
每一个匹配规则前面会同时显示匹配的次数。ipfstat -oh 显示内部规则表中的流出流量,
每一个匹配规则前面会同时显示匹配的次数。输出和下面的类似:2451423 pass out on xl0 from any to any
354727 block out on dc0 from any to any
430918 pass out quick on dc0 proto tcp/udp from any to any keep stateipfstat 命令的一个重要的功能可以通过指定
参数来使用, 它会以类似 &man.top.1;
的显示 &os; 正运行的进程表的方式来显示统计数据。
当您的防火墙正在受到攻击的时候, 这个功能让您得以识别、
试验, 并查看攻击的数据包。 这个选项提还提供了实时选择希望监视的目的或源 IP、
端口或协议的能力。 请参见 &man.ipfstat.8; 联机手册以了解详细信息。IPMONipmonIPFILTER记录日志为了使 ipmon 能够正确工作,
必须打开 IPFILTER_LOG 这个内核选项。 这个命令提供了两种不同的使用模式。
内建模式是默认的模式, 如果您不指定
参数, 就会采用这种模式。服务模式是持续地通过系统日志来记录的工作模式, 这样,
您就可以通过查看日志来了解过去曾经发生过的事情。
这种模式是 &os; 和 IPFILTER 配合工作的模式。
由于在 &os; 中提供了一个内建的系统日志自动轮转功能,
因此, 使用 syslogd 比默认的将日志信息记录到一个普通文件要好。
在默认的 rc.conf 文件中, 您会看到一个
ipmon_flags 语句, 指定了 标志:ipmon_flags="-Ds" # D = 作为服务程序启动
# s = 使用 syslog 记录
# v = 记录 tcp 窗口大小、 ack 和顺序号(seq)
# n = 将 IP 和端口映射为名字记录日志的好处是很明显的。 它提供了在事后重新审查相关信息,
例如哪些包被丢弃, 以及这些包的来源地址等等。
这将为查找攻击者提供非常有用的第一手资料。即使启用了日志机制, IPF 仍然不会对其规则进行任何日志记录工作。
防火墙管理员可以决定规则集中的哪些应记录日志,
并在这些规则上加入 log 关键字。 一般来说, 只应记录拒绝性的规则。作为惯例, 通常会有一条默认的、拒绝所有网络流量的规则,
并指定 log 关键字, 作为您的规则集的最后一条。
这样, 您就能够看到所有没有匹配任何规则的数据包。IPMON 的日志Syslogd 使用特殊的方法对日志数据进行分类。
它使用称为 facility 和 level 的组。
以 模式运行的 IPMON 采用 security
作为 facility
名。 所有由 IPMON 记录的数据都会进入 security。
如果需要, 可以用下列 levels
来进一步区分数据:LOG_INFO - 使用 "log" 关键字指定的通过或阻止动作
LOG_NOTICE - 同时记录通过的那些数据包
LOG_WARNING - 同时记录阻止的数据包
LOG_ERR - 进一步记录含不完整的包头的数据包要设置 IPFILTER 来将所有的数据记录到
/var/log/ipfilter.log, 需要首先建立这个文件。
下面的命令可以完成这个工作:&prompt.root; touch /var/log/ipfilter.logsyslog 功能可以通过在 /etc/syslog.conf 文件中的语句来定义。
syslog.conf 提供了相当多的用以控制 syslog
如何处理类似 IPF 这样的用用程序所产生的系统消息的方法。您需要将下列语句加到
/etc/syslog.conf:security.* /var/log/ipfilter.log这里的 security.*
表示把所有的相关日志信息写到指定的文件中。要让 /etc/syslog.conf
中的修改立即生效, 您可以重新启动计算机, 或者通过执行
/etc/rc.d/syslogd reload
来让它重新读取 /etc/syslog.conf。不要忘了修改 /etc/newsyslog.conf
来让您刚创建的日志进行轮转。记录消息的格式由 ipmon 生成的消息由空格分隔的数据字段组成。
所有的消息都包含的字段是:接到数据包的日期。接到数据包的时间。 其格式为
HH:MM:SS.F, 分别是小时、 分钟、 秒,
以及分秒 (这个数字可能有许多位)。处理数据包的网络接口名字,
例如 dc0。组和规则的编号, 例如 @0:17。可以通过 ipfstat -in 来查看这些信息。动作: p 表示通过, b 表示阻止, S 表示包头不全,
n 表示没有匹配任何规则, L 表示 log 规则。
显示这些标志的顺序是: S, p, b, n, L。
大写的 P 或 B 表示记录包的原因是某个全局的日志配置,
而不是某个特定的规则。地址。 这实际上包括三部分:
源地址和端口 (以逗号分开), 一个 ->
符号, 以及目的地址和端口。
209.53.17.22,80 -> 198.73.220.17,1722.PR, 后跟协议名称或编号,
例如, PR tcp。len, 后跟包头的长度, 以及包的总长度,
例如 len 20 40。对于 TCP 包, 则还会包括一个附加的字段,
由一个连字号开始, 之后是表示所设置的标志的一个字母。
请参见 &man.ipmon.8; 联机手册, 以了解这些字母所对应的标志。对于 ICMP 包, 则在最后会有两个字段。
前一个总是 ICMP, 而后一个则是 ICMP
消息和子消息的类型, 中间以斜线分靠, 例如 ICMP 3/3
表示端口不可达消息。构建采用符号替换的规则脚本一些有经验的 IPF 会创建包含规则的文件,
并把它编写成能够与符号替换脚本兼容的方式。 这样做最大的好处是,
它能够让您只修改符号名字所代表的值,
而在脚本执行时直接替换掉所有的名符。
作为脚本, 您可以使用符号替换来把那些经常使用的值直接用于多个规则。
下面我们将给出一个例子。这个脚本所使用的语法与 sh、 csh,
以及 tcsh 脚本。符号替换的前缀字段是美元符号: $。符号字段不使用 $ 前缀。希望替换符号字段的值,
必须使用双引号 (") 括起来。您的规则文件的开头类似这样:############# IPF 规则脚本的开头 ########################
oif="dc0" # 外网接口的名字
odns="192.0.2.11" # ISP 的 DNS 服务器 IP 地址
myip="192.0.2.7" # 来自 ISP 的静态 IP 地址
ks="keep state"
fks="flags S keep state"
# 可以使用这个脚本来建立 /etc/ipf.rules 文件,
# 也可以 "直接地" 运行它。
#
# 请删除两个注释号之一。
#
# 1) 保留下面一行, 则创建 /etc/ipf.rules:
#cat > /etc/ipf.rules << EOF
#
# 2) 保留下面一行, 则 "直接地" 运行脚本:
/sbin/ipf -Fa -f - << EOF
# 允许发出到我的 ISP 的域名服务器的访问
pass out quick on $oif proto tcp from any to $odns port = 53 $fks
pass out quick on $oif proto udp from any to $odns port = 53 $ks
# 允许发出未加密的 www 访问请求
pass out quick on $oif proto tcp from $myip to any port = 80 $fks
# 允许发出使用 TLS SSL 加密的 https www 访问请求
pass out quick on $oif proto tcp from $myip to any port = 443 $fks
EOF
################## IPF 规则脚本的结束 ########################这就是所需的全部内容。 这个规则本身并不重要,
它们主要是用于体现如何使用符号代换字段,
以及如何完成值的替换。
如果上面的例子的名字是 /etc/ipf.rules.script,
就可以通过输入下面的命令来重新加载规则:&prompt.root; sh /etc/ipf.rules.script在规则文件中嵌入符号有一个问题: IPF 无法识别符号替换,
因此它不能直接地读取这样的脚本。这个脚本可以使用下面两种方法之一来使用:去掉 cat 之前的注释,
并注释掉
/sbin/ipf 开头的那一行。 像其他配置一样, 将
ipfilter_enable="YES" 放到
/etc/rc.conf 文件中,
并在此后立刻执行脚本, 以创建或更新
/etc/ipf.rules。通过把 ipfilter_enable="NO"
(这是默认值) 加到
/etc/rc.conf 中,
来禁止系统启动脚本开启 IPFILTER。在
/usr/local/etc/rc.d/
启动目录中增加一个类似下面的脚本。
应该给它起一个显而易见的名字, 例如
ipf.loadrules.sh。
请注意, .sh
扩展名是必需的。#!/bin/sh
sh /etc/ipf.rules.script脚本文件必须设置为属于 root,
并且属主可读、 可写、 可执行。&prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh这样, 在系统启动时, 就会自动加载您的 IPF
规则了。IPF 规则集规则集是指一组编写好的依据包的值决策允许通过或阻止 ipf 规则。
包的双向交换组成了一个会话交互。 防火墙规则集对同一个包会进行两次处理,
第一次是它从公网的 Internet 主机到达的时候, 第二次是它离开并返回初始的
Internet 公网主机的时候。 每一个 TCP/IP 服务 (例如 telnet, www,
邮件等等) 是由协议预先定义的源或目的 IP 地址, 以及源或目的端口。
这是最基本的一些可以为防火墙规则所利用的, 判别是否允许服务通过的标准。IPFILTER规则处理顺序IPF 最初被写成使用一组称作
以最后匹配的规则为准 的处理逻辑, 且只能处理无状态的规则。
随着时代的发展, IPF 进行了改进, 并提供了 quick
选项, 以及一个有状态的 keep state 选项。
后者使处理逻辑迅速地跟上了时代的步伐。这一节中提供的一些指导,
是基于使用包含 quick 选项和有状态的
keep state 选项来进行阐述的。
这些是编写包容式防火墙规则集的基本要素。包容式防火墙只允许与规则匹配的服务通过。 这样,
您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务,
同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。
所有其它的访问请求都会被阻止, 并记录下来。
包容式防火墙一般而言要远比排斥式的要安全,
而且也只需要定义允许哪些访问通过。当对防火墙规则进行操作时, 应该
谨慎行事。 某些配置可能会
将您反锁在 服务器外面。
安全起见, 您可以考虑在第一次进行防火墙配置时在本地控制台上,
而不是远程, 例如通过
ssh 来进行。规则语法IPFILTER规则语法这里给出的规则语法已经简化到只处理那些新式的带状态规则,
并且都是 第一个匹配的规则获胜 逻辑的。
要了解完整的传统规则语法描述, 请参见 &man.ipf.8; 联机手册。以 # 字符开头的内容会被认为是注释。
这些注释可以出现在一行规则的末尾, 或者独占一行。 空行会被忽略。规则由关键字组成。 这些关键字必须以一定的顺序,
从左到右出现在一行上。 接下来的文字中关键字将使用粗体表示。
某些关键字可能提供了子选项, 这些子选项本身可能也是关键字,
而且可能会提供更多的子选项。 下面的文字中,
每种语法都使用粗体的小节标题呈现, 并介绍了其上下文。ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO
SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG
STATEFULACTION = block | passIN-OUT = in | outOPTIONS = log | quick | on
网络接口的名字SELECTION = proto 协议名称 |
源/目的 IP | port = 端口号 | flags 标志值PROTO = tcp/udp | udp | tcp |
icmpSRC_ADD,DST_ADDR = all | from
对象 to 对象OBJECT = IP地址 | anyPORT_NUM = port 端口号TCP_FLAG = SSTATEFUL = keep stateACTION (动作)动作对表示匹配规则的包应采取什么动作。
每一个规则 必须 包含一个动作。
可以使用下面两种动作之一:block 表示如果规则与包匹配,
则丢弃包。pass 表示如果规则与包匹配,
则允许包通过防火墙。IN-OUT每个过滤器规则都必须明确地指定是流入还是流出的规则。
下一个关键字必须要么是 in, 要么是 out,
否则将无法通过语法检查。in 表示规则应被应用于刚刚从 Internet
公网上收到的数据包。out 表示规则应被应用于即将发出到
Internet 的数据包。OPTIONS这些选项必须按下面指定的顺序出现。log 表示包头应被写入到
ipl 日志 (如前面 LOGGING 小节所介绍的那样),
如果它与规则匹配的话。quick 表示如果给出的参数与包匹配,
则以这个规则为准, 这使得能够 "短路" 掉后面的规则。
这个选项对于使用新式的处理逻辑是必需的。on 表示将网络接口的名称作为筛选参数的一部分。
接口的名字会在 &man.ifconfig.8; 的输出中显示。 使用这个选项,
则规则只会应用到某一个网络接口上的出入数据包上。
要配置新式的处理逻辑, 必须使用这个选项。当记录包时, 包的头会被写入到 IPL 包日志伪设备中。
紧跟 log 关键字, 可以使用下面几个修饰符
(按照下列顺序):body 表示应同时记录包的前 128 字节的内容。first 如果 log 关键字和
keep state 选项同时使用,
则这个选项只在第一个包上触发, 这样就不用记录每一个
keep state 包信息了。SELECTION这一节所介绍的关键字可以用于所检察的包的属性。
有一个关键字主题, 以及一组子选项关键字,
您必须从他们中选择一个。 以下是一些通用的属性,
它们必须按下面的顺序使用:PROTOproto 是一个主题关键字,
它必须与某个相关的子选项关键字配合使用。
这个值的作用是匹配某个特定的协议。
要使用新式的规则处理逻辑, 就必须使用这个选项。tcp/udp | udp | tcp | icmp 或其他在
/etc/protocols 中定义的协议。
特殊的协议关键字 tcp/udp 可以用于匹配
TCP 或 UDP 包,
引入这个关键字的作用是是避免大量的重复规则的麻烦。SRC_ADDR/DST_ADDR使用 all 关键词, 基本上相当于 from
any to any 在没有配合其他关键字的情形。from src to dst: from 和 to
关键字主要是用来匹配 IP 地址。 所有的规则都必须同时给出源和目的两个参数。
any 是一个可以用于匹配任意 IP 地址的特殊关键字。
例如, 您可以使用 from any to any 或 from
0.0.0.0/0 to any 或 from any to 0.0.0.0/0 或 from
0.0.0.0 to any 以及 from any to 0.0.0.0。IP 地址可以按句点分隔的 IP 地址/掩码长度 的方式来指定,
也可以只指定一个句点分隔的 IP 地址。如果无法使用子网掩码来表示 IP 的话, 表达地址就会很麻烦。
请参见下面的网页了解如何撰写掩码长度:
。PORT如果为源或目的指定了匹配端口, 规则就只能应用于 TCP 和
UDP 包了。 当编写端口比较规则时,
可以指定 /etc/services 中所定义的名字,
也可以直接用端口号来指定。 如果端口号出现在源对象一侧,
则被认为是源端口号; 反之, 则被认为是目的端口号。
要使用新式的规则处理逻辑,
就必须与 to 对象配合使用这个选项。
使用的例子: from any to any port = 80。端口的比较是以数字的形式进行的, 可以使用比较算符来指定,
也可以指定一个范围。port "=" | "!=" | "<" | ">" | "<=" | ">=" |
"eq" | "ne" | "lt" | "gt" | "le" | "ge".要指定端口范围, 可以使用 "<>" | "><"。在源和目的匹配参数之后, 需要使用下面两个参数,
才能够使用新式的规则处理逻辑。TCP_FLAG标志只对 TCP 过滤使用。
这些字母用来表达 TCP 包头的标志。新式的规则处理逻辑使用 flags
S 参数来识别 tcp 会话开始的请求。STATEFULkeep state 表示如果有一个包与规则匹配,
则其筛选参数应激活有状态的过滤机制。如果使用新式的处理逻辑, 则这个选项是必需的。有状态过滤IPFILTER有状态过滤有状态过滤将网络流量当作一种双向的包交换来处理。
如果激活它, keep-state 会动态地为每一个相关的包在双向会话交互过程中产生内部规则。
它能够确认发起者和包的目的地之间的会话是有效的双向包交换过程的一部分。
如果包与这些规则不符, 则将自动地拒绝。状态保持也使得 ICMP 包能够与 TCP
或 UDP 会话相关。 因此, 如果您在浏览网站时收到允许的状态保持规则匹配的
ICMP 类型 3 代码 4 响应, 则这些响应会被自动地允许进入。
所有 IPF 能够处理的包, 都可以作为某种活跃会话的一部分,
即使它是另一种协议的, 也会被允许进入。所发生的事情是:将要通过联入公网的网络接口发出的包, 首先会经过动态状态表的检查。
如果包与会话中预期的下一个包匹配, 则防火墙就会允许包通过,
而会话的交互流信息也会在动态状态表中进行更新, 而其他的包,
则将使用发出规则集来检查。发到联入 Internet 公网的包, 也会首先经过动态规则表的检查。
如果与会话中预期的下一个包匹配, 则防火墙就允许它通过,
并更新动态状态表。 其他包仍会使用进入规则集进行检查。当会话结束时, 对应的项会在动态状态表中删除。有状态过滤使得您能够集中于阻止/允许新的会话。
一旦新会话被允许通过, 则所有后续的包就都被自动地允许通过,
而伪造的包则被自动地拒绝。 如果新的会话被阻止,
则后续的包也都不会被允许通过。 有状态过滤从技术角度而言,
在阻止目前攻击者常用的洪水式攻击来说, 具有更好的抗御能力。包容式规则集的例子下面的规则集是如何编写非常安全的包容式防火墙规则集的一个范例。
包容式防火墙只让允许的服务通过, 而所有其他的访问都会被默认地拒绝。
所有的防火墙都有至少两个接口对应的默认规则, 从而使防火墙能够正常工作。所有的类 &unix; 系统, 包括 &os; 都使用
lo0 和 IP 地址
127.0.0.1 用于操作系统中内部的通讯。
防火墙规则必须允许这些包无阻碍地通过。接入 Internet 公网的网络接口, 是放置规则并允许将访问请求发到
Internet 以及接收响应的地方。
这有可能是用户模式的 PPP tun0 接口,
如果您的网卡同 DSL 或电缆调制解调器相联的话。如果有至少一个网卡与防火墙后的内网 LAN 相联,
这些网络接口就应该有一个规则来允许来自这些 LAN 接口的包无阻碍地通过。一般说来, 规则应被组织为三个主要的小节:
所有允许自由通过的接口规则, 发到公网接口的规则,
以及进入公网接口的规则。每一个公网接口规则中, 经常会匹配到的规则应该放置在尽可能靠前的位置。
而最后一个规则应该是阻止包通过, 并记录它们。下面防火墙规则集中, Outbound 部分是一些使用
'pass' 的规则, 这些规则指定了允许访问的公网
Internet 服务, 并且指定了 'quick'、 'on'、
'proto'、 'port', 以及 'keep state' 这些选项。 'proto
tcp' 规则还指定了 'flag' 这个选项, 这样会话的第一个包将出发状态机制。接下来的 Inbound 一节, 则首先阻止所有不希望的数据包。
这样做有两个原因, 其一是被阻止的包可能会被后面的规则允许,
从而并不妨碍获得授权的服务正常工作;
其二是这避免了那些不常见的包由于匹配到最后一条规则而触发日志,
规则集中的最后一条规则是阻止并记录所有的包,
通过这样的记录, 就比较容易找到攻击系统的人,
并为采取法律措施收集证据。需要注意的另一件事情是, 如果收到了不希望的数据包,
则这些包会被丢弃, 而不是给出什么响应。 这样做的好处是,
攻击者无法了解包是否已经被您的系统收到。
攻击者所能了解到的信息越少,
攻陷您的系统所需要花费的时间也就越长。
我们在这里记录的连入的 'nmap OS 指纹' 探测企图,
一般来说正是攻击者所做的第一件事。如果您看到了 'log first' 规则的日志,
就应该用 ipfstat -hio 命令来看看那个规则被匹配的次数,
以便了解系统是否正在或曾被攻击。如果记录的包的端口号并不是您所知道的,
可以在 /etc/services 或
了解端口号通常的用途。参考下面的网页, 了解木马使用的端口:。下面是我在自己的系统中使用的完整的, 非常安全的
'包容式' 防火墙规则集。 直接使用这个规则集不会给您造成问题,
您所要做的只是注释掉那些您不需要的服务。如果在日志中发现了希望阻止的记录, 只需在
inbound 小节中增加一条阻止规则集可。您必须将每一个规则中的 dc0
替换为您系统上接入 Internet 的网络接口名称, 例如,
用户环境下的 PPP 应该是 tun0。在
/etc/ipf.rules 中加入下面的内容:#################################################################
# No restrictions on Inside LAN Interface for private network
# Not needed unless you have LAN
#################################################################
#pass out quick on xl0 all
#pass in quick on xl0 all
#################################################################
# No restrictions on Loopback Interface
#################################################################
pass in quick on lo0 all
pass out quick on lo0 all
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network
# or from this gateway server destine for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# xxx must be the IP address of your ISP's DNS.
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state
pass out quick on dc0 proto udp from any to xxx port = 53 keep state
# Allow out access to my ISP's DHCP server for cable or DSL networks.
# This rule is not needed for 'user ppp' type connection to the
# public Internet, so you can delete this whole group.
# Use the following rule and check log for IP address.
# Then put IP address in commented out rule & delete first rule
pass out log quick on dc0 proto udp from any to any port = 67 keep state
#pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state
# Allow out non-secure standard www function
pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state
# Allow out secure www function https over TLS SSL
pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state
# Allow out send & get email function
pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state
# Allow out Time
pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state
# Allow out nntp news
pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state
# Allow out gateway & LAN users non-secure FTP ( both passive & active modes)
# This function uses the IPNAT built in FTP proxy function coded in
# the nat rules file to make this single rule function correctly.
# If you want to use the pkg_add command to install application packages
# on your gateway system you need this rule.
pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state
# Allow out non-secure Telnet
pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state
# Allow out FBSD CVSUP function
pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state
# Allow out ping to public Internet
pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state
# Allow out whois for LAN PC to public Internet
pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state
# Block and log only the first occurrence of everything
# else that's trying to get out.
# This rule enforces the block all by default logic.
block out log first quick on dc0 all
#################################################################
# Interface facing Public Internet (Inbound Section)
# Interrogate packets originating from the public Internet
# destine for this gateway server or the private network.
#################################################################
# Block all inbound traffic from non-routable or reserved address spaces
block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP
block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP
block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP
block in quick on dc0 from 127.0.0.0/8 to any #loopback
block in quick on dc0 from 0.0.0.0/8 to any #loopback
block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config
block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs
block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect
block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast
##### Block a bunch of different nasty things. ############
# That I do not want to see in the log
# Block frags
block in quick on dc0 all with frags
# Block short tcp packets
block in quick on dc0 proto tcp all with short
# block source routed packets
block in quick on dc0 all with opt lsrr
block in quick on dc0 all with opt ssrr
# Block nmap OS fingerprint attempts
# Log first occurrence of these so I can get their IP address
block in log first quick on dc0 proto tcp from any to any flags FUP
# Block anything with special options
block in quick on dc0 all with ipopts
# Block public pings
block in quick on dc0 proto icmp all icmp-type 8
# Block ident
block in quick on dc0 proto tcp from any to any port = 113
# Block all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
block in log first quick on dc0 proto tcp/udp from any to any port = 137
block in log first quick on dc0 proto tcp/udp from any to any port = 138
block in log first quick on dc0 proto tcp/udp from any to any port = 139
block in log first quick on dc0 proto tcp/udp from any to any port = 81
# Allow traffic in from ISP's DHCP server. This rule must contain
# the IP address of your ISP's DHCP server as it's the only
# authorized source to send this packet type. Only necessary for
# cable or DSL configurations. This rule is not needed for
# 'user ppp' type connection to the public Internet.
# This is the same IP address you captured and
# used in the outbound section.
pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state
# Allow in standard www function because I have apache server
pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state
# Allow in non-secure Telnet session from public Internet
# labeled non-secure because ID/PW passed over public Internet as clear text.
# Delete this sample group if you do not have telnet server enabled.
#pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state
# Allow in secure FTP, Telnet, and SCP from public Internet
# This function is using SSH (secure shell)
pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state
# Block and log only first occurrence of all remaining traffic
# coming into the firewall. The logging of only the first
# occurrence stops a .denial of service. attack targeted
# at filling up your log file space.
# This rule enforces the block all by default logic.
block in log first quick on dc0 all
################### End of rules file #####################################NATNATIP 伪装NAT网络地址转换NATNAT 是 网络地址转换(Network Address
Translation) 的缩写。 对于那些熟悉 &linux; 的人来说,
这个概念叫做 IP 伪装 (Masquerading); NAT 和 IP
伪装是完全一样的概念。 由
IPF 的 NAT 提供的一项功能是,
将防火墙后的本地局域网 (LAN) 共享一个 ISP 提供的 IP
地址来接入 Internet 公网。有些人可能会问, 为什么需要这么做。 一般而言, ISP
会为非商业用户提供动态的 IP 地址。 动态地址意味着每次登录到
ISP 都有可能得到不同的 IP 地址, 无论是采用电话拨号登录,
或使用 cable 以及 DSL 调制解调器的方式。 这个 IP 是您与
Internet 公网交互时使用的身份。现在考虑家中有五台 PC 需要访问
Internet 的情形。 您可能需要向 ISP 为每一台 PC
所使用的独立的 Internet 账号付费, 并且拥有五根电话线。有了 NAT, 您就只需要一个 ISP 账号,
然后将另外四台 PC 的网卡通过交换机连接起来,
并通过运行 &os; 系统的那台机器作为网关连接出去。
NAT 会自动地将每一台 PC 在内网的 LAN IP 地址,
在离开防火墙时转换为公网的 IP 地址。 此外, 当数据包返回时,
也将进行逆向的转换。NAT 通常是在没有向 ISP 请求许可,
或事先知会的情况下进行的, 因而如果被发现,
有时可能会成为 ISP 撤销您的账号的一个借口。
商业用户一般来说会购买昂贵得多的 Internet 线路,
通常会获得一组长期有效的静态 IP 地址块。 ISP
一般会希望并同意商业用户在他们的内网中使用
NAT。在 IP 地址空间中, 有一些特殊的范围是保留供经过
NAT 的内网 LAN IP 地址使用的。 根据
RFC 1918, 您可以使用下面这些 IP 范围用于内网,
它们不会在 Internet 公网上路由:起始 IP 10.0.0.0-结束 IP 10.255.255.255起始 IP 172.16.0.0-结束 IP 172.31.255.255起始 IP 192.168.0.0-结束 IP 192.168.255.255IPNATNAT以及 IPFILTERipnatNAT 规则是通过
ipnat 命令加载的。 默认情况下,
NAT 规则会保存在
/etc/ipnat.rules 文件中。 请参见 &man.ipnat.1;
了解更多的详情。如果在 NAT 已经启动之后想要修改
NAT 规则, 可以修改保存 NAT 规则的那个文件,
然后在执行 ipnat 命令时加上 参数,
以删除在用的 NAT 内部规则表,
以及所有地址翻译表中已有的项。要重新加载 NAT 规则, 可以使用类似下面的命令:&prompt.root; ipnat -CF -f /etc/ipnat.rules如果想要看看您系统上
NAT 的统计信息, 可以用下面的命令:&prompt.root; ipnat -s要列出当前的 NAT 表的映射关系,
使用下面的命令:&prompt.root; ipnat -l要显示详细的信息并显示与规则处理和当前的规则/表项:&prompt.root; ipnat -vIPNAT 规则NAT 规则非常的灵活,
能够适应商业用户和家庭用户的各种不同的需求。这里所介绍的规则语法已经被简化,
以适应非商用环境中的一般情况。 完整的规则语法描述,
请参考 &man.ipnat.5; 联机手册中的介绍。NAT 规则的写法与下面的例子类似:map IFLAN_IP_RANGE -> PUBLIC_ADDRESS关键词 map 出现在规则的最前面。将 IF 替换为对外的网络接口名。LAN_IP_RANGE 是内网中的客户机使用的地址范围。
通常情况下, 这应该是类似 192.168.1.0/24 的地址。PUBLIC_ADDRESS
既可以是外网的 IP 地址, 也可以是
0/32 这个特殊的关键字,
它表示分配到 IF 上的所有地址。NAT 的工作原理当包从 LAN 到达防火墙, 而目的地址是公网地址时,
它首先会通过 outbound 过滤规则。 接下来,
NAT 会得到包, 并按自顶向下的顺序处理规则,
而第一个匹配的规则将生效。
NAT 接下来会根据包对应的接口名字和源
IP 地址检查所有的规则。 如果包和某个 NAT
规则匹配, 则会检查包的
[源 IP 地址, 例如, 内网的 IP 地址] 是否在
NAT 规则中箭头左侧指定的 IP 地址范围匹配。
如果匹配, 则包的原地址将被根据用 0/32
关键字指定的 IP 地址重写。
NAT 将向它的内部
NAT 表发送此地址, 这样, 当包从 Internet
公网中返回时, 就能够把地址映射回原先的内网 IP 地址,
并在随后使用过滤器规则来处理。启用 IPNAT要启用 IPNAT, 只需在
/etc/rc.conf 中加入下面一些语句。使机器能够在不同的网络接口之间进行包的转发,
需要:gateway_enable="YES"每次开机时自动启动 IPNAT:ipnat_enable="YES"指定 IPNAT 规则集文件:ipnat_rules="/etc/ipnat.rules"大型 LAN 中的 NAT对于在一个 LAN 中有大量 PC, 以及包含多个 LAN 的情形,
把所有的内网 IP 地址都映射到同一个公网 IP 上会导致资源不够的问题,
因为同一个端口可能在许多做了
NAT 的 LAN PC 上被多次使用, 并导致碰撞。
有两种方法来缓解这个难题。指定使用哪些端口普通的 NAT 规则类似于:map dc0 192.168.1.0/24 -> 0/32上面的规则中, 包的源端口在包通过 IPNAT
时时不会发生变化的。 通过使用 portmap 关键字, 您可以要求
IPNAT 只使用一定范围内的端口地址。
比如说, 下面的规则将让
IPNAT 把源端口改为指定范围内的端口:map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000使用
auto 关键字可以让配置变得更简单一些, 它会要求
IPNAT 自动地检测可用的端口并使用:map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto使用公网地址池对很大的 LAN 而言, 总有一天会达到这样一个临界值,
此时的 LAN 地址已经多到了无法只用一个公网地址表现的程度。
如果有可用的一块公网 IP 地址, 则可以将这些地址作为一个
地址池 来使用, 让 IPNAT
来从这些公网 IP 地址中挑选用于发包的地址,
并将其为这些包创建映射关系。例如, 如果将下面这个把所有包都映射到同一公网 IP 地址的规则:map dc0 192.168.1.0/24 -> 204.134.75.1稍作修改, 就可以用子网掩码来表达 IP 地址范围:map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0或者用 CIDR 记法来指定的一组地址了:map dc0 192.168.1.0/24 -> 204.134.75.0/24端口重定向非常流行的一种做法是, 将 web 服务器、
邮件服务器、 数据库服务器以及 DNS 分别放到 LAN 上的不同的 PC 上。
这种情况下, 来自这些服务器的网络流量仍然应该被 NAT,
但必须有办法把进入的流量发到对应的局域网的
PC 上。 IPNAT 提供了 NAT
重定向机制来解决这个问题。 考虑下面的情况,
您的 web 服务器的 LAN 地址是 10.0.10.25, 而您的唯一的公网 IP
地址是 20.20.20.5, 则可以编写这样的规则:rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80或者:rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80另外, 也可以让 LAN 地址 10.0.10.33 上运行的 LAN DNS 服务器来处理公网上的
DNS 请求:rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udpFTP 和 NATFTP 是一个在 Internet 如今天这样为人所熟知之前就已经出现的恐龙,
那时, 研究机构和大学是通过租用的线路连到一起的, 而 FTP
则被用于在科研人员之间共享大文件。 那时,
数据的安全性并不是需要考虑的事情。 若干年之后, FTP
协议则被埋进了正在形成中的 Internet 骨干,
而它使用明文来交换用户名和口令的缺点,
并没有随着新出现的一些安全需求而得到改变。 FTP 提供了两种不同的风格,
即主动模式和被动模式。 两者的区别在于数据通道的建立方式。
被动模式相对而言要更加安全, 因为数据通道是由发起 ftp
会话的一方建立的。 关于 FTP 以及它所提供的不同模式,
在
进行了很好的阐述。IPNAT 规则IPNAT 提供了一个内建的 FTP 代理选项,
它可以在 NAT map 规则中指定。
它能够监视所有外发的 FTP 主动或被动模式的会话开始请求,
并动态地创建临时性的过滤器规则, 只打开用于数据通道的端口号。
这样, 就消除了 FTP 一般会给防火墙带来的,
需要大范围地打开高端口所可能带来的安全隐患。下面的规则可以处理来自内网的 FTP 访问:map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp这个规则能够处理来自网关的 FTP 访问:map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp这个则处理所有来自内网的非 FTP 网络流量:map dc0 10.0.10.0/29 -> 0/32FTP map 规则应该在普通的 map 规则之前出现。
所有的包会从最上面的第一个规则开始进行检查。
匹配的顺序是网卡名称, 内网源 IP 地址, 以及它是否是 FTP 包。
如果所有这些规则都匹配成功, 则 FTP
代理将建立一个临时的过滤规则, 以便让 FTP 会话的数据包能够正常出入,
同时对这些包进行 NAT。
所有的 LAN 数据包, 如果没有匹配第一条规则,
则会继续尝试匹配下面的规则, 并最终被
NAT。IPNAT FTP 过滤规则如果使用了
NAT FTP 代理, 则只需要为 FTP 创建一个规则。如果没有使用 FTP 代理, 则需要下面三个规则:# Allow out LAN PC client FTP to public Internet
# Active and passive modes
pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state
# Allow out passive mode data channel high order port numbers
pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state
# Active mode let data channel in from FTP server
pass in quick on rl0 proto tcp from any to any port = 20 flags S keep stateIPFW防火墙IPFW
-
- 这一节的内容正在撰写中。 其内容可能不总是十分准确。
-
-
IPFIREWALL (IPFW) 是一个由 &os; 发起的防火墙应用软件,
它由 &os; 的志愿者成员编写和维护。
它使用了传统的无状态规则和规则编写方式,
以期达到简单状态逻辑所期望的目标。标准的 &os; 安装中, IPFW 所给出的规则集样例 (可以在
- /etc/rc.firewall 中找到) 非常简单,
+ /etc/rc.firewall 和
+ /etc/rc.firewall6 中找到) 非常简单,
建议不要不加修改地直接使用。 该样例中没有使用状态过滤,
而该功能在大部分的配置中都是非常有用的,
因此这一节并不以系统自带的样例作为基础。IPFW 的无状态规则语法, 是由一种提供复杂的选择能力的技术支持的,
这种技术远远超出了一般的防火墙安装人员的知识水平。
IPFW 是为满足专业用户,
以及掌握先进技术的电脑爱好者们对于高级的包选择需求而设计的。
要完全释放 IPFW 的规则所拥有的强大能力,
需要对不同的协议的细节有深入的了解,
并根据它们独特的包头信息来编写规则。
这一级别的详细阐述超出了这本手册的范围。IPFW 由七个部分组成, 其主要组件是内核的防火墙过滤规则处理器,
及其集成的数据包记帐工具、 日志工具、 用以触发
NAT 工具的 'divert' (转发) 规则、
高级特殊用途工具、 dummynet 流量整形机制,
- 'fwd rule' 转发工具, 桥接工具, 以及 ipstealth 工具。
+ 'fwd rule' 转发工具, 桥接工具, 以及 ipstealth 工具。
+ IPFW 支持 IPv4 和 IPv6。
启用 IPFWIPFW启用IPFW 是基本的 &os; 安装的一部分, 以单独的可加载内核模块的形式提供。
如果在 rc.conf 中加入
firewall_enable="YES" 语句, 就会自动地加载对应的内核模块。
除非您打算使用由它提供的
NAT 功能, 一般情况下并不需要把 IPFW 编进
&os; 的内核。如果将
firewall_enable="YES" 加入到
rc.conf 中并重新启动系统,
则下列信息将在启动过程中, 以高亮的白色显示出来:ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled可加载内核模块在编译时加入了记录日志的能力。 要启用日志功能,
并配置详细日志记录的限制, 需要在
/etc/sysctl.conf 中加入一些配置。
这些设置将在重新启动之后生效:net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5内核选项内核选项IPFIREWALL内核选项IPFIREWALL_VERBOSE内核选项IPFIREWALL_VERBOSE_LIMITIPFW内核选项把下列选项在编译 &os; 内核时就加入, 并不是启用 IPFW 所必需的,
除非您需要使用 NAT 功能。
这里只是将这些选项作为背景知识来介绍。options IPFIREWALL这个选项将 IPFW 作为内核的一部分来启用。options IPFIREWALL_VERBOSE这个选项将启用记录通过 IPFW 的匹配了包含 'log' 关键字规则的每一个包的功能。options IPFIREWALL_VERBOSE_LIMIT=5以每项的方式, 限制通过 &man.syslogd.8; 记录的包的个数。
如果在比较恶劣的环境下记录防火墙的活动可能会需要这个选项。
它能够避免潜在的针对 syslog 的洪水式拒绝服务攻击。内核选项IPFIREWALL_DEFAULT_TO_ACCEPToptions IPFIREWALL_DEFAULT_TO_ACCEPT这个选项默认地允许所有的包通过防火墙,
如果您是第一次配置防火墙, 使用这个选项将是一个不错的主意。
- options IPV6FIREWALL
-options IPV6FIREWALL_VERBOSE
-options IPV6FIREWALL_VERBOSE_LIMIT
-options IPV6FIREWALL_DEFAULT_TO_ACCEPT
-
- 这些选项与 IPv4 的对应选项功能一样, 它们是针对 IPv6
- 的。 如果不使用 IPv6, 则不带任何规则的 IPV6FIREWALL
- 将阻止所有的 IPv6 包。
-
内核选项IPDIVERToptions IPDIVERT这一选项启用 NAT
功能。如果内核选项中没有加入 IPFIREWALL_DEFAULT_TO_ACCEPT,
或将您的防火墙设置配置为允许所有的进入包,
则所有发到本机或发出的包都会被阻止。/etc/rc.conf Options启用防火墙:firewall_enable="YES"要选择由 &os; 提供的几种防火墙类型中的一种来作为默认配置,
您需要阅读
/etc/rc.firewall 文件并选出合适的类型,
然后在 /etc/rc.conf 中加入类似下面的配置:firewall_type="open"您还可以指定下列配置规则之一:open — 允许所有流量通过。client — 只保护本机。simple — 保护整个网络。closed — 完全禁止除回环设备之外的全部 IP
流量。UNKNOWN — 禁止加载防火墙规则。filename — 到防火墙规则文件的绝对路径。有两种加载自定义 ipfw 防火墙规则的方法。
其一是将变量 firewall_type 设为包含不带 &man.ipfw.8;
命令行选项的 防火墙规则
文件的完整路径。 下面是一个简单的规则集例子:add block in all
add block out all除此之外, 也可以将
firewall_script 变量设为包含
ipfw 命令的可执行脚本,
这样这个脚本会在启动时自动执行。 与前面规则集文件等价的规则脚本如下:#!/bin/sh
ipfw -q flush
ipfw add block in all
ipfw add block out all如果 firewall_type 设为
client 或 simple,
则还应查看在 /etc/rc.firewall
中的默认规则, 以确认它们与所在机器的配置相一致。
此外, 请注意这一章中的例子均假定 firewall_script 是
/etc/ipfw.rules。启用日志:firewall_logging="YES"设置
firewall_logging 的唯一作用是,
系统将把 net.inet.ip.fw.verbose sysctl
变量置为 1 (参见 )。 并没有能够设置日志限制的
rc.conf 变量, 不过这种限制可以通过设置某些 sysctl
变量来完成, 可以手工进行操作, 也可以写到
/etc/sysctl.conf 文件中:net.inet.ip.fw.verbose_limit=5如果您的计算机是作为网关使用的, 也就是它通过 &man.natd.8;
提供网络地址翻译 (NAT),
请参见 以了解需要在
/etc/rc.conf 中配置的选项。IPFW 命令ipfwipfw 命令是在防火墙运行时,
用于在其内部规则表中手工逐条添加或删除防火墙规则的标准工具。
这一方法的问题在于, 一旦您的关闭计算机或停机,
则所有增加或删除或修改的规则也就丢掉了。
把所有的规则都写到一个文件中, 并在启动时使用这个文件来加载规则,
或一次大批量地替换防火墙规则, 那么推荐使用这里介绍的方法。ipfw 的另一个非常实用的功能是将所有正在运行的防火墙规则显示出来。
IPFW 的记账机制会为每一个规则动态地创建计数器,
用以记录与它们匹配的包的数量。 在测试规则的过程中,
列出规则及其计数器是了解它们是否工作正常的重要手段。按顺序列出所有的规则:&prompt.root; ipfw list列出所有的规则, 同时给出最后一次匹配的时间戳:&prompt.root; ipfw -t list列出所有的记账信息、 匹配规则的包的数量, 以及规则本身。
第一列是规则的编号, 随后是发出包匹配的数量, 进入包的匹配数量,
最后是规则本身。&prompt.root; ipfw -a list列出所有的动态规则和静态规则:&prompt.root; ipfw -d list同时显示已过期的动态规则:&prompt.root; ipfw -d -e list将计数器清零:&prompt.root; ipfw zero只把规则号为
NUM 的计数器清零:&prompt.root; ipfw zero NUMIPFW 规则集规则集是一组根据包中选择的数值使用 allow 或 deny 写出的 ipfw 规则。
在两个主机之前的双向包交换组成了一次会话交互。 防火墙规则集,
会对同一个包处理两次: 第一次是包从公网上到达防火墙时,
而第二次则是包返回 Internet 公网上的主机时。
每一个 TCP/IP 服务 (例如 telnet, www, mail,
等等), 都有事先定义好的协议, 以及一个端口号。
这可以作为建立允许或阻止规则时的基本选择依据。IPFW规则处理顺序当有数据包进入防火墙时, 会从规则集里的第一个规则开始进行比较,
并自顶向下地进行匹配。 当包与某个选择规则参数相匹配时,
将会执行规则所定义的动作, 并停止规则集搜索。 这种策略,
通常也被称作 最先匹配者获胜 的搜索方法。
如果没有任何与包相匹配的规则, 那么它就会根据强制的 ipfw
默认规则, 也就是 65535 号规则截获。 一般情况下这个规则是阻止包,
而且不给出任何回应。如果规则定义的动作是 count、
skipto 或 tee
规则的话, 搜索会继续。这里所介绍的规则, 都是使用了那些包含状态功能的,
也就是 'keep state'、 'limit'、 'in'/'out'、
或者 'via' 选项的规则。 这是编写包容式防火墙规则集所需的基本框架。包容式防火墙只允许与规则匹配的包通过。 这样,
您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务,
同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。
所有其它的访问请求都会被阻止, 并记录下来。
包容式防火墙一般而言要远比排斥式的要安全,
而且也只需要定义允许哪些访问通过。在操作防火墙规则时应谨慎行事, 如果操作不当,
有可能将自己反锁在外面。规则语法IPFW规则语法这里所介绍的规则语法已经经过了简化,
只包括了建立标准的包容式防火墙规则集所必需的那些。
要了解完整的规则语法说明,
请参见 &man.ipfw.8; 联机手册。规则是由关键字组成的: 这些关键字必须以特定的顺序从左到右书写。
下面的介绍中, 关键字使用粗体表示。 某些关键字还包括了子选项,
这些子选项本身可能也是关键字, 有些还可以包含更多的子选项。# 用于表示开始一段注释。
它可以出现在一个规则的后面, 也可以独占一行。
空行会被忽略。CMD RULE_NUMBER ACTION LOGGING SELECTION
STATEFULCMD每一个新的规则都应以
add 作为前缀, 它表示将规则加入内部表。RULE_NUMBER每一个规则都必须包含一个规则编号。ACTION每一个规则可以与下列的动作之一相关联,
所指定的动作将在进入的数据包与规则所指定的选择标准相匹配时执行。allow | accept | pass |
permit这些关键字都表示允许匹配规则的包通过防火墙,
并停止继续搜索规则。check-state根据动态规则表检查数据包。 如果匹配,
则执行规则所指定的动作, 亦即生成动态规则;
否则, 转移到下一个规则。 check-state 规则没有选择标准。
如果规则集中没有 check-state 规则,
则会在第一个 keep-state 或 limit 规则处,
对动态规则表实施检查。deny | drop这两个关键字都表示丢弃匹配规则的包。
同时, 停止继续搜索规则。LOGGINGlog or
logamount当数据包与带 log 关键字的规则匹配时,
将通过名为 SECURITY 的 facility 来把消息记录到 syslogd。
只有在记录的次数没有超过 logamount 参数所指定的次数时,
才会记录日志。 如果没有指定 logamount, 则会以 sysctl 变量
net.inet.ip.fw.verbose_limit 所指定的限制为准。
如果将这两种限制值之一指定为零, 则表示不作限制。
万一达到了限制数,
可以通过将规则的日志计数或包计数清零来重新启用日志,
请参见 ipfw reset log 命令来了解细节。日志是在所有其他匹配条件都验证成功之后,
在针对包实施最终动作 (accept, deny) 之前进行的。
您可以自行决定哪些规则应启用日志。SELECTION这一节所介绍的关键字主要用来描述检查包的哪些属性,
用以判断包是否与规则相匹配。
下面是一些通用的用于匹配包特征的属性,
它们必须按顺序使用:udp | tcp | icmp也可以指定在
/etc/protocols 中所定义的协议。
这个值定义的是匹配的协议, 在规则中必须指定它。from src to dstfrom 和 to 关键字用于匹配 IP 地址。
规则中必须同时指定源和目的两个参数。
如果需要匹配任意 IP 地址,
可以使用特殊关键字 any。
还有一个特殊关键字, 即 me,
用于匹配您的 &os; 系统上所有网络接口上所配置的 IP 地址,
它可以用于表达网络上的其他计算机到防火墙 (也就是本机),
例如 'from me to any' 或 'from any to me' 或 'from 0.0.0.0/0 to any' 或
'from any to 0.0.0.0/0' 或 'from 0.0.0.0 to any' 或 'from
any to 0.0.0.0' 以及 'from me to 0.0.0.0'。 IP
地址可以通过 带点的 IP 地址/掩码长度,
或者一个带点的 IP 地址的形式来指定。 这是编写规则时所必需的。
如果不清楚如何写掩码长度, 请参见 。port number这个参数主要用于那些支持端口号的协议 (例如
TCP 和 UDP)。 如果要通过端口号匹配某个协议,
就必须指定这个参数。 此外, 也可以通过服务的名字 (根据
/etc/services) 来指定服务,
这样会比使用数字指定端口号直观一些。in | out相应地, 匹配进入和发出的包。
这里的 in 和 out 都是关键字, 在编写匹配规则时,
必需作为其他条件的一部分来使用。via IF根据指定的网络接口的名称精确地匹配进出的包。
这里的 via
关键字将使得接口名称成为匹配过程的一部分。setup要匹配 TCP 会话的发起请求,
就必须使用它。keep-state这是一个必须使用的关键字。 在发生匹配时,
防火墙将创建一个动态规则, 其默认行为是,
匹配使用同一协议的、从源到目的 IP/端口 的双向网络流量。limit {src-addr | src-port | dst-addr |
dst-port}防火墙只允许匹配规则时, 与指定的参数相同的
N 个连接。
可以指定至少一个源或目的地址及端口。
'limit' 和 'keep-state' 不能在同一规则中同时使用。
'limit' 提供了与 'keep-state' 相同的功能,
并增加了一些独有的能力。状态规则选项IPFW带状态过滤有状态过滤将网络流量当作一种双向的包交换来处理。
它提供了一种额外的检查能力,
用以检测会话中的包是否来自最初的发送者,
并在遵循双向包交换的规则进行会话。
如果包与这些规则不符, 则将自动地拒绝它们。'check-state' 用来识别在 IPFW
规则集中的包是否符合动态规则机制的规则。
如果匹配, 则允许包通过,
此时防火墙将创建一个新的动态规则来匹配双向交换中的下一个包。
如果不匹配, 则将继续尝试规则集中的下一个规则。动态规则机制在 SYN-flood 攻击下是脆弱的,
因为这种情况会产生大量的动态规则, 从而耗尽资源。
为了抵抗这种攻击, 从 &os; 中加入了一个叫做 limit
的新选项。
这个选项可以用来限制符合规则的会话允许的并发连接数。
如果动态规则表中的规则数超过限制, 则包将被丢弃。记录防火墙消息IPFW记录日志记录日志的好处是显而易见的: 它提供了在事后检查所发生的状况的方法,
例如哪些包被丢弃了, 这些包的来源和目的地,
从而为您提供找到攻击者所需的证据。即使启用了日志机制, IPFW 也不会自行生成任何规则的日志。
防火墙管理员需要指定规则集中的哪些规则应该记录日志,
并在这些规则上增加 log 动作。 一般来说, 只有
deny 规则应记录日志, 例如对于进入的
ICMP ping 的 deny 规则。 另外,
复制默认的 ipfw 终极 deny 规则, 并加入 log
动作来作为您的规则集的最后一条规则也是很常见的用法。
这样, 您就能看到没有匹配任何一条规则的那些数据包。日志是一把双刃剑, 如果不谨慎地加以利用,
则可能会陷入过多的日志数据中, 并导致磁盘被日志塞满。
将磁盘填满是 DoS 攻击最为老套的手法之一。
由于日志除了会写入磁盘之外, 还会输出到 root 的控制台屏幕上,
因此有过多的日志信息是很让人恼火的事情。IPFIREWALL_VERBOSE_LIMIT=5
内核选项将限制同一个规则发到系统日志程序 syslogd 的连续消息的数量。
当内核启用了这个选项时,
某一特定规则所产生的连续消息的数量将封顶为这个数字。
一般来说, 没有办法从连续 200 条一模一样的日志信息中获取更多有用的信息。
举例来说, 如果同一个规则产生了 5 次消息并被记录到
syslogd, 余下的相同的消息将被计数,
并像下面这样发给 syslogd:last message repeated 45 times所有记录的数据包包消息, 默认情况下会最终写到
/var/log/security 文件中,
后者在 /etc/syslog.conf 文件里进行了定义。编写规则脚本绝大多数有经验的 IPFW 用户会创建一个包含规则的文件,
并且, 按能够以脚本形式运行的方式来书写。 这样做最大的一个好处是,
可以大批量地刷新防火墙规则, 而无须重新启动系统就能够激活它们。
这种方法在测试新规则时会非常方便,
因为同一过程在需要时可以多次执行。
作为脚本, 您可以使用符号替换来撰写那些经常需要使用的值,
并用同一个符号在多个规则中反复地表达它。
下面将给出一个例子。这个脚本使用的语法同 'sh'、
'csh' 以及 'tcsh' 脚本兼容。 符号替换字段使用美元符号 $
作为前缀。 符号字段本身并不使用 $ 前缀。
符号替换字段的值必须使用 "双引号" 括起来。可以使用类似下面的规则文件:############### start of example ipfw rules script #############
#
ipfw -q -f flush # Delete all rules
# Set defaults
oif="tun0" # out interface
odns="192.0.2.11" # ISP's DNS server IP address
cmd="ipfw -q add " # build rule prefix
ks="keep-state" # just too lazy to key this each time
$cmd 00500 check-state
$cmd 00502 deny all from any to any frag
$cmd 00501 deny tcp from any to any established
$cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
$cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
$cmd 00611 allow udp from any to $odns 53 out via $oif $ks
################### End of example ipfw rules script ############这就是所要做的全部事情了。 例子中的规则并不重要,
它们主要是用来表示如何使用符号替换。如果把上面的例子保存到
/etc/ipfw.rules 文件中,
您就可以通过输入下面的命令来加载它。&prompt.root; sh /etc/ipfw.rules/etc/ipfw.rules 这个文件可以放到任何位置,
也可以命名为随便什么别的名字。也可以手工执行下面的命令来达到类似的目的:&prompt.root; ipfw -q -f flush
&prompt.root; ipfw -q add check-state
&prompt.root; ipfw -q add deny all from any to any frag
&prompt.root; ipfw -q add deny tcp from any to any established
&prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
&prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
&prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state带状态规则集以下的这组非-NAT 规则集,
是如何编写非常安全的 '包容式' 防火墙的一个例子。
包容式防火墙只允许匹配了 pass 规则的包通过,
而默认阻止所有的其他数据包。 必须有至少两个网络接口,
并且在其上配置了规则才能使防火墙正常工作。所有类 &unix; 操作系统, 也包括 &os;,
都设计为允许使用网络接口 lo0 和 IP
地址 127.0.0.1 来完成操作系统内部的通讯。
防火墙必须包含一组规则, 使这些数据包能够无障碍地收发。接入 Internet 公网的那个网络接口上,
应该配置授权和访问控制, 来限制对外的访问, 以及来自 Internet
公网的访问。 这个接口很可能是您的 ppp 接口, 例如
tun0, 或者您接在 DSL 或电缆 modem
上的网卡。如果有至少一个网卡接入了防火墙后的内网 LAN,
则必须为这些接口配置规则,
以便让这些接口之间的包能够顺畅地通过。所有的规则应被组织为三个部分, 所有应无阻碍地通过的规则,
公网的发出规则, 以及公网的接收规则。公网接口相关的规则的顺序,
应该是最经常用到的放在尽可能靠前的位置,
而最后一个规则, 则应该是阻止那个接口在那一方向上的包。发出部分的规则只包含一些 'allow' 规则,
允许选定的那些唯一区分协议的端口号所指定的协议通过,
以允许访问 Internet 公网上的这些服务。
所有的规则中都指定了 proto, port,
in/out, via 以及 keep state 这些选项。 'proto tcp'
规则同时指定 'setup' 选项, 来区分开始协议会话的包,
以触发将包放入
keep state 规则表中的动作。接收部分则首先阻止所有不希望的包, 在这里有两个目的。
首先是, 这些包被禁止掉之后, 就不会由于匹配了后面的某个规则而被允许。
其次, 明确地禁止这些包, 就不会再在日志中记录它们而形成干扰。
防火墙的最后一条规则是阻止并记录所有包, 这样,
您就可以留下用于起诉攻击您的系统的人的有用记录。另一件需要注意的事情是, 不希望的数据包一般来说不会有任何响应,
这些数据包会被丢弃并消失。 这样,
攻击者也就无法了解他的数据包是否到达了您的系统。
而攻击者了解的信息越少, 它们攻陷系统所需的时间也就越长。
当记录的包使用的端口号不是您所熟悉的那些时, 可以看一看
/etc/services/ 或到
并查找一下端口号, 以了解其用途。 另外,
您也可以在这个网页上了解常见木马所使用的端口: 。包容式规则集的例子下面是一个非-NAT 的规则集,
它是一个完整的包容式规则集。 使用它作为您的规则集不会有什么问题。
只需把那些不需要的服务对应的 pass 规则注释掉就可以了。
如果您在日志中看到消息, 而且不想再看到它们,
只需在接收部分增加一个一个 deny 规则。 您可能需要把 'dc0'
改为接入公网的接口的名字。 对于使用用户态 ppp 的用户而言, 应该是
'tun0'。您可以看出这些规则中的模式。所有请求 Internet 公网上服务的会话开始包,
都使用了 keep-state。所有来自 Internet 的授权服务请求,
都采用了 limit 选项来防止洪水式攻击。所有的规则都使用了 in 或者 out 来说明方向。所有的规则都使用了 via 接口名来指定应该匹配通过哪一个接口的包。这些规则都应放到
/etc/ipfw.rules。################ Start of IPFW rules file ###############################
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
pif="dc0" # public interface name of NIC
# facing the public Internet
#################################################################
# No restrictions on Inside LAN Interface for private network
# Not needed unless you have LAN.
# Change xl0 to your LAN NIC interface name
#################################################################
#$cmd 00005 allow all from any to any via xl0
#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 00010 allow all from any to any via lo0
#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 00015 check-state
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network or from this gateway server
# destine for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP.s DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
# Allow out access to my ISP's DHCP server for cable/DSL configurations.
# This rule is not needed for .user ppp. connection to the public Internet.
# so you can delete this whole group.
# Use the following rule and check log for IP address.
# Then put IP address in commented out rule & delete first rule
$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
# Allow out non-secure standard www function
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
# Allow out send & get email function
$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
# Allow out FBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root
# Allow out ping
$cmd 00250 allow icmp from any to any out via $pif keep-state
# Allow out Time
$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
# Allow out nntp news (i.e. news groups)
$cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
# Allow out whois
$cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state
# deny and log everything else that.s trying to get out.
# This rule enforces the block all by default logic.
$cmd 00299 deny log all from any to any out via $pif
#################################################################
# Interface facing Public Internet (Inbound Section)
# Interrogate packets originating from the public Internet
# destine for this gateway server or the private network.
#################################################################
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Deny public pings
$cmd 00310 deny icmp from any to any in via $pif
# Deny ident
$cmd 00315 deny tcp from any to any 113 in via $pif
# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 00320 deny tcp from any to any 137 in via $pif
$cmd 00321 deny tcp from any to any 138 in via $pif
$cmd 00322 deny tcp from any to any 139 in via $pif
$cmd 00323 deny tcp from any to any 81 in via $pif
# Deny any late arriving packets
$cmd 00330 deny all from any to any frag in via $pif
# Deny ACK packets that did not match the dynamic rule table
$cmd 00332 deny tcp from any to any established in via $pif
# Allow traffic in from ISP's DHCP server. This rule must contain
# the IP address of your ISP.s DHCP server as it.s the only
# authorized source to send this packet type.
# Only necessary for cable or DSL configurations.
# This rule is not needed for .user ppp. type connection to
# the public Internet. This is the same IP address you captured
# and used in the outbound section.
#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
# Allow in standard www function because I have apache server
$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Allow in non-secure Telnet session from public Internet
# labeled non-secure because ID & PW are passed over public
# Internet as clear text.
# Delete this sample group if you do not have telnet server enabled.
$cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Reject & Log all incoming connections from the outside
$cmd 00499 deny log all from any to any in via $pif
# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 00999 deny log all from any to any
################ End of IPFW rules file ###############################一个 NAT 和带状态规则集的例子NAT以及 IPFW要使用 IPFW 的 NAT 功能, 还需要进行一些额外的配置。
除了其他 IPFIREWALL 语句之外,
还需要在内核编译配置中加上 'option IPDIVERT' 语句。在
/etc/rc.conf 中, 除了普通的 IPFW 配置之外,
还需要加入:natd_enable="YES" # Enable NATD function
natd_interface="rl0" # interface name of public Internet NIC
natd_flags="-dynamic -m" # -m = preserve port numbers if possible将带状态规则与转发 natd 规则 (网络地址转换)
会使规则集的编写变得非常复杂。 check-state 的位置,
以及 'divert natd' 规则将变得非常关键。 这样一来,
就不再有简单的顺序处理逻辑流程了。 提供了一种新的动作类型,
称为 'skipto'。 要使用 skipto 命令,
就必须给每一个规则进行编号,
以确定 skipto 规则号是您希望跳转到的位置。下面给出了一些未加注释的例子来说明如何编写这样的规则,
用以帮助您理解包处理规则集的处理顺序。处理流程从规则文件最上边的第一个规则开始处理,
并自顶向下地尝试每一个规则, 直到找到匹配的规则,
且数据包从防火墙中放出为止。 请注意规则号 100 101,
450, 500, 以及 510 的位置非常重要。
这些规则控制发出和接收的包的地址转换过程,
这样它们在 keep-state 动态表中的对应项中就能够与内网的
LAN IP 地址关联。 另一个需要注意的是, 所有的 allow
和 deny 规则都指定了包的方向 (也就是 outbound 或 inbound)
以及网络接口。 最后, 请注意所有发出的会话请求都会请求
skipto rule 500 以完成网络地址转换。下面以 LAN 用户使用 web 浏览器访问一个 web 页面为例。
Web 页面使用 80 来完成通讯。 当包进入防火墙时,
规则 100 并不匹配, 因为它是发出而不是收到的包。
它能够通过规则 101, 因为这是第一个包,
因而它还没有进入动态状态保持表。
包最终到达规则 125, 并匹配该规则。
最终, 它会通过接入 Internet 公网的网卡发出。
这之前, 包的源地址仍然是内网 IP 地址。
一旦匹配这个规则, 就会触发两个动作。
keep-state 选项会把这个规则发到 keep-state 动态规则表中,
并执行所指定的动作。 动作是发到规则表中的信息的一部分。
在这个例子中, 这个动作是 "skipto rule
500"。 规则 500 NAT 包的 IP 地址,
并将其发出。 请务必牢记, 这一步非常重要。
接下来, 数据包将到达目的地, 之后返回并从规则集的第一条规则开始处理。
这一次, 它将与规则 100 匹配, 其目的 IP 地址将被映射回对应的内网
LAN IP 地址。 其后, 它会被
check-state 规则处理, 进而在暨存会话表中找到对应项,
并发到 LAN。 数据包接下来发到了内网 LAN PC 上,
而后者则会发送从远程服务器请求下一段数据的新数据包。
这个包会再次由 check-state 规则检查, 并找到发出的表项,
并执行其关联的动作, 即 'skipto 500'。 包跳转到规则 500 并被
NAT 后发出。在接收一侧, 已经存在的会话的数据包, 会被 check-state
规则自动地处理, 并放到转发 natd 规则。 我们需要解决的问题是,
阻止所有的坏数据包, 而只允许授权的服务。
例如在防火墙上运行了 Apache 服务, 而我们希望人们在访问 Internet
公网的同时, 也能够访问本地的 web 站点。
新的接入开始请求包将匹配规则 100, 而 IP
地址则为防火墙所在的服务器而映射到了 LAN
IP。 此后, 包会匹配所有我们希望检查的那些令人生厌的东西,
并最终匹配规则 425。 一旦发生匹配, 会发生两件事。
数据包会被发到 keep-state 动态表, 但此时,
所有来自那个源 IP 的会话请求的数量会被限制为 2。
这一做法能够挫败针对指定端口上服务的 DoS 攻击。
动作同时指定了包应被发到 LAN 上。 包返回时,
check-state 规则会识别出包属于某一已经存在的会话交互,
并直接把它发到规则 500 做
NAT, 并发到发出接口。示范规则集 #1:#!/bin/sh
cmd="ipfw -q add"
skip="skipto 500"
pif=rl0
ks="keep-state"
good_tcpo="22,25,37,43,53,80,443,110,119"
ipfw -q -f flush
$cmd 002 allow all from any to any via xl0 # exclude LAN traffic
$cmd 003 allow all from any to any via lo0 # exclude loopback traffic
$cmd 100 divert natd ip from any to any in via $pif
$cmd 101 check-state
# Authorized outbound packets
$cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks
$cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks
$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
$cmd 130 $skip icmp from any to any out via $pif $ks
$cmd 135 $skip udp from any to any 123 out via $pif $ks
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Authorized inbound packets
$cmd 400 allow udp from xx.70.207.54 to any 68 in $ks
$cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1
$cmd 450 deny log ip from any to any
# This is skipto location for outbound stateful rules
$cmd 500 divert natd ip from any to any out via $pif
$cmd 510 allow ip from any to any
######################## end of rules ##################下面的这个规则集基本上和上面一样,
但使用了易于读懂的编写方式, 并给出了相当多的注解,
以帮助经验较少的 IPFW 规则编写者更好地理解这些规则到底在做什么。示范规则集 #2:#!/bin/sh
################ Start of IPFW rules file ###############################
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
skip="skipto 800"
pif="rl0" # public interface name of NIC
# facing the public Internet
#################################################################
# No restrictions on Inside LAN Interface for private network
# Change xl0 to your LAN NIC interface name
#################################################################
$cmd 005 allow all from any to any via xl0
#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 010 allow all from any to any via lo0
#################################################################
# check if packet is inbound and nat address if it is
#################################################################
$cmd 014 divert natd ip from any to any in via $pif
#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 015 check-state
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network or from this gateway server
# destine for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP's DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state
# Allow out access to my ISP's DHCP server for cable/DSL configurations.
$cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state
# Allow out non-secure standard www function
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
# Allow out send & get email function
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
# Allow out FreeBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
# Allow out ping
$cmd 080 $skip icmp from any to any out via $pif keep-state
# Allow out Time
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
# Allow out nntp news (i.e. news groups)
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
# Allow out whois
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
# Allow ntp time server
$cmd 130 $skip udp from any to any 123 out via $pif keep-state
#################################################################
# Interface facing Public Internet (Inbound Section)
# Interrogate packets originating from the public Internet
# destine for this gateway server or the private network.
#################################################################
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Deny ident
$cmd 315 deny tcp from any to any 113 in via $pif
# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81 in via $pif
# Deny any late arriving packets
$cmd 330 deny all from any to any frag in via $pif
# Deny ACK packets that did not match the dynamic rule table
$cmd 332 deny tcp from any to any established in via $pif
# Allow traffic in from ISP's DHCP server. This rule must contain
# the IP address of your ISP's DHCP server as it's the only
# authorized source to send this packet type.
# Only necessary for cable or DSL configurations.
# This rule is not needed for 'user ppp' type connection to
# the public Internet. This is the same IP address you captured
# and used in the outbound section.
$cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state
# Allow in standard www function because I have Apache server
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Allow in non-secure Telnet session from public Internet
# labeled non-secure because ID & PW are passed over public
# Internet as clear text.
# Delete this sample group if you do not have telnet server enabled.
$cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 400 deny log all from any to any in via $pif
# Reject & Log all unauthorized out going connections to the public Internet
$cmd 450 deny log all from any to any out via $pif
# This is skipto location for outbound stateful rules
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any
# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 999 deny log all from any to any
################ End of IPFW rules file ###############################
diff --git a/zh_CN.GB2312/books/handbook/geom/chapter.sgml b/zh_CN.GB2312/books/handbook/geom/chapter.sgml
index 798098198c..deeb48f497 100644
--- a/zh_CN.GB2312/books/handbook/geom/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/geom/chapter.sgml
@@ -1,616 +1,704 @@
TomRhodes原作 GEOM: 模块化磁盘变换框架概述GEOMGEOM 磁盘框架GEOM本章将介绍以 &os; GEOM 框架来使用磁盘。
这包括了使用这一框架来配置的主要的 RAID
控制工具。 这一章不会深入讨论 GEOM
如何处理或控制 I/O、 其下层的子系统或代码。
您可以从 &man.geom.4; 联机手册及其众多 SEE ALSO 参考文献中得到这些信息。
这一章也不是对 RAID 配置的权威介绍,
它只介绍由 支持GEOM 的 RAID
级别。读完这章, 您将了解:通过 GEOM 支持的 RAID 类型。如何使用基本工具来配置和管理不同的 RAID
级别。如何通过 GEOM 使用镜像、 条带、 加密和挂接在远程的磁盘设备。如何排除挂接在 GEOM 框架上的磁盘设备的问题。阅读这章之前, 您应:理解 &os; 如何处理磁盘设备
()。了解如何配置和安装新的 &os; 内核
()。GEOM 介绍GEOM 允许访问和控制类 (classes) — 主引导记录、
BSD 标签 (label), 等等 — 通过使用
provider, 或在
/dev 中的特殊文件。
它支持许多软件 RAID 配置, GEOM 能够向操作系统,
以及在其上运行的工具提供透明的访问方式。TomRhodes原作 MurrayStokelyRAID0 - 条带GEOM条带条带是一种将多个磁盘驱动器合并为一个卷的方法。
许多情况下, 这是通过硬件控制器来完成的。 GEOM
磁盘子系统提供了 RAID0 的软件支持,
它也成为磁盘条带。在 RAID0 系统中, 数据被分为多个块,
这些块将分别写入阵列的所有磁盘。 与先前需要等待系统将 256k
数据写到一块磁盘上不同, RAID0 系统,
能够同时分别将打碎的 64k 写到四块磁盘上, 从而提供更好的 I/O
性能。 这一性能提升还能够通过使用多个磁盘控制器来进一步改进。在 RAID0 条带中的每一个盘的尺寸必须一样,
因为 I/O 请求是分散到多个盘上的, 以便让这些盘上的读写并行完成。磁盘条带图在未格式化的 ATA 磁盘上建立条带
- 加载 geom_stripe
+ 加载 geom_stripe.ko
模块:&prompt.root; kldload geom_stripe确信存在合适的挂接点 (mount point)。 如果这个卷将成为根分区,
那么暂时把它挂接到其他位置i, 如 /mnt:&prompt.root; mkdir /mnt确定将被做成条带卷的磁盘的设备名,
并创建新的条带设备。 举例而言,
要将两个未用的、 尚未分区的 ATA 磁盘
/dev/ad2 和
/dev/ad3 做成一个条带设备:
- &prompt.root; gstripe label -v st0 /dev/ad2 /dev/ad3
+ &prompt.root; gstripe label -v st0 /dev/ad2 /dev/ad3
+Metadata value stored on /dev/ad2.
+Metadata value stored on /dev/ad3.
+Done.
-
接着需要写标准的 label, 也就是通常所说的分区表到新卷上,
并安装标准的引导代码:&prompt.root; bsdlabel -wB /dev/stripe/st0上述过程将在
/dev/stripe
目录中的 st0 设备基础上建立两个新设备。
这包括 st0a 和
st0c。 这时, 就可以在
st0a 设备上用下述
newfs 命令来建立文件系统了:&prompt.root; newfs -U /dev/stripe/st0a在屏幕上将滚过一些数字, 整个操作应该能在数秒内完成。
现在可以挂接刚刚做好的卷了。要挂接刚创建的条带盘:&prompt.root; mount /dev/stripe/st0a /mnt要在启动过程中自动挂接这个条带上的文件系统,
需要把关于卷的信息放到
- /etc/fstab 文件中:
+ /etc/fstab 文件中。为达到此目的,
+ 需要创建一个叫 stripe
+ 永久的挂载点:
- &prompt.root; echo "/dev/stripe/st0a /mnt ufs rw 2 2" \
+ &prompt.root; mkdir /stripe
+&prompt.root; echo "/dev/stripe/st0a /stripe ufs rw 2 2" \>> /etc/fstab
- 此外, geom_stripe 模块也必须通过在
+ 此外, geom_stripe.ko 模块也必须通过在
/boot/loader.conf 中增加下述设置,
以便在系统初始化过程中自动加载。&prompt.root; echo 'geom_stripe_load="YES"' >> /boot/loader.confRAID1 - 镜像GEOM磁盘镜像镜像是许多公司和家庭用户使用的一种无须中断的备份技术。
简单地说, 镜像的概念就是 磁盘B 是同步复制 (replicate) 的 磁盘A 的副本, 或者 磁盘C+D
是 diskA+B 的同步复制副本, 等等。 无论磁盘配置如何,
这种技术的共同特点都是一块磁盘或分区的内容会同步复制到另外的地方。
这样, 除了能够很容易地恢复信息之外,
还能够在无须中断服务或访问的情况下进行备份,
甚至直接将副本送到数据保安公司异地储存。在开始做这件事之前, 首先请准备两个容量相同的磁盘驱动器,
下面的例子假定它们都是使用直接访问方式 (Direct Access, &man.da.4;) 的
SCSI 磁盘。对主磁盘进行镜像假定您现有系统中的 &os; 安装到了第一个, 也就是
da0 盘上, 则应告诉 &man.gmirror.8;
将主要数据保存在这里。在开始构建镜像卷之前, 可以启用更多的调试信息,
并应开放对设备的完全访问。 这可以通过将 &man.sysctl.8; 变量
kern.geom.debugflags
设置为下面的值来实现:&prompt.root; sysctl kern.geom.debugflags=17接下来需要创建镜像。 这个过程的第一步是在主磁盘上保存元数据信息,
也就是用下面的命令来创建
/dev/mirror/gm 设备:
+
+ 如果有数据被存放在磁盘最后的扇区,
+ 并在启动设备上创建镜像的话可能导致数据丢失。
+ 在新安装 &os; 之后立即创建镜像可以减低此风险。
+
+
&prompt.root; gmirror label -vb round-robin gm0 /dev/da0系统应给出下面的回应:Metadata value stored on /dev/da0.
Done.初始化 GEOM, 这步操作会加载内核模块
/boot/kernel/geom_mirror.ko:&prompt.root; gmirror load当这个命令运行完之后, 系统会在
/dev/mirror
目录中创建设备节点
gm0。配置在系统初始化过程中自动加载 geom_mirror.ko:&prompt.root; echo 'geom_mirror_load="YES"' >> /boot/loader.conf编辑 /etc/fstab 文件,
将其中先前的 da0 改为新的镜像设备
- gm0。 以 root 用户身份编辑
- /etc/fstab:
+ gm0。
+
+
+ 如果 &man.vi.1; 是你喜欢的编辑器,
+ 以下则是完成此项任务的一个简便方法:
- &prompt.root; vi /etc/fstab
+ &prompt.root; vi /etc/fstab
- 在 &man.vi.1; 中备份现有的
- fstab 内容, 具体操作是
- :w /etc/fstab.bak。 接着,
- 把所有旧的 da0 替换成 gm0,
- 也就是输入命令
- :%s/da/mirror\/gm/g。
+ 在 &man.vi.1; 中备份现有的
+ fstab 内容, 具体操作是
+ :w /etc/fstab.bak。 接着,
+ 把所有旧的 da0 替换成 gm0,
+ 也就是输入命令
+ :%s/da/mirror\/gm/g。
+ 修改完后的 fstab 文件应该是下面的样子。
磁盘驱动器是 SCSI 或 ATA
甚至 RAID 都没有关系, 最终的结果都是
gm。# Device Mountpoint FStype Options Dump Pass#
-/dev/mirror/gm0s2b none swap sw 0 0
-/dev/mirror/gm0s2a / ufs rw 1 1
-#/dev/mirror/gm0s2d /store ufs rw 2 2
-/dev/mirror/gm0s2e /usr ufs rw 2 2
+/dev/mirror/gm0s1b none swap sw 0 0
+/dev/mirror/gm0s1a / ufs rw 1 1
+/dev/mirror/gm0s1d /usr ufs rw 0 0
+/dev/mirror/gm0s1f /home ufs rw 2 2
+#/dev/mirror/gm0s2d /store ufs rw 2 2
+/dev/mirror/gm0s1e /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0重启系统:&prompt.root; shutdown -r now在系统初始化过程中, 新建的
gm0 会代替
da0 设备工作。 系统完成初始化之后,
可以通过检查 mount 命令的输出来查看效果:&prompt.root; mount
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/mirror/gm0s1a 1012974 224604 707334 24% /
devfs 1 1 0 100% /dev
/dev/mirror/gm0s1f 45970182 28596 42263972 0% /home
/dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr
/dev/mirror/gm0s1e 3045006 2241420 559986 80% /var
devfs 1 1 0 100% /var/named/dev这个输出是正常的。 最后, 使用下面的命令将 da1
磁盘加到镜像卷中, 以开始同步过程:&prompt.root; gmirror insert gm0 /dev/da1在构建镜像卷的过程中, 可以用下面的命令查看状态:&prompt.root; gmirror status一旦镜像卷的构建操作完成, 这个命令的输出就会变成这样: Name Status Components
mirror/gm0 COMPLETE da0
da1如果有问题或者构建仍在进行, 输出中的
COMPLETE 就会是
DEGRADED。故障排除系统拒绝引导如果系统引导时出现类似下面的提示:ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot>这种情况应使用电源或复位按钮重启机器。
在引导菜单中, 选择第六 (6) 个选项。
这将让系统进入 &man.loader.8; 提示符。
在此处手工加载内核模块:OK? load geom_mirror
OK? boot如果这样做能解决问题, 则说明由于某种原因模块没有被正确加载。
- 可以通过在内核配置文件中加入:
+ 检查 /boot/loader.conf 中相关条目是否正确。
+ 如果问题仍然存在,可以在内核配置文件中加入:
options GEOM_MIRROR然后重新编译和安装内核来解决这个问题。从磁盘故障中恢复磁盘镜像的一大好处是在当其中一个磁盘出现故障时,
可以很容易地将其替换掉, 并且通常不会丢失数据。考虑前面的 RAID1
配置, 假设 da1
出现了故障并需要替换, 要替换它,
首先确定哪个磁盘出现了故障, 并关闭系统。
此时, 可以用换上新的磁盘, 并重新启动系统。
这之后可以用下面的命令来完成磁盘的替换操作:&prompt.root; gmirror forget gm0&prompt.root; gmirror insert gm0 /dev/da1在重建过程中可以用 gmirror
命令来监看进度。 就是这样简单。GEOM Gate 网络设备通过 gate 工具, GEOM 支持以远程方式使用设备, 例如磁盘、
CD-ROM、 文件等等。 这和 NFS 类似。在开始工作之前, 首先要创建一个导出文件。
这个文件的作用是指定谁可以访问导出的资源,
以及提供何种级别的访问授权。 例如,
要把第一块 SCSI 盘的第四个 slice 导出,
对应的 /etc/gg.exports 会是类似下面的样子:192.168.1.0/24 RW /dev/da0s4d这表示允许同属私有子网的所有机器访问
da0s4d 分区上的文件系统。要导出这个设备, 首先请确认它没有被挂接,
然后是启动 &man.ggated.8; 服务:&prompt.root; ggated现在我们将在客户机上 mount 该设备,
使用下面的命令:&prompt.root; ggatec create -o rw 192.168.1.1 /dev/da0s4d
ggate0
&prompt.root; mount /dev/ggate0 /mnt到此为止, 设备应该已经可以通过挂接点
/mnt 访问了。请注意, 如果设备已经被服务器或网络上的任何其他机器挂接,
则前述操作将会失败。如果不再需要使用这个设备,
就可以使用 &man.umount.8; 命令来安全地将其卸下了,
这一点和其他磁盘设备类似。为磁盘设备添加卷标GEOM磁盘卷标在系统初始化的过程中, &os; 内核会为检测到的设备创建设备节点。
这种检测方式存在一些问题, 例如,
在通过 USB 添加设备时应如何处理?
很可能有闪存盘设备最初被识别为
da0 而在这之后, 则由
da0 变成了
da1。 而这则会在挂接
/etc/fstab 中的文件系统时造成问题,
这些问题, 还可能在系统引导时导致无法正常启动。解决这个问题的一个方法是以连接拓扑方式链式地进行
SCSI 设备命名, 这样,
当在 SCSI 卡上增加新设备时, 这些设备将使用一个未用的编号。
但如果 USB 设备取代了主 SCSI 磁盘的位置呢?
由于 USB 通常会在 SCSI 卡之前检测到,
因此很可能出现这种现象。 当然, 可以通过在系统引导之后再插入这些设备来绕过这个问题。
另一种绕过这个问题的方法, 则是只使用
ATA 驱动器, 并避免在
/etc/fstab 中列出
SCSI 设备。还有一种更好的解决方法。 通过使用
glabel 工具, 管理员或用户可以为磁盘设备打上标签, 并在
/etc/fstab 中使用这些标签。 由于
glabel 会将标签保存在对应 provider 的最后一个扇区,
在系统重启之后, 它仍会持续存在。 因此, 通过将具体的设备替换为使用标签表示,
无论设备节点变成什么, 文件系统都能够顺利地完成挂接。这并不是说标签一定是永久性的。
glabel 工具既可以创建永久性标签, 也可以创建临时性标签。
在重启时, 只有永久性标签会保持。 请参见联机手册 &man.glabel.8;
以了解两者之间的差异。标签类型和使用示范有两种类型的标签, 一种是普通标签, 另一种是文件系统标签。
- 两者的差异体现在是否能够自动检测, 以及是否在重启后保持。 这些标签会放到
- /dev 中的特殊目录中,
- 这些目录的名字取决于文件系统类型。 例如,
+ 标签可以是永久性的或暂时性的。永久性的标签可以通过
+ &man.tunefs.8; 或 &man.newfs.8; 命令创键。根据文件系统的类型,
+ 它们将在 /dev
+ 下的一个子目录中被创建。例如,
UFS2 文件系统的标签会创建到
/dev/ufs
- 目录中。
+ 目录中。永久性的标签还可以使用 glabel label
+ 创建。它们不再是文件系统特定的,而是会在
+ /dev/label
+ 目录中被创建。
- 普通标签在系统下次重启时会消失, 这些标签会创建到
+ 暂时性的标签在系统下次重启时会消失, 这些标签会创建到
/dev/label 目录中,
- 很适合测试之用。
+ 很适合测试之用。可以使用 glabel create
+ 创建暂时性的标签。请参阅 &man.glabel.8;
+ 手册页以获取更多详细信息。
- 永久性标签可以使用
- tunefs 或 newfs
- 工具来创建。 要为
- UFS2 文件系统创建标签, 而不破坏其上的数据,
- 可以使用下面的命令:
+ 要为一个 UFS2 文件系统创建永久性标签,
+ 而不破坏其上的数据,可以使用下面的命令:&prompt.root; tunefs -L home/dev/da3如果文件系统满了, 这可能会导致数据损坏; 不过, 如果文件系统快满了,
此时应首先删除一些无用的文件, 而不是增加标签。现在, 您应可以在
/dev/ufs 目录中看到标签,
并将其加入 /etc/fstab:/dev/ufs/home /home ufs rw 2 2当运行 tunefs 时, 应首先卸下文件系统。现在可以像平时一样挂接文件系统了:&prompt.root; mount /home现在, 只要在系统引导时通过 /boot/loader.conf 配置加载了内核模块
geom_label.ko, 或在联编内核时指定了
GEOM_LABEL 选项,
设备节点由于增删设备而顺序发生变化时, 就不会影响文件系统的挂接了。通过使用 newfs 命令的
参数, 可以在创建文件系统时为其添加默认的标签。
请参见联机手册 &man.newfs.8; 以了解进一步的详情。下列命令可以清除标签:&prompt.root; glabel destroy home
+
+ 以下的例子展示了如何为一个启动磁盘打上标签。
+
+
+ 为启动磁盘打上标签
+
+ 为启动磁盘打上永久性标签, 系统应该能够正常启动,
+ 即使磁盘被移动到了另外一个控制器或者转移到了一个不同的系统上。
+ 此例中我们假设使用了一个 ATA 磁盘,
+ 当前这个设备被系统识别为 ad0。
+ 还假设使用了标准的 &os; 分区划分方案,
+ /,
+ /var,
+ /usr 和
+ /tmp 文件系统,
+ 还有一个 swap 分区。
+
+ 重启系统,在 &man.loader.8; 提示符下键入
+ 4 启动到单用户模式。
+ 然后输入以下的命令:
+
+ &prompt.root; glabel label rootfs /dev/ad0s1a
+GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
+&prompt.root; glabel label var /dev/ad0s1d
+GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
+&prompt.root; glabel label usr /dev/ad0s1f
+GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
+&prompt.root; glabel label tmp /dev/ad0s1e
+GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
+&prompt.root; glabel label swap /dev/ad0s1b
+GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
+&prompt.root; exit
+
+ 系统加继续启动进入多用户模式。 在启动完毕后, 编辑
+ /etc/fstab 用各自的标签替换下常规的设备名。
+ 最终 /etc/fstab 看起来差不多是这样的:
+
+ # Device Mountpoint FStype Options Dump Pass#
+/dev/label/swap none swap sw 0 0
+/dev/label/rootfs / ufs rw 1 1
+/dev/label/tmp /tmp ufs rw 2 2
+/dev/label/usr /usr ufs rw 2 2
+/dev/label/var /var ufs rw 2 2
+
+ 现在可以重启系统了。 如果一切顺利的话,
+ 系统可以正常启动并且 mount 命令显示:
+
+ &prompt.root; mount
+/dev/label/rootfs on / (ufs, local)
+devfs on /dev (devfs, local)
+/dev/label/tmp on /tmp (ufs, local, soft-updates)
+/dev/label/usr on /usr (ufs, local, soft-updates)
+/dev/label/var on /var (ufs, local, soft-updates)
+ 通过 GEOM 实现 UFS 日志GEOM日志随着 &os; 7.0 的发布, 实现了长期为人们所期待的
UFS 日志。 这个实现采用了
GEOM 子系统, 可以很容易地使用 &man.gjournal.8; 工具来进行配置。日志是什么? 日志的作用是保存文件系统事务的记录, 换言之,
完成一次完整的磁盘写入操作所需的变动, 这些记录会在元数据以及文件数据写盘之前,
写入到磁盘中。 这种事务日志可以在随后用于重放并完成文件系统事务,
以避免文件系统出现不一致的问题。这种方法是另一种阻止文件系统丢失数据并发生不一致的方法。 与 Soft Updates
- 追踪并确保元数据更新顺序这种方法不同, 它会实际地将日志保存到磁盘最后的扇区,
- 或另外一块磁盘上。
+ 追踪并确保元数据更新顺序这种方法不同,
+ 它会实际地将日志保存到指定为此项任务保留的磁盘空间上,
+ 在某些情况下可全部存放到另外一块磁盘上。
与其他文件系统的日志实现不同,
gjournal 采用的是基于块, 而不是作为文件系统的一部分的方式 -
它只是作为一种
GEOM 扩展实现。如果希望启用 gjournal,
&os; 内核需要下列选项 - 这是 7.X 系统上的默认配置:options UFS_GJOURNAL
+ 如果使用日志的卷需要在启动的时候被挂载, 还需加载
+ geom_journal.ko 内核模块,
+ 将以下着行加入 /boot/loader.conf:
+
+ geom_journal_load="YES"
+
+ 这个功能也可被编译进一个定制的内核,
+ 需在内核配置文件中加入以下这行:
+
+ options GEOM_JOURNAL
+
现在, 可以为空闲的文件系统创建日志了。 对于新增的 SCSI 磁盘
da4, 具体的操作步骤为:&prompt.root; gjournal label /dev/da4
&prompt.root; gjournal load这样, 就会出现一个与
/dev/da4 设备节点对应的
/dev/da4.journal 设备节点。
接下来, 可以在这个设备上建立文件系统:&prompt.root; newfs -O 2 -J /dev/da4.journal这个命令将建立一个包含日志的
UFS2 文件系统。然后就可以用 mount 命令来挂接设备了:&prompt.root; mount /dev/da4.journal /mnt当磁盘包含多个 slice 时, 每个 slice 上都会建立日志。
例如, 如果有 ad4s1 和
ad4s2 这两个 slice,
则 gjournal 会建立
ad4s1.journal 和
ad4s2.journal。
如果连续运行两次这个命令, 则会建立
多层日志。在某些情况下, 可能会希望在其他磁盘上保存日志。 对于这些情形,
日志提供者或存储设备, 应在启用日志的设备后给出。 在暨存的文件系统上,
可以用 tunefs 来启用日志; 不过,
在尝试修改文件系统之前, 您应对其进行备份。 多数情况下,
gjournal 会因为无法建立日志而失败, 在误用
tunefs 时, 这可能导致失败。
+
+ 对于 &os; 系统的启动磁盘使用日志也是可能的。
+ 请参阅 Implementing UFS Journaling on
+ a Desktop PC 以获得更多详细信息。
diff --git a/zh_CN.GB2312/books/handbook/install/chapter.sgml b/zh_CN.GB2312/books/handbook/install/chapter.sgml
index fd18eaed6d..0817ce6af2 100644
--- a/zh_CN.GB2312/books/handbook/install/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/install/chapter.sgml
@@ -1,4471 +1,4491 @@
JimMock结构、组织重整, 部分重写 RandyPrattsysinstall 操作流程、屏幕抓图以及一般性文件安装 FreeBSD概述installationFreeBSD 提供了一个以文字为主,简单好用的安装程序,叫做
sysinstall 。这是 FreeBSD 默认使用的安装程序;
厂商如果想,也可以提供适合自己需要的安装程序。本章说明如何使用
sysinstall 来安装 FreeBSD。学习完本章之后,您将会知道:如何制作 FreeBSD 安装磁盘FreeBSD如何参照及分割您的硬盘如何启动 sysinstall.在执行 sysinstall 时您将要回答的问题、
问题代表什么意义,以及该如何回答它们。在阅读本章之前,您应该:阅读您要安装的 FreeBSD
版本所附的硬件支持列表以确定您的硬件有没有被支持。一般来说,此安装说明是针对 &i386; (PC 兼容机)
体系结构的电脑。如果有其它体系结构(如Alpha)的安装说明,
我们将一并列出。虽然本文档经常保持更新,
但有可能与您安装版本上所带的说明文档有些许出入。
在这里建议您使用本说明文章作为一般性的安装指导参考手册。硬件需求最小配置安装 &os; 所需的最小硬件配置, 随
&os; 版本和硬件架构不同而有所不同。关于安装所需的最低硬件配置信息, 可以在 &os; 网站的 发行版信息
部分中的 安装说明书 中找到。在接下来的几节中,
给出了这些信息的一些总结。随您安装 &os; 的方式不同,
可能需要使用软驱或为 &os; 支持的 CDROM 驱动器,
有时候也可能需要的是一块网卡。 这将在 中进行介绍。&os;/&arch.i386; 和 &os;/&arch.pc98;&os;/&arch.i386; 和 &os;/&arch.pc98; 版本,
都需要 486 或更高的处理器,以及至少 24 MB 的 RAM。
您需要至少 150 MB 的空闲硬盘空间,
才能完成最小的安装配置。对于老旧的硬件而言, 多数时候,
装配更多的 RAM 和腾出更多的硬盘空间,
要比使用更快的处理器更有用。&os;/&arch.alpha;Alpha要安装 &os;/&arch.alpha;, 您使用的必须是某种受支持的平台
(参见 )
而且 &os; 必须独占一个硬盘。目前 &os; 还无法与其它操作系统共享磁盘。
这个磁盘必须接在 SRM 固件支持的 SCSI 控制器上,或者如果您机器上的
SRM 支持从 IDE 硬盘启动,则应装到 IDE 硬盘上。ARCAlpha BIOSSRM此外您还需要用于您的平台 SRM 控制台固件。有时,可以在
AlphaBIOS (或 ARC) 固件和 SRM 之间切换。如果没有,
则需要从制造商网站上下载并安装新的固件。对于 Alpha 的支持, 从
&os; 7.0 版本开始已经不再提供。
&os; 6.X 系列发行版,
是最后一批支持这种硬件平台的版本。&os;/&arch.amd64;有两类处理器同时能够支持运行
&os;/&arch.amd64;。 第一种是 AMD64 处理器,
包括 &amd.athlon;64、
&amd.athlon;64-FX、 &amd.opteron; 以及更高级别的处理器。能够使用
&os;/&arch.amd64; 的另一种处理器是包含了采用 &intel; EM64T
架构支持的处理器。 这类处理器包括
&intel; &core; 2 Duo、 Quad、 以及 Extreme 系列处理器,
以及 &intel; &xeon; 3000、 5000、 和 7000
系列处理器。如果您的计算机使用 nVidia nForce3
Pro-150, 则 必须 使用 BIOS 配置,
禁用 IO APIC。 如果您没有找到这样的选项,
可能就只能转而禁用 ACPI 了。 Pro-150 芯片组存在一个 bug,
目前我们还没有找到绕过这一问题的方法。&os;/&arch.sparc64;要安装 &os;/&arch.sparc64;, 必须使用它支持的平台 (参见 )。&os;/&arch.sparc64; 需要独占一块磁盘。
目前还没有办法与其它操作系统共享一块磁盘。支持的硬件支持的硬件列表, 会作为 &os; 发行版本的 &os; 兼容硬件说明提供。
这个文档通常可以在 CDROM 或 FTP 安装文件的顶级目录找到,
它的名字是 HARDWARE.TXT, 此外, 在
sysinstall 的 documentation
菜单也可以找到。它针对特定的硬件架构列出了 &os; 已知支持的硬件。
不同发行版本和架构上的硬件支持列表,可以在 &os; 网站的 发行版信息
页面上找到。安装前的准备工作列出您电脑的硬件清单在安装 FreeBSD 之前,您应该试着将您电脑中的硬件清单列出来。
FreeBSD 安装程序会将这些硬件(磁盘、网卡、光驱等等)
以及型号及制造厂商列出来。FreeBSD 也会尝试为这些设备找出最适当的 IRQ
及 IO 端口的设定。但是因为 PC 的硬件种类实在太过复杂,
这个步骤不一定总是能成功。这时,
您就可能需要手动更改有问题的设备的设定值。如果您已经安装了其它的操作系统,如 &windows; 或 Linux,
那么您可以先由这些系统所提供的工具来查看您的设备设定值是怎么分配的。
如果您真的没办法确定某些接口卡用什么设定值,那么您可以检查看看,
说不定它的设定已经标示在卡上。常用的 IRQ 号码为 3、5 以及 7;
IO 端口的值通常以 16 进制位表示,例如 Ox330。我们建议您在安装 FreeBSD 之前把这些信息打印或记录下来,做成表格
的样子也许会比较有帮助,例如:
硬件设备清单设备名IRQIO 端口号备注第一块硬盘N/AN/A40 GB,Seagate 制造,第一个 IDE 接口主设备CDROMN/AN/A第一个 IDE 接口从设备第二块硬盘N/AN/A20 GB,IBM 制造, 第二个 IDE 接口主设备第一个 IDE 控制器140x1f0网卡N/AN/A&intel; 10/100ModemN/AN/A&tm.3com; 56K faxmodem,位于 COM1 口…
在清楚地了解了您计算机的配置之后, 需要检查它是否符合您希望安装的
&os; 版本的硬件需求。备份您的数据如果您的电脑上面存有重要的数据资料,
那么在安装 FreeBSD 前请确定您已经将这些资料备份了,
并且先测试这些备份文档是否有问题。FreeBSD
安装程序在要写入任何资料到您的硬盘前都会先提醒您确认,
一旦您确定要写入,那么以后就没有反悔的机会。决定要将 FreeBSD 安装到哪里如果您想让 FreeBSD 使用整个硬盘,那么请直接跳到下一节。但是,如果您想让 FreeBSD 跟您已有的系统并存,
那么您必须对您数据存在硬盘的分布方式有深入的了解,
以及其所造成的影响。&os;/&arch.i386; 体系结构的硬盘分配方式一个 PC 硬盘可以被细分为许多块。
这些块被称为 partitions (分区)。
由于 &os; 内部也有分区的概念,如此命名很容易导致混淆,
因此我们在 &os; 中,将其称为磁盘 slice,或简称为 slices。
例如, FreeBSD 提供的用于操作 PC 磁盘分区的工具
fdisk 就将其称为 slice 而不是 partition。
由于设计的原因, 每个硬盘仅支持四个分区; 这些分区叫做
主分区(Primary partion)。
为了突破这个限制以便能使用更多的分区,就有了新的分区类型,叫做
扩展分区(Extended partition)。
一个硬盘可以拥有一个扩展分区。在扩展分区里可以建立许多个所谓的
逻辑分区(Logical partitions)。每个分区都有其独立的 分区号(partition ID),
用以区分每个分区的数据类型。FreeBSD 分区的分区号为
165。一般而言,每种操作系统都会有自己独特的方式来区别分区。
例如 DOS 及其之后的 &windows;, 会分配给每个主分区及逻辑分区一个
驱动器字符,
从 C: 开始。FreeBSD 必须安装在主分区。FreeBSD
可以在这个分区上面存放系统数据或是您建立的任何文件。
然而,如果您有多个硬盘,您也可以在这些硬盘上(全部或部分)建立 FreeBSD
分区。在您安装 FreeBSD 的时候,必须要有一个分区可以给 FreeBSD 使用。
这个分区可以是尚未规划的分区,
或是已经存在且存有数据但您不再需要的分区。如果您已经用完了您硬盘上的所有分区,
那么您必须使用其它操作系统所提供的工具
(如 DOS 或 &windows; 下的 fdisk)
来腾出一个分区给 FreeBSD 使用。如果您的某个分区有多余的空间,您可以使用它。
但是使用前您需要先整理一下这些分区。FreeBSD 最小安装需要约 100 MB 的空间,但是这仅是
非常 基本的安装,
几乎没有剩下多少空间可以建立您自己的文件。一个较理想的最小安装是
250 MB,不含图形界面;或是 350 MB 以上,包含图形界面。
如果您还需要安装其它的第三方厂商的套件,
那么将需要更多的硬盘空间。您可以使用商业软件,例如
&partitionmagic; (硬盘分区魔术师)
或类似 GParted
这样的免费工具来调整分区尺寸,为 FreeBSD 腾出空间。 FreeBSD 光盘的
tools 目录包含两个免费的工具也可以完成这个工作:
FIPS 以及
PResizer,它们的文档可以在同一目录中找到。
FIPS、PResizer,
和 &partitionmagic;
能够改变 FAT16 以及 FAT32
分区的大小 — 它们可以在 &ms-dos; 以及 &windows; ME 系统中使用。
这些工具的说明文件可以在同一个目录下面找到。
&partitionmagic; 和
GParted
都能改变 NTFS 分区的尺寸。
GParted 在许多 Live CD Linux 发行版,
如 SystemRescueCD
中均有提供。目前已经有报告显示改变 µsoft; Vista
分区尺寸时会出现问题。 在进行此类操作时,
建议您准备一张 Vista 安装 CDROM。如同其他的磁盘维护操作一样,
强烈建议您事先进行备份。不当的使用这些工具可能会删掉您硬盘上的数据资料!
在使用这些工具前确定您有最近的、没问题的备份数据。使用已存在的分区假设您只有一个 4GB 的硬盘,而且已经装了 &windows;
然后您将这个硬盘分成两个分区 C: 跟
D:,每个分区大小为 2 GB。在
C: 分区上存放有 1 GB 的数据、
D:分区上存放 0.5 GB 的数据。这意味着您的盘上有两个分区,一个驱动器符号是一个分区
(如 c:、d:)。 您可以把所有存放在 D:
分区上的数据复制到 C: 分区,
这样就空出了一个分区(d:)给 FreeBSD 使用。缩减已现在的分区假设您只有一个 4 GB 的硬盘,而且已经装了 &windows;。
您在安装 &windows; 的时候把 4 GB 都给了
C: 分区,并且已经使用了 1.5 GB
的空间。您想将剩余空间中的 2 GB 给 FreeBSD 使用。为了安装 FreeBSD,您必须从下面两种方式中选择一种:备份 &windows; 的数据资料,然后重新安装 &windows;,
并给 &windows; 分配 2 GB 的空间。使用上面提及的 &partitionmagic;
来整理或切割您的分区。Alpha 体系结构的硬盘分配方式Alpha在 Alpha 上,您必须使用一整颗硬盘给 FreeBSD,
没有办法在同一个硬盘上跟其它操作系统共存。
根据不同的 Alpha 机器,您的硬盘可以是 SCSI 或 IDE 硬盘,
只要您的机器可以从这些硬盘开机就可以。按照 Digital/Compaq 使用手册书写的惯例,
所有 SRM 输入的部分都用大写表示。
注意,SRM 大小写有别。要想得知您硬盘的名称以及型号,
可以在 SRM console 提示符下使用
SHOW DEVICE 命令:>>>SHOW DEVICE
dka0.0.0.4.0 DKA0 TOSHIBA CD-ROM XM-57 3476
dkc0.0.0.1009.0 DKC0 RZ1BB-BS 0658
dkc100.1.0.1009.0 DKC100 SEAGATE ST34501W 0015
dva0.0.0.0.1 DVA0
ewa0.0.0.3.0 EWA0 00-00-F8-75-6D-01
pkc0.7.0.1009.0 PKC0 SCSI Bus ID 7 5.27
pqa0.0.0.4.0 PQA0 PCI EIDE
pqb0.0.1.4.0 PQB0 PCI EIDE此范例使用 Digital Personal Workstation 433au
并且显示出此机器联接有三个硬盘。第一个是 CDROM,叫做
DKA0;另外两个是两个硬盘,分别叫做
DKC0 及 DKC100。
硬盘名称中有 DKx 字样的是 SCSI 硬盘。
例如 DKA100 表示是一个 SCSI 设备,
其 SCSI ID 为 1,位于第一个 SCSI 接口 (A)。
DKC300 表示一个 SCSI 硬盘,
SCSI ID 为 3,位于第三个 SCSI 接口 (C)。设备名称
PKx 表示 SCSI 控制卡。由以上
SHOW DEVICE 指令的输出结果看来,
SCSI 光盘也被视为是 SCSI 硬盘的一种。IDE 硬盘的名称类似 DQx,而
PQx 则表示相对应的硬盘控制器。收集您的网络配置相关资料如果您想通过网络(FTP 或是 NFS)安装 FreeBSD,
那么您就必须知道您的网络配置信息。在安装 FreeBSD
的过程中将会提示您输入这些资料,以顺利完成安装过程。使用以太网或电缆/DSL Modem如果您通过局域网或是要通过网卡使用电缆/DSL 上网,
那么您必须准备下面的信息:IP 地址。默认网关 IP 地址。主机名称。DNS 服务器的 IP 地址。子网掩码。如果您不知道这些信息,
您可以询问系统管理员或是您的网络服务提供者。
他们可能会说这些信息会由 DHCP
自动分配;如果这样的话,请记住这一点就可以了。使用 Modem 连接如果您由 ISP 提供的拨号服务上网,您仍然可以通过它安装
FreeBSD,只是会需要很长的时间。您必须知道:拨号到 ISP 的电话号码。您的 modem 是连接到哪个 COM 端口。您拨号到 ISP 所用的账号和密码。检查 FreeBSD 发行勘误虽然我们尽力确保每个 FreeBSD 发行版本的稳定性,
但偶尔也会有一些错误进入发行版。极少数情况下,
这些问题甚至可能会影响安装。
当发现和修正问题之后,它们会列在 FreeBSD 网站中的
FreeBSD 发行勘误 中。
在您安装之前,应该首先看一看这份勘误表,以了解可能存在的问题。关于所有释出版本的信息,包括勘误表,可以在
FreeBSD 网站 的 发行版信息
一节中找到。准备安装介质FreeBSD 可以通过下面任何一种安装介质进行安装:安装介质CDROM 或 DVD在同一计算机上的 DOS 分区 SCSI 或 QIC 磁带软盘网络通过防火墙的一个 FTP 站点,或使用 HTTP 代理。 NFS 服务器一个指定的并行或串行接口如果您购买了 FreeBSD 的 CD 或 DVD,那么您可以直接进入下一节
。如果您还没有 FreeBSD 的安装文件,您应该回到
一节,
它介绍了如何准备所需要的安装介质。之后,您就可以回到这一节,
并从 继续。准备引导介质FreeBSD 的安装过程开始于将您的电脑开机进入 FreeBSD
安装环境 — -并非在其它的操作系统上运行一个程序。
计算机通常使用安装在硬盘上的操作系统进行引导,
也可以配置成使用一张bootable(可引导)的软盘进行启动。
大多数现代计算机都可以从光驱进行引导系统。如果您有 FreeBSD 的安装光盘或 DVD(或者是您购买的,
或者是您自己准备的。)并且您的计算机可以从光驱进行启动
(通常在 BIOS 中会有 Boot Order
或类似的选项可以设置),那么您就可以跳过此小节。
因为 FreeBSD 光盘及 DVD 光盘都是可以引导的,
用它们开机您不用做什么特别的准备。一般来说,要建立安装盘(软盘)请依照下列步骤:获取开机软盘映像文件开机软盘映像文件可以在您的安装介质的
floppies/ 目录下找到,
另外您也可以从下述网站的 floppies 目录下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/<架构名>/<版本>-RELEASE/floppies/.
将 <架构名> 和
<版本>
替换为您使用的计算机体系结构和希望安装的版本号。
例如,用于安装 &i386; 上的
&os;/&arch.i386; &rel.current;-RELEASE 的文件的地址,
应该是 。软盘映像文件的扩展名是 .flp。
在 floppies/ 目录中包括了许多不同的映像文件,
随您安装的 FreeBSD 版本, 某些时候也随硬件的不同,
您需要使用的映像文件可能会有所不同。 您通常会需要四张软盘,
即 boot.flp、
kern1.flp、
kern2.flp, 以及
kern3.flp。 请查阅同一目录下的
README.TXT
文件以了解关于这些映像文件的最新信息。您的 FTP 程序必须使用 二进制模式 来下载这些映
像文件。有些浏览器只会用 text (或ASCII
) 模式来传输数据,
用这些浏览器下载的映像文件做成的软盘将无法正常开机。准备软盘您必须为您下载的每一个映像文件准备一张软盘。
并且请避免使用到坏掉的软盘。
最简单的方式就是您先将这些软盘格式化,
不要相信所谓的已格式化的软盘。在 &windows;
下的格式化程序不会告诉您出现多少坏块,
它只是简单的标记它们为 bad 并且忽略它们。
根据建议您应该使用全新的软盘来存放安装程序。如果您在安装 FreeBSD 的过程中造成当机、
冻结或是其它怪异现象,第一个要怀疑的就是引导软盘。
请用其它的软盘制作映像文件再试试看。将映像文件写入软盘中.flp 文件 并非
一般的文件,您不能直接将它们复制到软盘上。
事实上它是一张包含完整磁盘内容的映像文件。这表示您
不能 简单的使用 DOS 的 copy
命令将文件写到软盘上,
而必须使用特别的工具程序将映像文件直接写到软盘中。DOS如果您使用 &ms-dos; 或 &windows; 操作系统来制作引导盘,
那么您可以使用我们提供的 fdimage
程序来将映像文件写到软盘中。如果您使用的是光盘,假设光盘的驱动器符号为
E:,那么请执行下面的命令:E:\>tools\fdimage floppies\boot.flp A:重复上述命令以完成每个 .flp 文件的写入,
每换一个映像文件都必须更换软盘;
制作好的软盘请注明是使用哪个映像文件做的。
如果您的映像文件存放在不同的地方,请自行修改上面的指令指向您存放
.flp 文件的地方。要是您没有 FreeBSD 光盘,
您可以到 FreeBSD 的 FTP 站点
tools目录
中下载。如果您在 &unix; 系统上制作软盘(例如其它 FreeBSD 机器),
您可以使用 &man.dd.1; 命令来将映像文件写到软盘中。
如果您用 FreeBSD,可以执行下面的命令:&prompt.root; dd if=boot.flp of=/dev/fd0在 FreeBSD 中,/dev/fd0
指的是第一个软驱(即 A: 驱动器);
/dev/fd1 是 B:
驱动器,依此类推。其它的 &unix; 系统可能会用不同的的名称,
这时您就要查阅该系统的说明文件。您现在可以安装 FreeBSD 了开始安装默认情况下, 安装过程并不会改变任何您硬盘中的数据,
除非您看到下面的讯息:Last Chance: Are you SURE you want continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!在看到这最后的警告讯息前您都可以随时离开,
安装程序界面不会变更您的硬盘。如果您发现有任何设定错误,
这时您可以直接将电源关掉而不会造成任何伤害。开机启动引导 &i386; 系统从电脑尚未开机开始说起将电脑电源打开。刚开始的时候它应该会显示进入系统设置菜单或
BIOS 要按哪个键,常见的是 F2、
F10、Del 或
AltS。不论是要按哪个键,请按它进入 BIOS 设置画面。
有时您的计算机可能会显示一个图形画面,典型的做法是按
Esc 将关掉这个图形画面,
以使您能够看到必要的设置信息。找到设置开机顺序的选项,它的标记为 Boot Order
通常会列出一些设备让您选择,例如:Floppy、
CDROM、First Hard Disk
等等。如果您要用软盘安装,请确定选到 floppy disk;
如果您要用光盘安装,请选择 CDROM。为了避免疑惑,
请参考您的主板说明手册。储存设定并离开,系统应该会重新启动。如果您用软盘安装,请将在
一节中制作好的第一张引导盘,里面包含kern.flpboot.flp 文件的那张盘,
放入软盘驱动器中。如果您是从光盘安装, 那么开机后请将
FreeBSD 光盘放入光驱中。如果您开机后如往常一样并没有从软盘或光盘引导,请检查:是不是软盘或光盘太晚放入面错失开机引导时间。 如果是,
请将它们放入后重新开机。BIOS 设定不对,请重新检查 BIOS 的设定。您的 BIOS 不支持从这些安装介质引导。FreeBSD 即将启动。如果您是从光盘引导,
您会见到类似下面的画面:Booting from CD-Rom...
CD Loader 1.2
Building the boot loader arguments
Looking up /BOOT/LOADER... Found
Relocating the loader and the BTX
Starting the BTX loader
BTX loader 1.00 BTX version is 1.01
Console: internal video/keyboard
BIOS CD is cd0
BIOS drive C: is disk0
BIOS drive D: is disk1
BIOS 639kB/261120kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d]
\如果您从软盘启动, 则应看到类似下面的画面:Booting from Floppy...
Uncompressing ... done
BTX loader 1.00 BTX version is 1.01
Console: internal video/keyboard
BIOS drive A: is disk0
BIOS drive C: is disk1
BIOS 639kB/261120kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/kernel text=0x277391 data=0x3268c+0x332a8 |
Insert disk labelled "Kernel floppy 1" and press any key...请根据提示将
boot.flp 软盘取出, 插入
kern1.flp 这张盘, 然后按
Enter。 您只需从第一张软盘启动,
然后再需要时根据提示插入其他软盘就可以了。不论是从软盘或光盘引导, 接下来都会进入 &os;
引导加载器菜单:您可以等待十秒, 或按 Enter。引导 Alpha 系统Alpha从电脑尚未打开电源开始。打开电脑电源并等待屏幕上出现开机提示信息。如您需要制作用于安装的软盘,请参考
,
将其中一张制作为第一片引导盘,其中包含
boot.flp。将这张软盘插进软驱,
并输入下列命令,以便从软盘启动
(请视实际情况修改命令中的软驱盘符):>>>BOOT DVA0 -FLAGS '' -FILE ''如果您要从光盘引导,
请将光盘放入光驱中然后输入下列命令开始安装
(请视情况修改命令中的光驱盘符):>>>BOOT DKA0 -FLAGS '' -FILE ''然后 FreeBSD 就会启动。如果您从软盘引导,
到某个阶段您会看到下面的信息:Insert disk labelled "Kernel floppy 1" and press any key...此时应按照提示取出
boot.flp 软盘, 换上
kern1.flp 软盘, 然后按
Enter 键。不论从软盘或光盘引导,您都会看到下面这段信息:Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [kernel] in 9 seconds... _您可以等待 10 秒或是按 Enter 跳过。
之后就会进入内核设定菜单。引导 &sparc64;多数 &sparc64; 系统均配置为从硬盘自动引导。
如果希望安装 &os;,就需要从网络或 CDROM 启动了,
这需要首先进入 PROM (OpenFirmware)。要完成这项工作,首先需要重启系统,并等待出现引导消息。
具体的信息取决于您使用的型号,不过它应该会是类似下面这样:Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.如果您的系统此时开始了从硬盘引导的过程,则需要按下
L1A
或
StopA,
或者在串口控制台上发送 BREAK
(例如, 在 &man.tip.1; 或 &man.cu.1; 中是
~#) 以便进入 PROM 提示符。
它应该是类似下面这样:ok ok {0} 这是在只有一颗
CPU 的系统上的提示。这是用于 SMP 系统的选项, 这里的数字,
是系统中可用的 CPU 数量。这时, 将 CDROM 插入驱动器, 并在 PROM 提示符后面,
输入 boot cdrom。查看设备探测的结果前面屏幕显示的最后几百行字会存在缓冲区中以便您查阅。要浏览缓冲区,您可以按下 Scroll Lock 键,
这会开启画面的卷动功能。然后您就可以使用方向键或
PageUp 、PageDown 键来上下翻阅。
再按一次 Scroll Lock 键将停止画面卷动。在您浏览的时候会看到类似
的画面。
真正的结果依照您的电脑装置而有所不同。请仔细检查探测结果以确定 FreeBSD 找到所有您期望出现的设备。
如果系统没有找到设备, 则不会将其列出。
定制内核
能够让您为系统添加默认的
GENERIC 内核所不支持的设备, 如声卡等。在 &os; 6.2 和更高版本中, 在探测完系统设备之后,
将显示 。
请使用光标键来选择国家或地区。 接着按 Enter,
系统将自动设置地区及键盘映射。 您也可以很容易地退出
sysinstall 程序并从头来过。在主界面使用方向键选择 Exit Install 您会看到
如下的信息: User Confirmation Requested
Are you sure you wish to exit? The system will reboot
(be sure to remove any floppies/CDs/DVDs from the drives).
[ Yes ] No如果 CDROM 还留在光驱里,而且选择了
&gui.yes;, 则安装程序将重新启动。如果您是从软盘启动, 则在重启系统之前,
需要将 boot.flp 软盘取出。介绍 Sysinstallsysinstall 是 FreeBSD
项目所提供的安装程序。它以 console(控制台)为主,
分为多个菜单及画面让您配置及控制安装过程。sysinstall 菜单画面由方向键、
Enter、Tab、Space,
以及其它按键所控制。在主画面的 Usage 菜单有这些按键的说明。要查看这些说明,请将光标移到 Usage
项目,然后 [Select] 按键被选择,
,然后按下
Enter 键。安装画面的使用说明会显示出来,阅读完毕请按
Enter 键回到主画面。选择 Documentation(说明文件) 菜单用方向键从主菜单选择 Doc 条目然后按
Enter键。这将会进入说明文件菜单。阅读这些说明文件很重要。要阅读一篇文章,请用方向键选取要阅读的文章然后按
Enter 键。阅读中再按一下 Enter
就会回到说明文件画面。若要回到主菜单,用方向键选择 Exit
然后按下 Enter 键。选择键盘对应(Keymap)菜单如果要改变键盘按键的对应方式,
请在主菜单选取 Keymap
然后按 Enter 键。一般情况下不改变此项,
除非您使用了非标准键盘或非美国键盘。您可以使用上下键移动到您想使用的键盘对应方式,
然后按下 Space 键以选取它;再按
Space 键可以取消选取。当您完成后,
请选择 &gui.ok; 然后按 Enter 键。这一屏幕只显示出部分列表。选择 &gui.cancel;
按 Tab 键将使用默认的键盘对应,
并返回到主菜单安装选项设置画面选择 Options 然后按
Enter 键。预设值通常可以适用于大部分的使用者,您并不需要改变它们。
版本名称要根据安装的版本进行变化。目前选择项目的描述会在屏幕下方以蓝底白字显示。
注意其中有一个项目是
Use Defaults(使用默认值)
您可以由此项将所有的设定还原为预设值。可以按下 F1 来阅读各选项的说明。按 Q 键可以回到主画面。开始进行标准安装Standard(标准) 安装适用于那些 &unix;
或 FreeBSD 的初级使用者。用方向键选择
Standard 然后按
Enter 键可开始进入标准安装。分配磁盘空间您的第一个工作就是要分配 FreeBSD 用的硬盘空间以便
sysinstall 先做好一些准备。
为了完成这个工作,您必须先对 FreeBSD
如何找到磁盘信息做一个了解。BIOS 磁盘编号当您在系统上安装配置 FreeBSD 之前,
有一个重要的事情一定要注意,尤其是当您有多个硬盘的时候。DOSMicrosoft Windows在 pc 架构,当您跑像 &ms-dos; 或 µsoft.windows;
这种跟 BIOS 相关的操作系统的时候,BIOS 有能力改变正常的磁盘顺序,
然后这些操作系统会跟着 BIOS 做改变。这让使用者不一定非要有所谓的
primary master 硬盘开机。
许多人发现最简单而便宜备份系统的方式就是再去买一块一模一样的硬盘,
然后定期将数据从第一块硬盘复制到第二个硬盘,使用
Ghost
或 XCOPY。所以,当第一个硬盘死了,
或者是被病毒破坏,或者有坏轨道,
他们可以调整 BIOS 中的开机顺序而直接用第二块硬盘开机。
就像交换硬盘的数据线,但是无需打开机箱。SCSIBIOS比较昂贵,配有 SCSI 控制卡的系统通常可以延伸 BIOS
的功能来让 SCSI 设备 (可达七个) 达到类似改变顺序的功能。习惯于使用这种方式的使用者可能会感到惊讶,
因为在 FreeBSD 中并非如此。FreeBSD 不会参考 BIOS,
而且也不知道所谓的 BIOS 逻辑磁盘对应
是怎么回事。这会让人感觉很疑惑,
明明就是一样的硬盘而且资料也完全从另一块复制过来的,
结果却没办法像以前那样用。当使用 FreeBSD 以前,请将 BIOS 中的硬盘开机顺序调回正常的顺序,
并且以后不要再改变。 如果一定要交换硬盘顺序, 那请用硬件的方式,
打开机箱并调整调线。范例:Bill 和 Fred 的安装历险Bill 替 Fred 把旧的 Wintel 的机器装上了 FreeBSD。
他装了一台 SCSI 硬盘,ID 是 0,然后把 FreeBSD 装在上面。Fred 开始使用他新的 FreeBSD 系统;但是过了几天,
他发现这旧的 SCSI硬盘发生了许多小问题。之后,
他就跟 Bill 说起这件事。又过了几天,Bill 决定是该解决问题的时候了,
所以他从后面房间的硬盘 收藏
中找出了一个一模一样的硬盘,并且经过表面测试后显示这块硬盘没有问题。
因此,Bill 将它的 ID 调成 4,然后安装到 Fred 的机器,
并且将资料从磁盘 0 复制到磁盘 4。现在新硬盘装好了,
而且看起来好像一切正常;所以,Bill 认为现在应该可以开始用它了。
Bill 于是到 SCSI BIOS 中设定 SCSI ID 4 为开机盘,用磁盘 4
重新开机后,一切跑得很顺利。继续用了几天后,Bill 跟 Fred 决定要来玩点新的:
该将 FreeBSD 升级了。Bill 将 ID 0 的硬盘移除 (因为有问题)
并且又从收藏区中拿了一块一样的硬盘来。然后他用 Fred
神奇的网络 FTP 磁盘将新版的 FreeBSD 安装在这块硬盘上;
安装过程没什么问题发生。Fred 用了这新版本几天后,觉得它很适合用在工程部门…
是时候将以前放在旧系统的工作资料复制过来了。 因此,
Fred 将 ID4 的 SCSI 硬盘 (里面有放着旧系统中复制过来的最新资料)
mount 起来,结果竟然发现在 ID4 的硬盘上,
他以前的所有资料都不见了!资料跑到哪里去了呢?当初 Bill 将 ID0 硬盘的资料复制到 ID4 的时候,
ID4 即成为一个 新的副本。
而当他调 SCSI BIOS 设定 ID4 为开机盘,想让系统从 ID4 开机,
这其实只是他自己笨,因为大部分的系统可以直接调 BIOS 而改变开机顺序,
但是 FreeBSD 却会把开机顺序还原成正常的模式,因此,Fred 的 FreeBSD
还是从原来那块 ID0 的硬盘开机的。所有的资料都还在那块硬盘上,
而不是在想象之中的 ID4 硬盘。幸运的是, 在我们发现这件事的时候那些资料都还在,
我们将这些资料从最早的那块 ID0 硬盘取出来并交还给 Fred,
而 Bill 也由此了解到计算机计数是从 0 开始的。虽然我们这里的例子使用 SCSI 硬盘,
但是相同的概念也可以套用在 IDE 硬盘上。使用 FDisk 创建分区如果不再做改变,数据将会写进硬盘。如果您犯了一个错误想重新开始,
请选择 sysinstall
安装程序的退出按钮(exit)。或按 U 键来
Undo 操作。 如果您的操作没有结果,
您总可以重新启动您的计算机来达到您的目的。当您在 sysinstall
主菜单选择使用标准安装后,您会看到下面的信息: Message
In the next menu, you will need to set up a DOS-style ("fdisk")
partitioning scheme for your hard disk. If you simply wish to devote
all disk space to FreeBSD (overwriting anything else that might be on
the disk(s) selected) then use the (A)ll command to select the default
partitioning scheme followed by a (Q)uit. If you wish to allocate only
free space to FreeBSD, move to a partition marked "unused" and use the
(C)reate command.
[ OK ]
[ Press enter or space ]如屏幕指示,按 Enter 键,
然后您就会看到一个列表列出所有在探测设备的时候找到的硬盘。
范例显示的是有找到两个 IDE 硬盘的情形,这两个硬盘分别为
ad0 和 ad2。您可能正在奇怪,为什么 ad1 没有列出来?
为什么遗失了呢?试想,如果您有两个 IDE 硬盘,一个是在第一个 Primary master,
一个是 Secondary master,这样会发生什么事呢? 如果 FreeBSD
依照找到的顺序来为他们命名,如 ad0 和
ad1 那么就不会有什么问题。但是,现在问题来了。如果您现在想在 primary slave 加装第三个硬盘,
那么这个硬盘的名称就会是 ad1,之前的
ad1 就会变成 ad2。
这会造成什么问题呢?因为设备的名称
(如 ad1s1a)是用来寻找文件系统的,
因此您可能会发现,突然,您有些文件系统从此无法正确地显示出来,
必须修改 FreeBSD 配置文件(译注:/etc/fstab)才可以正确显示。为了解决这些问题,在配置内核的时候可以叫 FreeBSD 直接用 IDE
设备所在的位置来命名,而不是依据找到的顺序。使用这种方式的话,
在 secondary master 的 IDE 设备就 永远是ad2,即使您的系统中没有
ad0 或 ad1
也不受影响。此为 FreeBSD 内核的默认值,这也是为什么上面的画面只显示
ad0 和 ad2 的原因。
画面上这台机器的两颗硬盘是装在 primary 及 secondary 的 master 上面;
并没有任何一个硬盘安装在 slave 插槽上。您应该选择您想安装 FreeBSD 的硬盘,然后按下 &gui.ok;。之后
FDisk 就会开始,您会看到类似
的画面。FDisk 的显示画面分为三个部分。第一部分是画面上最上面两行,显示的是目前所选择的硬盘的信息。
包含它的 FreeBSD 名称、硬盘分布以及硬盘的总容量。第二部分显示的是目前选择的硬盘上有哪些分区,
每个分区的开始及结束位置、所占容量、FreeBSD 名称、
它们的描述以及类别(sub-type)。此范例显示有两个未使用的小分区,
还有一个大的 FAT 分区,
(很可能是 &ms-dos; 或 &windows; 的 C: ),
以及一个扩展分区(在 &ms-dos; 或 &windows;
里面还可以包含逻辑分区)。第三个部分显示 FDisk 中可用的命令。接下来要做的事跟您要怎么给您的硬盘分区有关。如果您要让 FreeBSD 使用整个硬盘(稍后您确认要
sysinstall
继续安装后会删除所有这个硬盘上的资料),那么您就可以按
A 键(Use Entire Disk )
目前已有的分区都会被删除,取而代之的是一个小的,标示为
unused 的分区,以及一个大的 FreeBSD 分区。之后,
请用方向键将光标移到这个 FreeBSD 分区,然后按 S
以将此分区标记为启动分区。 您会看到类似
的画面。注意,在
Flags 栏中的 A
记号表示此分区是 激活 的,
因而启动将从此分区进行。要删除现有的分区以便为 FreeBSD 腾出空间,
您可以将光标移动到要删除的分区后按 D 键。
然后就可按 C 键,
并在弹出的对话框中输入将要创建的分区的大小。
输入合适的大小后按 Enter 键。
一般而言, 这个对话框中的初始值是可以分配给该分区的最大值。
它可能是最大的邻接分区或未分配的整个硬盘大小。如果您已经建立好给 FreeBSD 的分区
(使用像 &partitionmagic;类似的工具),
那么您可以按下 C 键来建立一个新的分区。同样的,
会有对话框询问您要建立的分区的大小。完成后,按 Q 键。您的变更会存在
sysinstall 中,
但是还不会真正写入您的硬盘。安装多重引导在这步骤您可以选择要不要安装一个多重引导管理器。
一般而言,如果碰到下列的情形,
您应该选择要安装多重引导管理程序。您有一个以上的硬盘,并且 FreeBSD
并不是安装在第一个硬盘上。除了 FreeBSD,您还有其它的操作系统安装在同一块硬盘上,
所以您需要在开机的时候选择要进入哪一个系统。如果您在这台机器上只安装一个 FreeBSD 操作系统,
并且安装在第一个硬盘, 那么选择 Standard
安装就可以了。如果您已经使用了一个第三方的多重引导程序,
那么请选择 None。选择好配置后请按 Enter。按下 F1
键所显示的在线说明中有讨论一些操作系统共存可能发生的问题。在其它硬盘上创建分区如果您的系统上有一个以上的硬盘,
在选择完多重引导管理程序后会再回到选择硬盘的画面。
如果您要将 FreeBSD 安装在多个硬盘上,那么您可以在这里选择其它的硬盘,
然后重复使用 FDisk 来建立分区。如果您想让 FreeBSD 来管理其它的硬盘,
那么两个硬盘都必须安装 FreeBSD 的多重引导管理程序。Tab 键可以在您最后选择的硬盘、 &gui.ok;
以及 &gui.cancel; 之间进行切换。用 Tab 键将光标移动到 &gui.ok;
然后按 Enter 键继续安装过程。使用 bsdlabel
创建分区您现在必须在刚刚建立好的 slice 中规划一些 label。
请注意,每个 label 的代号是
a 到 h,另外,习惯上
b、 c 和
d 是有特殊用途的,不应该随意变动。某些应用程序可以利用一些特殊的分区而达到较好的效果,
尤其是分区分散在不同的硬盘的时候。但是,现在您是第一次安装FreeBSD,
所以不需要去烦恼如何分割您的硬盘。最重要的是,
装好FreeBSD然后学习如何使用它。当您对FreeBSD有相当程度的熟悉后,
您可以随时重新安装FreeBSD,然后改变您分区的方式。下面的范例中有四个分区 —
一个是磁盘交换分区,另外三个是文件系统。
上面例子中的数值仅限于有经验的用户使用。
通常我们鼓励用户使用 &os; 分区编辑器中一个叫做
Auto Defaults的自动分区布局功能。如果您要将FreeBSD安装在一个以上的硬盘,
那么您必须在您配置的其它分区上再建立分区。
最简单的方式就是在每个硬盘上建立两个分区,一个是交换分区,
一个是文件系统分区。
为其它磁盘分区分区文件系统大小描述bN/A见描述之前提过,交换分区是可以跨硬盘的。但是,即使
a 分区没有使用,习惯上还是会把交换分区放在
b 分区上。e/diskn剩下的硬盘空间剩下的空间是一个大的分区,最简单的做法是将之规划为
a分区而不是e分区。然而,
习惯上a分区是保留给根目录
(/) 用的。您不一定要遵守这个习惯,但是
sysinstall 会,
所以照着它做会使您的安装比较清爽、干净。
您可以将这些文件系统挂在任何地方,本范例建议将它们挂在
/diskn
目录,n 依据每个硬盘而有所不同,
但是,您喜欢的话也可将它们挂在别的地方。
分区的配置完成后,您可以用sysinstall.
来建立它们了。您会看到下面的信息: Message
Now, you need to create BSD partitions inside of the fdisk
partition(s) just created. If you have a reasonable amount of disk
space (200MB or more) and don't have any special requirements, simply
use the (A)uto command to allocate space automatically. If you have
more specific needs or just don't care for the layout chosen by
(A)uto, press F1 for more information on manual layout.
[ OK ]
[ Press enter or space ]按下 Enter 键开始FreeBSD分区表编辑器,称做
Disklabel。 显示您第一次执行
Disklabel的画面。
画面分为三个区域。前几行显示的是您正在编辑的硬盘以及您正在建立的 slice
位于哪个分区上。(在这里,Disklabel
使用的是 分区名称 而不是 slice 名)。
此画面也会显示 slice 还有多少空间可以使用;亦即,有多余的空间,
但是尚未指派分区。画面中间区域显示已建立的区区,每个分区的文件系统名称、
所占的大小以及一些关于建立这些文件系统的参数选项。下方的第三区显示在 Disklabel
中可用的按键。Disklabel
您可以自动配置分区以及给它们预设的大小。
这些默认的分区是由内部的分区尺寸算法根据磁盘的大小计算出的。
您可以按 A键使用此功能。您会看到类似
的画面。根据您硬盘的大小,
自动分配所配置的大小不一定合适。但是没有关系,
您并不一定要使用预设的大小。默认情况下会给/tmp
目录一个独立分区,而不是附属在 / 之下。
这样可以避免将一些临时文件放到根目录中(译注:
可能会用完根目录空间)。如果您不想使用默认的分区布局,
则需要用方向键移动光标并选中第一个分区,
然后按 D 来删除它。
重复这一过程直到删除了所有推荐的分区。要建立第一个分区 (a,作为
/ — 根文件系统),
请确认您已经在屏幕顶部选中了正确的 slice,
然后按 C。 接下来将出现一个对话框,
要求您输入新分区的尺寸
(如 所示)。
您可以输入以块为单位的尺寸,或以 M 表示MB、
G 结尾表示GB, 或者 C
表示柱面数的方式来表达尺寸。如果使用此处显示的默认尺寸, 则会创建一个占满整个 slice
空余空间的 partition。如果希望使用前面例子中描述的 partition 尺寸,
则应按 Backspace 键删除这些数字, 并输入
512M, 如
所示。 然后, 按下
&gui.ok;。输入完大小后接着问您要建立的分区是文件系统还是交换空间,如
所示。第一个分区是文件系统,
所以确认选择
FS后按Enter 键。最后,因为您要建立的是一个文件系统,所以必须告诉
Disklabel 这个文件系统要挂接在什么地方,如
所示。根文件系统的挂接点
/, 所以请输入 /,然后按
Enter键。刚刚制作好的分区会显示在画面上。
您应该重复上述的动作以建立其它的分区。当建立交换空间的时候,
系统不会问您要将它挂接在哪里,因为交换空间是不用挂在系统上的。
当您在建立最后一个分区/usr的时候,
您可以直接使用默认的大小,即所有此分区剩余的空间。您最终的 FreeBSD DiskLabel 编辑器画面会类似
, 实际数字按您的选择而有所不同。
按下 Q 键完成分区的建立。选择要安装的软件包选择要安装的软件包安装哪些软件包在很大程度上取决于系统将被用来做什么,
以及有多少可用的磁盘空间。内建的选项包括了运行所需要的最小系统,
到把所有软件包全都装上的常用配置。&unix; 或 FreeBSD
新手通常直接选择一个设定好的软件包就可以了,
而有经验的使用者则可以考虑自己订制安装哪些软件包。按下 F1 可以看到有关软件包的更多选项信息,
以及它们都包含了哪些软件,之后,可以按 Enter
回到软件包选择画面。如果您想要使用图形界面,
则必须选择软件包名称开头是 X 的那些软件包。
对于 X 服务器的配置,
以及选择默认的桌面管理器这样的工作必须在 &os; 安装完成之后才能作。
关于配置 X 服务器的更多资料可以在 找到。默认安装的 X11 版本是
&xorg;。如果需要定制内核, 您还需要选择包含源代码的那个选项。
要了解为什么应该编译和构建新的内核, 请参见
。显然, 包含所有组件的系统是最万能的。
如果磁盘空间足够, 用光标键选择
中的
All
并按 Enter。 如果担心磁盘空间不够的话,
则选择最合适的选项。 不要担心选择的是否是最合适的,
因为其他软件包可以在安装完毕后再加入进来。安装ports软件包当选择完您想要安装的部分后,接着会询问您要不要安装FreeBSD Ports
软件包;Ports软件包可以让您简单方便地安装软件包。Ports本身并不包含编辑
软件所需要的程序源代码,而是一个包含自动下载、编辑以及安装的文档集合。
一章讨论如何使用Ports.安装程序并不会检查您是否有足够的硬盘空间,
在选择这一项之前请先确定您有足够的硬盘空间。
目前 FreeBSD &rel.current; 版本中, FreeBSD Ports Collection
大约占用 &ports.size; 大小的硬盘空间。
对于近期的版本您可能需要更多一些空间来安装他们。 User Confirmation Requested
Would you like to install the FreeBSD Ports Collection?
This will give you ready access to over &os.numports; ported software packages,
at a cost of around &ports.size; of disk space when "clean" and possibly much
more than that if a lot of the distribution tarballs are loaded
(unless you have the extra CDs from a FreeBSD CD/DVD distribution
available and can mount it on /cdrom, in which case this is far less
of a problem).
The Ports Collection is a very valuable resource and well worth having
on your /usr partition, so it is advisable to say Yes to this option.
For more information on the Ports Collection & the latest ports,
visit:
http://www.FreeBSD.org/ports
[ Yes ] No选择 &gui.yes; 将会安装
Ports Collection, 而选择 &gui.no;
则将跳过它。 选好后按 Enter 继续。
此后, 选择安装的软件包的屏幕将再次出现。如果对您的选择感到满意,请选择Exit
退出,确保&gui.ok; 被高亮显示,然后按Enter
继续。选择您要使用的安装介质如果要从 CDROM 或 DVD安装,使用方向键将光标移到
Install from a FreeBSD CD/DVD。确认
&gui.ok; 被选取,然后按 Enter 开始安装程序。如果要使用其它的方式安装,
请选择适当的安装介质然后按照屏幕指示进行安装。按 F1 可以显示安装介质的在线说明。按一下
Enter 可返回选择安装介质画面。FTP安装模式installationnetworkFTP使用FTP安装,有三种方式:主动式(active)FTP、被动式(passive)FTP
或是透过HTTP代理服务器。主动式FTP: 从FTP服务器安装这个选项将会使所有的FTP传输使用 Active模式。
这将无法通过防火墙,但是可以使用在那些比较早期,
不支持被动模式的FTP站。如果您的连接在使用被动(默认值)
模式卡住了,请换主动模式看看!被动模式FTP:通过防火墙从FTP服务器安装FTPpassive mode此选项会让 sysinstall 使用
Passive模式来安装。这使得使用者可以穿过
不允许用非固定TCP PORTS连入的防火墙。 FTP 透过 HTTP 代理服务器: 透过HTTP代理服务器,
由 FTP 服务器安装FTPvia a HTTP proxy此选项会让 sysinstall
通过HTTP协议 (像浏览器一样)连到proxy服务器。
proxy服务器会解释送出的请求,然后通知FTP服务器。
因为通过HTTP协议,所以可以穿过防火墙。
要用这种方式,您必须指定proxy服务器的地址。对于一个 FTP 代理服务器而言,
通常在使用者登入名称中加入您要登入的服务器的用户名,
加在 @ 符号后面。然后代理服务器就会
假装 成一个真的服务器。例如,假设您要从
ftp.FreeBSD.org 安装,通过 FTP
代理服务器 foo.example.com,
使用1234端口。在这种情况下,您可以到 options 菜单,将 FTP username 设为
ftp@ftp.FreeBSD.org,密码设为您的电子邮件地址。
安装介质部分,指定FTP (或是被动式 FTP,如果代理服务器支持的话)
以及URL为
ftp://foo.example.com:1234/pub/FreeBSD。因为ftp.FreeBSD.org的
/pub/FreeBSD 目录会被抓取到
foo.example.com之下,您就可以从
这台 机器 (会从
ftp.FreeBSD.org 抓取文件) 安装。安装确认到此为止,可以开始进行安装了,
这也是您避免更动到您的硬盘的最后机会。 User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!
[ Yes ] No选择 &gui.yes; 然后按下
Enter 确认安装安装所需的时间会根据您所选择的软件、
安装介质以及您电脑的速度而有所不同。
在安装的过程中会有一些信息来显示目前的进度。当您看到下面的信息表示已经安装完成了: Message
Congratulations! You now have FreeBSD installed on your system.
We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.
If you wish to re-enter this utility after the system is up, you may
do so by typing: /usr/sbin/sysinstall.
[ OK ]
[ Press enter or space ]按下 Enter 以进行安装后的配置。选择 &gui.no; 然后按 Enter
会取消安装,不会对您的系统造成更动。您会看到下面的信息: Message
Installation complete with some errors. You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.
[ OK ]产生这个信息是因为什么东西也没有安装,按下 Enter
后会离开安装程序回到主安装界面。从主安装界面可以退出安装程序。安装后的配置安装成功后, 就可以进行进一步的配置了。
引导新安装的 FreeBSD 系统之后, 使用
sysinstall 并选择
Configure。配置网卡如果您之前配置用 PPP 通过 FTP 安装,那么这个画面将不会出现;
正像所说的那样,您可以稍后再做配置。如果想更多的了解网卡或将FreeBSD配置为网关或路由器,请参考
Advanced Networking
的相关文章。 User Confirmation Requested
Would you like to configure any Ethernet or SLIP/PPP network devices?
[ Yes ] No如果要配置网卡,请选择
&gui.yes; 然后按 Enter。
否则请选择 &gui.no; 继续。用方向键选择您要配置的网卡接口,然后按Enter。 User Confirmation Requested
Do you want to try IPv6 configuration of the interface?
Yes [ No ]目录私人区域网络IP协议IPv4已经足够,所以选择
&gui.no; 然后按 Enter。如果想试试新的IP通信协议 IPv6 ,
使用 RA 服务,请选择 &gui.yes;
然后按 Enter。
寻找 RA 服务器将会花费几秒的时间。 User Confirmation Requested
Do you want to try DHCP configuration of the interface?
Yes [ No ]如果您不需要 DHCP (Dynamic Host Configuration Protocol 动态主机配置协议)
,选择 &gui.no; 然后按Enter。选择 &gui.yes; 会执行dhclient,
如果成功,它会自动将网络配置信息填上。更多的信息请参考
。下面的网络配置显示了怎样把以太网设备配置成区域网络网关的角色。使用Tab 键可以在各个栏目之间进行切换,请输入适当
的信息:Host(机器名称)完整的机器名称,例如本例中的 k6-2.example.com 。
Domain(域名)您机器所在的域名称,如本例的 example.comIPv4 Gateway(IPv4网关)输入将数据包传送到远端网络的机器IP地址。
只有当机器是网络上的一个节点时才要输入。
如果这台机器要作为您局域网的网关,
请将此处设为空白。IPv4网关,
也被称作默认网关或默认路由器。域名服务器本地网络中的域名服务器的IP地址。
本例中假设机器所在的网络中没有域名服务器,
所以填入的是ISP提供的域名服务器地址
(208.163.10.2。)IPv4 地址本机所使用的IP地址。本例为
192.168.0.1。子网掩码在这个局域网中所使用的地址块是
192.168.0.0 -
192.168.0.255,
对应的子网掩码是
255.255.255.0。 ifconfig 额外参数设定任何ifconfig命令跟网卡接口有关的参数。
本范例中没有。使用 Tab 键选择 &gui.ok;然后按
Enter键。 User Confirmation Requested
Would you like to Bring Up the ed0 interface right now?
[ Yes ] No选择 &gui.yes; 然后按
Enter 将会将机器的网卡转为启用状态。
机器下次启动的时候即可使用。配置网关 User Confirmation Requested
Do you want this machine to function as a network gateway?
[ Yes ] No如果这台机器要作为本地网络和其它机器之间传送数据包的网关,请选择
&gui.yes; 然后按 Enter。
如果这台机器只是网络上的普通节点,请选择 &gui.no;
并按 Enter 继续。配置网络服务 User Confirmation Requested
Do you want to configure inetd and the network services that it provides?
Yes [ No ]如果选择 &gui.no;, 许多网络服务,如
telnetd 将不会启用。 这样, 远端用户将无法
telnet 进入这台机器。 本机上的用户还是可以
telnet到远端机器的。这些服务可以在安装完成后修改/etc/inetd.conf
配置文件来启用它们。请参阅
以获得更多的信息。如果您想现在就配置这些网络服务,请选择 &gui.yes;,
然后会看到下面的信息: User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd. Enabling
these services may increase risk of security problems by increasing
the exposure of your system.
With this in mind, do you wish to enable inetd?
[ Yes ] No选择 &gui.yes; 继续。 User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available. The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled. Note that services for
IPv6 must be separately enabled from IPv4 services.
Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.
[ Yes ] No选择 &gui.yes; 将允许您添加网络服务
(或将相应网络服务每行开头的 # 除掉即可。)在加入您想启用的服务后,按下 Esc键会出现一个
对话框可以让您离开以及保存修改。启用 SSH 登录SSHsshd User Confirmation Requested
Would you like to enable SSH login?
Yes [ No ]选择 &gui.yes; 便会启用 &man.sshd.8;,
也就是 OpenSSH 服务程序。
它能够让您以安全的方式从远程访问机器。 如欲了解关于
OpenSSH 的进一步详情, 请参见 。匿名 FTPFTPanonymous User Confirmation Requested
Do you want to have anonymous FTP access to this machine?
Yes [ No ]不允许匿名 FTP访问选择默认的 &gui.no; 并按下
Enter 键将仍然可以让在这台机器上有账号的用户访问
FTP。允许匿名 FTP访问如果您选择允许匿名 FTP 存取,
那么网络中任何人都可以使用FTP来访问您的机器。
在启用匿名访问之前应该考虑网络的安全问题。
如果要知道更多有关网络安全的信息,
请参阅 。要启用FTP匿名访问,用方向键选择
&gui.yes; 并按 Enter键。
系统会给出进一步的确认信息: User Confirmation Requested
Anonymous FTP permits un-authenticated users to connect to the system
FTP server, if FTP service is enabled. Anonymous users are
restricted to a specific subset of the file system, and the default
configuration provides a drop-box incoming directory to which uploads
are permitted. You must separately enable both inetd(8), and enable
ftpd(8) in inetd.conf(5) for FTP services to be available. If you
did not do so earlier, you will have the opportunity to enable inetd(8)
again later.
If you want the server to be read-only you should leave the upload
directory option empty and add the -r command-line option to ftpd(8)
in inetd.conf(5)
Do you wish to continue configuring anonymous FTP?
[ Yes ] No这些信息会告诉您 FTP 服务还需要在
/etc/inetd.conf 中启用。
假如您希望允许匿名 FTP 连接, 请参见 。 选择 &gui.yes; 并按
Enter 继续; 系统将给出下列信息:使用 Tab 在不同的信息字段之间切换,
并填写必要的信息:UID用于分配给匿名
FTP 用户的用户 ID。 所有上传的文件的属主都将是这个
ID。Group匿名 FTP 用户所在的组。Comment用于在
/etc/passwd 中描述该用户的说明性信息。FTP Root Directory可供匿名 FTP 用户使用的文件所在的根目录。Upload Subdirectory匿名 FTP 用户上传的文件的存放位置。默认的 FTP 根目录将放在 /var 目录下。
如果您的 /var 目录空间不足以应付您的FTP需求,
您可以将FTP的根目录改为 /usr 目录下的
/usr/ftp 目录。当您对一切配置都满意后,请按
Enter 键继续。 User Confirmation Requested
Create a welcome message file for anonymous FTP users?
[ Yes ] No如果您选择 &gui.yes; 并按下
Enter键,
系统会自动打开文本编辑器让您编辑FTP的欢迎信息。此文本编辑器叫做 ee。
按照指示修改信息文本或是稍后再用您喜爱的文本编辑器来修改。
请记住画面下方显示的文件位置。按 Esc 将弹出一个默认为
a) leave editor的对话框。按
Enter 退出并继续。再次按
Enter 将保存修改。配置网络文件系统网络文件系统 (NFS) 可以让您可以在网络上共享您的文件。
一台机器可以配置成NFS服务器、客户端或两者并存。请参考
以获得更多的信息。NFS 服务器 User Confirmation Requested
Do you want to configure this machine as an NFS server?
Yes [ No ]如果您不想安装网络文件系统,请选择 &gui.no;
然后按 Enter键。如果您选择 &gui.yes; 将会出现一个对话框提醒您必须先建立一个
exports 文件。 Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
[ OK ]按 Enter 键继续。系统会启动文本编辑器让您编辑
exports 文件。按照指示加入真实输出的文件目录或是稍后用您喜爱的编辑器自行编辑。
请记下画面下方显示的文件名称及位置。按下 Esc 键会出现一具对话框,默认选项是
a) leave editor。按下
Enter 离开并继续。NFS 客户端 NFS 客户端允许您的机器访问NFS服务器。 User Confirmation Requested
Do you want to configure this machine as an NFS client?
Yes [ No ]按照您的需要,选择 &gui.yes;
或 &gui.no; 然后按 Enter。配置系统终端系统提供了几个选项可以让您配置终端的表现方式。 User Confirmation Requested
Would you like to customize your system console settings?
[ Yes ] No要查阅及配置这些选项,请选择 &gui.yes;
并按Enter。最常用的选项就是屏幕保护程序了。使用方向键将光标移动到
Saver
然后按 Enter。选择您想使用的屏幕保护程序,然后按 Enter。
之后回到系统终端配置画面。默认开启屏幕保护程序的时间是300秒。如果要更改此时间,请再次选择
Saver 。然后选择
Timeout
并按 Enter键。系统会弹出一个对话框如下:您可以直接改变这个值,然后选 &gui.ok;并按 Enter
键回到系统终端配置画面。选择 Exit 然后按下
Enter 键会回到安装后的配置画面。配置时区配置您机器的时区可以让系统自动校正任何区域时间的变更,
并且在执行一些跟时区相关的程序时不会出错。例子中假设此台机器位于美国东部的时区。
请参考您所在的地理位置来配置。 User Confirmation Requested
Would you like to set this machine's time zone now?
[ Yes ] No选择 &gui.yes; 并按下
Enter键以配置时区。 User Confirmation Requested
Is this machine's CMOS clock set to UTC? If it is set to local time
or you don't know, please choose NO here!
Yes [ No ]这里按照您机器时间的配置,选择 &gui.yes;
或 &gui.no; 然后按 Enter。请选择适当的区域然后按 Enter。选择您所在的国家然后按 Enter。选择您所在的时区然后按 Enter。 Confirmation
Does the abbreviation 'EDT' look reasonable?
[ Yes ] No检查一下时区的缩写是否正确,如果没错,请按 Enter
返回系统安装后的配置画面。Linux 兼容性 User Confirmation Requested
Would you like to enable Linux binary compatibility?
[ Yes ] No选择 &gui.yes; 并按下Enter 键,
将允许您在FreeBSD中执行Linux的软件。安装程序会安装一些为了跟
Linux 兼容的软件包。如果您是通过FTP安装,那么您必须连到网络上。
有时候FTP站并不会包含所有的安装软件包(例如Linux兼容软件包);
不过,稍后您还可以再安装这个项目。配置鼠标此选项可以让您在终端上使用三键鼠标剪贴文字。
如果您用的鼠标是两个按钮,请参考手册 &man.moused.8;;
以取得有关模拟三键鼠标的信息。范例中使用的鼠标不是USB接口。
(例如ps/2或com接口的鼠标): User Confirmation Requested
Does this system have a PS/2, serial, or bus mouse?
[ Yes ] No 如果您使用的是 PS/2、 串口或 Bus 鼠标,请选择 &gui.yes;,
如果是 USB 鼠标, 则应选择
&gui.no; 并按
Enter。使用方向键选择 Type 然后按
Enter。在这个例子中使用的类型是ps/2鼠标,所以可以使用默认的
Auto(自动) 。
您可以用方向键选择合适的项目,确定选择了 &gui.ok;
后按 Enter 键离开此画面。选择 Port
然后按 Enter。假设这台机器用的是ps/2鼠标,您可以采用默认的
PS/2 选项。请选择适当的项目然后按
Enter。选择Enable然后按
Enter 来启动和测试鼠标。鼠标指针可以在屏幕上移动,指明鼠标服务已经正常启用。那么请选择
&gui.yes; 按 Enter键。否则鼠标没
有配置成功 — 选择 &gui.no; 并尝试不同的配置
选项。选择 Exit 并按
Enter 退回到系统安装完成后的配置画面。安装预编译的软件包 (package)Package 是事先编译好的二进制文件, 因此,
这是安装软件的一种便捷的方式。在这里作为例子我们将给出安装一个 package 所需的过程。
如果需要, 还可以在这一阶段加入其他 package。 安装完成之后,
sysinstall 依然可以用来安装其他
package。 User Confirmation Requested
The FreeBSD package collection is a collection of hundreds of
ready-to-run applications, from text editors to games to WEB servers
and more. Would you like to browse the collection now?
[ Yes ] No选择 &gui.yes; 并按
Enter 将进入 package 选择界面:在任何时候, 只有当前安装介质上存在的 package 才可以安装。如果选择了
All 或某个特定的分类,
则系统会列出全部可用的 package。 用光标键移动光棒选中需要的 package,
并按 Enter。系统会显示可供选择的 package:如图所示, 我们选择了 bash shell。
您可以根据需要使用
Space 键来勾选选定的 package。
在屏幕左下角会给出 package 的简短说明。反复按下 Tab 键,
可以在最后选中的 package、 &gui.ok; 和 &gui.cancel; 之间来回切换。当您把需要的 package 都标记为安装之后,
按一下 Tab 切换到 &gui.ok;, 随后按下
Enter 就可以回到 package 选择菜单了。左右方向键可以用于在 &gui.ok;
和 &gui.cancel; 之间进行切换。 这种方法也可以用来选择 &gui.ok;,
随后按下 Enter 也可以回到 package 选择菜单。使用 Tab 和左右方向键选择
[ Install ]
并按 Enter。
接下来需要确认将要安装的预编译包:选择 &gui.ok; 并按下 Enter
就可以开始预编译包的安装了。在这个过程中您会看到安装的相关信息,
直到安装完成为止。请留意观察是否有错误信息出现。在完成预编译包的安装之后, 就进入了最后的配置阶段。
如果您没有选择任何预编译包, 并希望直接进入最后的配置阶段,
则可以选择 Install 来跳过。添加用户和组在安装系统的过程中, 您应添加至少一个用户, 以避免直接以
root 用户的身份登录。
用以保存其用户数据的根分区通常很小,
因此用 root 身份运行程序可能将其迅速填满。
下面的提示信息介绍了这样做可能带来的更大隐患: User Confirmation Requested
Would you like to add any initial user accounts to the system? Adding
at least one account for yourself at this stage is suggested since
working as the "root" user is dangerous (it is easy to do things which
adversely affect the entire system).
[ Yes ] No选择 &gui.yes; 并按
Enter 即可开始创建用户的过程。用箭头键来选择 User 然后按
Enter。下面的描述信息会出现在屏幕的下方,可以使用 Tab
键来切换不同的项目,以便输入相关信息:Login ID新用户的登录名(强制性必须写)UID这个用户的ID编号(如果不写,系统自动添加)Group这个用户的登录组名(如果不写,系统自动添加)Password这个用户的密码(键入这个需要很仔细!)Full name用户的全名(解释、备注)Member groups这个用户所在的组Home directory用户的主目录(如果不写,系统自动添加)Login shell用户登录的shell(默认是/bin/sh)。你可以将登录 shell 由 /bin/sh 改为
/usr/local/bin/bash,
以便使用事先以 package 形式安装的 bash
shell。不要使用一个不存在的或您不能登录的shell。
最通用的shell是使用 BSD-world 的 C shell,
可以通过指定/bin/tcsh来修改。用户也可以被添加到 wheel
组中成了一个超级用户,从而拥有 root
权限。当您感觉满意时,键入 &gui.ok; 键,
用户和组管理菜单将会重新出现。如果有其他的需要, 此时还可以添加其他的组。
此外, 还可以通过
sysinstall 在安装完成之后添加它们。当您完成添加用户的时候,选择Exit
然后键入Enter 继续下面的安装。设置 root 密码 Message
Now you must set the system manager's password.
This is the password you'll use to log in as "root".
[ OK ]
[ Press enter or space ]键入 Enter 来设置 root
密码。密码必须正确地输入两次。 毋庸讳言,
您需要选择一个不容易忘记的口令。
请注意您输入的口令不会回显, 也不会显示星号。New password:
Retype new password :密码成功键入后,安装将继续。退出安装如果您需要设置
其他网络设备,
或需要完成其他的配置工作,
可以在此时或者事后通过 sysinstall
来进行配置。 User Confirmation Requested
Visit the general configuration menu for a chance to set any last
options?
Yes [ No ]选择 &gui.no; 然后键入 Enter
返回到主安装菜单。选择 [X Exit Install] 然后键入
Enter。您可能需要确认是否真的退出安装: User Confirmation Requested
Are you sure you wish to exit? The system will reboot (be sure to
remove any floppies/CDs/DVDs from the drives).
[ Yes ] No选择 &gui.yes; 取出软盘。CDROM 驱动器将被锁定,
直到机器重新启动。CDROM 解锁后就可以取出光盘了。此后系统将重新启动, 因此请留意是否会出现一些错误信息。
进一步的细节, 请参见 。TomRhodes原作 配置其他网络服务如果之前缺少这一领域的经验, 那么配置网络服务对于新手而言,
很可能会是一件很有挑战的事情。 网络, 包括 Internet,
对于包括 &os; 在内的所有现代操作系统而言都至关重要。
因此, 首先对 &os; 提供的丰富的网络性能加以了解会很有帮助。
在安装过程中了解这些知识,
能够确保用户更好地理解他们可以用到的各种服务。网络服务是一些可以接收来自网络上任何地方的人所提交的输入信息的程序。
人们一直都在努力确保这些程序不会做任何 有害的 事情。
不幸的是, 程序员们并不是十全十美的完人,因此,网络服务程序中的漏洞,
便有可能被攻击者利用来做一些坏事。因而,
只启用那些您知道自己需要的服务就很重要了。如果存在疑问,
那么就最好不要在您发现需要它之前启动任何网络服务。
您可以事后通过再次运行 sysinstall
或直接手工配置 /etc/rc.conf
来随时启用这些服务。选择 Networking
选项将下显示一个类似下面的菜单:第一个选项, Interfaces,
已经在前面的 中做过配置,
因此现在可以略过它。选择 AMD 选项,
将添加对于 BSD 自动挂接程序的支持。
这个程序通常会和 NFS 协议
(详情参见下文) 配合使用,以便自动挂载远程文件系统。
启用它不需要在此时进行特殊的额外配置。下一行是 AMD Flags 的参数选项。
选择它之后,会弹出一个让您选择 AMD 参数的子菜单。
菜单中包含一系列的选项:-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map 选项用来设置默认的挂接位置,这里使用的是
/.amd_mnt目录。
指定默认的 日志 文件; 但是,当使用
syslogd 时,所有在日之中记录的活动,
都会发送到系统日志服务去。
/host
用来挂接远程主机上输出的文件系统,而
/net 目录则用来挂接从特定
IP 地址输出的文件系统。
/etc/amd.map 文件定义了用于
AMD 的默认输出选项。FTPanonymous (匿名)Anon FTP 允许匿名
FTP 访问。 选中这个选项,
可以使这台机器成为一台匿名 FTP 服务器。
要注意启用这个选项的安全风险。
系统将使用另外的菜单来说明安全风险和进一步的配置。Gateway
选项可以使将本机配置成为一台以前我们介绍过的网关。
如果您在安装过程中不小心选中了 Gateway,
也可以在这里用这个选项来取消。Inetd
选项用来配置或完全禁用前面讨论过的
&man.inetd.8; 服务程序。Mail 用来配置系统默认的
MTA 或邮件传输代理。
选择这个选项将出现下面的菜单:这里给您提供了一个安装MTA
并将其配置为默认值的机会。MTA
是一种能够将邮件头递给本系统或互联网上的用户的邮件服务。选择 Sendmail
将会安装十分流行的 sendmail 服务,
这也是 &os; 的默认配置。Sendmail local
选项表示将 sendmail 设为默认的
MTA,但禁止其从 Internet 上接收邮件的能力。
此外还有一些其他选项,Postfix 和
Exim 与 Sendmail
的功能类似。 它们两者也可以投递邮件; 不过,
有些用户会喜欢使用它们代替 sendmail
MTA。选择 MTA 或决定不挑选 MTA 之后,
网络配置菜单的下一项将是
NFS client。NFS client 客户端可以使系统通过
NFS 与服务器进行通信。
NFS 服务器通过 NFS
协议可以使其它在网络上的机器来访问自己的文件系统。
如果这台机器要作为一台独立的服务器,这个选项可以保留不选。
如果启用它, 您在之后还需要进行更多的其他配置; 请参见
以了解关于配置客户机和服务器的进一步详情。接下来的 NFS server
选项, 可以让您将本机系统配置为
NFS 服务器。 这会自动将启动 RPC
远程过程调用的信息写入配置文件。 RPC
是一种在多个主机和程序之间进行连接组织的机制。下一项是 Ntpdate 选项,
它能够处理时间同步。 当选择它后,
会出现一个像下面所似的菜单:从这个菜单选择一个离您最近的服务器。
选择较近的服务器,有助于提高时间同步的精度,
因为较远的服务器的连接延迟可能会比较大。下一个选项是 PCNFSD。
这个选项将安装第三方软件包
net/pcnfsd。
它可以用来为无法自行提供 NFS
认证服务的操作系统, 如微软的 &ms-dos; 提供服务。滚屏到下一页看一下其它选项:&man.rpcbind.8;, &man.rpc.statd.8; 和
&man.rpc.lockd.8; 这三个程序是用来提供远程过程调用
(RPC) 服务的。
rpcbind 程序管理 NFS
服务器和客户端的通信, 这是 NFS
正确工作的必要前提。rpc.statd
程序可以和其它主机上 rpc.statd 程序交互,
以提供状态监控。这些状态报告默认情况下会保存到
/var/db/statd.status 文件中。
最后的一项是 rpc.lockd 选项,
如果启用,则将提供文件上锁服务。通常将它和
rpc.statd 联用,
以监视哪些主机会请求对文件执行上锁操作, 以及这种操作的频繁程度。
尽管后两项功能对于调试非常有用, 但它们并不是
NFS 服务器和客户端正常运行所必需的。下一个项目是Routed,这是一个路由程序。
&man.routed.8; 程序管理网络路由表,发现多播路由,
并且支持在网络上与它物理相连的主机来复制它的路由表的请求。
它被广泛地应用在本地网络中并扮演着网关的角色。
当选择它后,一个子菜单会来询问您这个程序的默认位置。
默认的位置已经被定义过, 您可以选择 Enter 键,
也可以按下其它的键。 这时会出来另一个菜单来询问您传递给
routed程序的参数。
默认的是 参数。接下来是 Rwhod 选项,
选中它会启用 &man.rwhod.8; 程序在系统初时化的时候。
rwhod程序通过网络周期性的广播系统
信息或以客户的身份来收集这些信息。
更多的信息可以查看 &man.ruptime.1; 和
&man.rwho.1; 手册页。倒数第二个选项是&man.sshd.8; 程序。它可以通过使用
OpenSSH 来提供安全的shell服务,
我们推荐通过使用它来使用 telnet 和
FTP 服务。 sshd
服务通过使用加密技术来创建从一台机器到另一台机器的安全连接。最后有一个 TCP 扩展选项。
这可以用来扩展在 RFC 1323 和
RFC 1644 里定义的 TCP
功能。当许多主机以高速连接本机时,可能会引起某些连接被丢弃。
我们不推荐使用这个选项,
但是当使用独立的主机时可以从它上面得到一些好处。现在您已经配置完成了网络服务,
您可以滚动屏幕到顶部选择 X Exit
项, 退出进入下一个配置部分, 或简单地选择两次
X Exit 之后选择
[X Exit Install] 来退出
sysinstall。&os; 的启动过程&os;/&arch.i386; 的启动过程如果启动正常,您将看到在屏幕上有很多信息滚动,
最后您会看到登录命令行。您可以通过键入
Scroll-Lock和使用 PgUp
与 PgDn来查看信息,再键入
Scroll-Lock 回到命令行。记录信息可能不会显示(缓冲区的限制)。您可以通过键入
dmesg 来查看。使用您在安装过程中设置的用户名/密码来登录。(例子中使用
rpratt)。除非必须的时候请不要用
root 用户登录。典型的启动信息:(忽略版本信息)Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
Timecounter "i8254" frequency 1193182 Hz
CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU)
Origin = "AuthenticAMD" Id = 0x580 Stepping = 0
Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
AMD Features=0x80000800<SYSCALL,3DNow!>
real memory = 268435456 (262144K bytes)
config> di sn0
config> di lnc0
config> di le0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 256311296 (250304K bytes)
Preloaded elf kernel "kernel" at 0xc0491000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c.
md0: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at
device 10.0 on pci0
ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x1 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
ppbus0: IEEE1284 device found /NIBBLE
Probing for PnP devices on ppbus0:
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33
ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33
acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4
Mounting root from ufs:/dev/ad0s1a
swapon: adding /dev/ad0s1b as swap device
Automatic boot in progress...
/dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation)
/dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation)
/dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation)
/dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS
/dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation)
Doing initial network setup: hostname.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1
ether 52:54:05:de:73:1b
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Additional routing options: IP gateway=YES TCP keepalive=YES
routing daemons:.
additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons: creating ssh RSA host key
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com
creating ssh DSA host key
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com.
setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib
/usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
starting standard daemons: inetd cron sshd usbd sendmail.
Initial rc.i386 initialization:.
rc.i386 configuring syscons: blank_time screensaver moused.
Additional ABI support: linux.
Local package initialization:.
Additional TCP options:.
FreeBSD/i386 (k6-2.example.com) (ttyv0)
login: rpratt
Password:生成 RSA 和 DSA密钥在比较慢的机器上可能要花很长时间。这只是一个
新安装后的首次启动,以后的启动会变得更快一点。如果已经完成 X 服务器的配置, 且指定了默认的桌面窗口管理器,
就可以在命令行键入 startx 来启动它了。&os;/&arch.alpha; 的启动过程Alpha一旦安装完成,您就可以键入下面的命令来启动FreeBSD:>>>BOOT DKC0这是从指定的固定硬件进行引导。如果要使 FreeBSD 下次能够自动启动,
使用下面的命令:>>>SET BOOT_OSFLAGS A>>>SET BOOT_FILE ''>>>SET BOOTDEF_DEV DKC0>>>SET AUTO_ACTION BOOT启动信息跟启动 &i386;机器时差不多。(但不完全一样)FreeBSD 关机正确的关闭操作系统是很重要的。不要仅仅关闭电源。
首先,您需要成为一个超级用户,通过键入
su 命令来实现。然后输入
root 密码。这需要用户是
wheel 组的一名成员。然后,
以root键入
shutdown -h now命令。The operating system has halted.
Please press any key to reboot.当shutdown命令发出后,屏幕上出现
Please press any key to reboot
信息时,您就可以安全的关闭计算机了。如果按下任意一个键,
计算机将重新启动。您也能够使用
CtrlAltDel
组合键来重新启动计算机,但是不推荐使用这个操作。常见问题安装常见问题下面将介绍一些在安装过程中常见的问题,像如何报告发生的问题,
如何双重启动 FreeBSD 和 &ms-dos; 或 &windows;。当您遇到错误时,应该怎么做?由于 PC 结构的限制, 硬件检测不可能 100% 地可靠,
但是有些问题是您可以自己解决的。首先检查一下您使用的 &os; 版本的 硬件兼容说明
文档看看您使用的是否是被支持的硬件。如果您使用的硬件是系统支持的,但仍然遇到了死机或其他问题,
则需要联编 定制的内核。
这能够支持默认的 GENERIC 内核所不支持的设备。
在引导盘上的内核假定绝大多数的硬件,均为按出厂设置的方式配置了
IRQ、 IO 地址和 DMA 通道。 如果您的硬件重新进行了配置,
则可能需要编辑内核配置, 并重新编译内核, 以便告诉
&os; 到哪里去查找设备。除此之外,也可能遇到这种情况吗,即探测某种并不存在的设备时,
会干扰到其他设备的检测并使其失败。
这种情况吗下应禁止驱动程序检测可能导致冲突的设备。有些安装问题可以借助更新硬件的程序来解决,特别是主板的
BIOS 。
大部分的主板制造商都会提供网站给用户下载新的 BIOS
以及提供如何更新的说明。也有许多制造商强烈建议,除非必要否则不要轻易更新
BIOS 。因为更新的过程 可能
会发生问题,进而损害 BIOS 芯片。使用 &ms-dos; 和 &windows; 文件系统目前, &os; 尚不支持通过
Double Space™ 程序压缩的文件系统。
因此,如果希望 &os; 访问数据, 则应首先解压缩这些文件系统。
这项工作,可以通过位于 Start>
Programs >
System Tools 菜单的
Compression Agent 来完成。&os; 可以支持基于 &ms-dos; 的文件系统 (有时被称为 FAT
文件系统)。 &man.mount.msdosfs.8;
命令能够把这样的文件系统挂接到现有的目录结构中,
并允许访问 FAT 文件系统上的内容。 通常我们并不直接使用
&man.mount.msdosfs.8; 程序,它一般会在 /etc/fstab
中的某一行被调用或者被 &man.mount.8; 工具并配合适当的参数来调用。
/etc/fstab中一个典型的例子:/dev/ad0sN /dos msdosfs rw 0 0/dos 目录必须事先存在。
更多关于 /etc/fstab 的细节,
请参阅 &man.fstab.5;。一个使用 &man.mount.8; 挂载 &ms-dos; 文件系统的例子:&prompt.root; mount -t msdosfs /dev/ad0s1 /mnt在此例子中, &ms-dos; 文件系统位于主硬盘的第一个分区。
您的情况可能与引不同,查看命令 dmesg 和
mount 的输出。
它们应该可以让您得到足够的分区信息。&os; 可能使用和其他操作系统不同计数方法来标记磁盘 slices,
特别需要指出的是, &ms-dos;
的扩展分区通常会比 &ms-dos; 主分区被标记为更高的数值。
可以使用 &man.fdisk.8; 工具来帮助测定哪些 slices 属于 &os;
哪些是属于其他的操作系统。NTFS 分区也可以通过类似 &man.mount.ntfs.8;
命令挂接在FreeBSD上。排除故障时的常见问题和解决方法我的系统在引导到探测硬件时发生了死机、 安装过程中行为异常,
或没有检测到软驱。&os; 在启动过程中广泛使用了 i386、
amd64 及 ia64 平台提供的 ACPI 服务来检测系统配置。
不幸的是, 在 ACPI 驱动和主板 BIOS 中存在一些 bug。
如果遇到这种情况, 可以在系统引导时禁用 ACPI,
其方法是在第三阶段引导加载器时使用 hint
hint.acpi.0.disabled:set hint.acpi.0.disabled="1"这一设置会在系统重启之后失效,因此,如果需要的话,您应在
/boot/loader.conf 文件中增加
hint.acpi.0.disabled="1"。
关于引导加载器的进一步详情, 请参见
。在硬盘安装 &os; 之后的首次启动时, 内核加载并检测了硬件,
但给出下列消息并停止运行:changing root device to ad1s1a panic: cannot mount root这是怎么回事? 我该怎么做?另外引导帮助信息里提到的
bios_drive:interface(unit,partition)kernel_name
是什么?系统在处理引导盘非系统中的第一块盘时有一个由来已久的问题。
BIOS 采用的编号方式有时和 &os; 不一致,
而设法将其变为一样则很难正确地实现。因而, 在发生这种情况时,&os;
可能会需要一些帮助才能找到磁盘。有两种常见的情况,
在这些情况下您都需要手工告诉 &os; 根文件系统模块的位置。
这是通过告诉引导加载器 BIOS 磁盘编号、磁盘类型以及 &os;
中的该种磁盘的编号来实现的。第一种情况是有两块 IDE 硬盘, 分别配置为对应 IDE
总线上的主 (master) 设备, 并希望 &os; 从第二块硬盘上启动。
BIOS 将两块硬盘识别为磁盘 0 和磁盘 1, 而 &os;
则将其分别叫做 ad0 和
ad2。&os; 位于 BIOS 磁盘 1, 其类型是
ad 而 &os; 磁盘编号则是 2,
因此, 您应输入:1:ad(2,a)kernel注意, 如果您的主总线上有从设备,
则这一配置是不必要的 (因为这样配置是错的)。第二种情况是从 SCSI 磁盘启动,但系统中安装了一个或多个 IDE
硬盘。这时,&os; 磁盘编号会比
BIOS 磁盘编号小。如果您有两块 IDE 硬盘,
以及一块 SCSI 硬盘,则 SCSI 硬盘将会是 BIOS 磁盘 2,
类型为 da 而 &os; 磁盘编号是 0,
因此, 您应输入:2:da(0,a)kernel来告诉 &os; 您希望从 BIOS 磁盘 2 引导,
而它是系统中的第一块 SCSI 硬盘。 假如只有一块 IDE 硬盘,
则应以 1: 代替。一旦您确定了应选用的正确配置,
就可以用标准的文本编辑器把它写到
/boot.config 文件中了。
除非另行指定, &os; 将使用这个文件的内容,
作为对 boot: 提示的默认回应。在硬盘安装 &os; 之后的首次启动时, Boot Manager
只是给出了 F? 的菜单提示,
但并不继续引导过程。在您安装 &os; 进行到分区编辑器时所设置的磁盘尺寸信息不对。
请回到分区编辑器并指定正确的磁盘尺寸。
这种情况必须重新安装 &os;。如果您无法确定在您机器上的正确尺寸信息,可以用一个小技巧:
在磁盘开始的地方安装一个小的 DOS 分区,
并在其后安装 &os;。 安装程序能够看到这个 DOS 分区,
并利用它推测磁盘的尺寸信息, 这通常会有所帮助。下面的技巧不再推荐使用,
在这里仅供参考: