diff --git a/zh_CN.GB2312/books/handbook/disks/chapter.sgml b/zh_CN.GB2312/books/handbook/disks/chapter.sgml index 565af7caea..854ba69199 100644 --- a/zh_CN.GB2312/books/handbook/disks/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/disks/chapter.sgml @@ -1,3353 +1,3353 @@ 存储 概述 这章介绍了 FreeBSD 中磁盘的使用方法。包括内存盘, 网络附属磁盘和标准的 SCSI/IDE 存储设备,以及使用 USB 的设备。 读完这章,您将了解到: FreeBSD 中用来描述硬盘上数据组织的术语 (partitions and slices)。 如何在您的系统上增加硬盘。 如何配置 &os; 来使用 USB 存储设备。 如何设置虚拟文件系统,例如内存磁盘。 如何使用配额来限制磁盘空间的使用。 如何增加磁盘安全来预防功击。 如何刻录 CD 和 DVD 。 用于备份的多种存储媒介。 如何在 FreeBSD 上使用备份程序。 如何备份到软磁盘。 怎样高效的来使用这些概要信息。 在读这章之前,您应该: 知道怎样去配置和安装新的 FreeBSD 内核 (). 设备命名 下面是在 FreeBSD 上被支持的物理存储设备和它们被分配的设备名。 物理磁盘命名规则 驱动器类型 驱动设备命名 IDE hard drives ad IDE CDROM drives acd SCSI hard drives and USB Mass storage devices da SCSI CDROM drives cd Assorted non-standard CDROM drives mcd for Mitsumi CD-ROM, scd for Sony CD-ROM, matcd for Matsushita/Panasonic CD-ROM &man.matcd.4; 驱动从 2002 年 10 月 5 日已经从 FreeBSD 4.X 分支删去,并且 FreeBSD 5.0 和 5.1 版本也不再包含此驱动。但是从 2003 年 6 月16 日此 驱动又被包含进 FreeBSD 5.X 分支。 Floppy drives fd SCSI tape drives sa IDE tape drives ast Flash drives fla for &diskonchip; Flash device RAID drives aacd for &adaptec; AdvancedRAID, mlxd and mlyd for &mylex;, amrd for AMI &megaraid;, idad for Compaq Smart RAID, twed for &tm.3ware; RAID.
David O'Brien Originally contributed by 添加磁盘 磁盘 添加 假设我们要给一台只有一个磁盘的机器增加一个新的 SCSI 磁盘。首先 需要关掉计算机,然后按操作规程来安装驱动器,控制器和驱动程序。由于 各厂家生产的产品各不相同,具体的安装细节不在此文档介绍之内。 root 用户登录。安装完驱动后,检查一下 /var/run/dmesg.boot 有没有找到新的磁盘。在我们 的例子中新增加的磁盘就是 da1,我们从 /1 挂上它。 (如果您正添加一个 IDE 驱动器,在 4.0 版以前的系统里是 wd1,以后的版本的系 统里是 ad1 )。 partitions slices fdisk 因为 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; (在 &os; 4.X 中叫做 &man.disklabel.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; sysinstall adding disks su 使用 <application>Sysinstall</application> 您可以使用 /stand/sysinstall 命令, 选择它的使用菜单来分区和标记一个新的磁盘。需要有 root 权限, 或者直接使用 root 账户登录或者使用 su 命令来切换到根用户。运行 /stand/sysinstall ,然后选择 Configure 菜单。在 FreeBSD Configuration Menu 下,上下滚动, 选择 Fdisk 条目。 <application>fdisk</application> 分区编辑器 进入 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; disklabel -B -w -r da1s1 auto #加上标签 &prompt.root; disklabel -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,4.X 以前的系统要用 wd 专用模式 OS/2 如果您并没有安装其它的操作系统,可以使用 dedicated 模式。记住这种模式可能会弄乱 Microsoft 的操作系统,但不会对它进行破坏。 它不识别找到的 IBM &os2 的 appropriate 分区。 &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; disklabel -Brw da1 auto &prompt.root; disklabel -e da1 # 创建 `e' 分区 &prompt.root; newfs -d0 /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; disklabel /dev/da1 | disklabel -BrR da1 /dev/stdin &prompt.root; newfs /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # 为 /dev/da1e添加一个记录 &prompt.root; mount /1 从 &os; 5.1-RELEASE 版本开始, &man.bsdlabel.8; 程序代替了 老版本的 &man.disklabel.8; 程序。&man.bsdlabel.8; 中大量过时的选项 和参数也被取消。在上面的例子中选项 可以使用 &man.bsdlabel.8;程序来删除。更多的信息,请参考 &man.bsdlabel.8; 手册页。 RAID 软件 RAID Christopher Shumway Original work by Jim Brown Revised by RAIDsoftware RAIDCCD 连接磁盘驱动器配置 (CCD) 选择一个大容量存储比较好的解决方案,最重要的因素是产品的速度、 性能和成本。通常这三者不可能都满足;要获得比较快和可靠的大容量存储 设备,就比较昂贵。但如果将成本降下来,那它的速度或可靠性就会打折扣。 在设计下面描述的系统时,价格被选为最重要的因素,接下来是速度 和性能。这人系统的数据传输速度及大的取决于网络。性能也非常重要, CCD 驱动器上的所有数据都被备份到了 CD-R 盘,可以很容易的对数据进行恢复。 在选择一个大容量的存储解决方案时,第一步是要设计您自己的需求。 如果您的需求更偏重于速度和性能,那么您的解决方案将就不同于上面的设计。 安装硬件 除了 IDE 系统磁盘外,还有三个 Western Digital 30GB、5400 RPM 的 IDE 磁盘构成了大约 90G 的连接磁盘驱动存储空间。最好是每个 IDE 硬盘 都使用一个自己的 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; 支持选项。把这行加入到内核配置文件中,然后重建内核: pseudo-device ccd 4 在 5.X 和以后的版本中,您必须使用下面的行来代替: device ccd 在 FreeBSD 5.X 里,不必指定一系统的 &man.ccd.4; 设备, &man.ccd.4; 设备将自动按需要创建新的 — 设备。 &man.ccd.4; 在FreeBSD 3.0 或以后的版本中也可以作为一个内核模块 来加载 要安装 &man.ccd.4;, 首先需要使用 &man.disklabel.8; 来编辑硬盘: disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto 这儿把整个硬盘创建成 ad1c, ad2cad3c 从 &os; 5.1-RELEASE 开始, &man.bsdlabel.8; 程序代替 了老版本的 &man.disklabel.8; 程序。&man.bsdlabel.8; 中大量过时的选项 和参数也被取消; 在上面的例子中,选项 应该被删掉。 更的信息可以参考 &man.bsdlabel.8; 手册。 下一步是改变 disklable 的类型。也可以使用 &man.disklabel.8; 来编辑: disklabel -e ad1 disklabel -e ad2 disklabel -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) 建立文件系统 ccd0c 的设备节点可能不存在,所以要 创建它,执行下面的命令: cd /dev sh MAKEDEV ccd0 在 FreeBSD 5.0 中,&man.devfs.5; 将自动管理在 /dev, 里的设备结点,所以没有必要使用 MAKEDEV 命令。 现在已给每个磁盘都加上了标签,下面需要建立 &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 卷管理 RAIDsoftware RAID Vinum Vinum 卷管理是一个实现虚拟磁盘的块驱动设备工具。它使磁盘从 块设备的接口和数据映射中独立出来。与传统的存储设备相比,增加了 灵活性、性能和可靠性。 &man.vinum.8; 实现了 RAID-0、RAID-1 和 RAID-5 三种模式,它们即可以独立使用,也可组合使用。 参考 得到更多 &man.vinum.8; 的信息。 硬件 RAID RAID hardware FreeBSD 支持很多硬件 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 您首先需要将磁盘从阵列中移除以便您可以 安全的拆除它: &prompt.root; atacontrol detach 3 换上磁盘 把磁盘作为备用磁盘安装: &prompt.root; atacontrol attach 3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present 重建阵列: &prompt.root; atacontrol rebuild ar0 rebuild 命令挂起直到完成。然而,可以打开另一个终端 (使用 Alt Fn) 通过下面的命令来检查进程: &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 等待操作完成。 Marc Fonvieille Contributed by USB 存储设备 USB disks 到目前为止,有许多外部外部存储解决方案, 例如:通用串行总线 (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 uhcidevice ohci 二者之一即可, 但是两者都加入内核配置文件当中也没有坏外。 不要忘了如果您加入了上面的几行要重新编译和安装内核。 如果您的 USB 设备是一个 CD-R 或 DVD 刻录机, SCSI CD-ROM 驱动程序, &man.cd.4;, 就必须加入内核中通过下面这行: device cd 因为刻录机被看作一个 SCSI 设备drive, 驱动程序 &man.atapicam.4; 不应该在内核配置文件中使用。 在&os; 5.X,中提供了对 USB 2.0 控制器的支持, 在 4.X 分支从 &os; 4.10-RELEASE 后,您应该加入: device ehci 到您的配置文件以提供对 USB 2.0 的支持。注意 &man.uhci.4; 和 &man.ohci.4; 驱动程序仍然需要,如果您想提供对 USB 1.X 的支持。 在 &os; 4.X 上, USB daemon (&man.usbd.8;) 必须能够 检测到正在运行的一些 USB 设备。为了启用它, 添加 usbd_enable="YES" 到您的 /etc/rc.conf 文件里,然后重新启动 计算机。 测试配置 配置好后准备进行测试:插入您的 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 设备上,如果您需要。 如果您要去摘下设备 (在此这前磁盘必须被 unmount), 在系统信息中您能够看到下面的信息: 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; 也是很有益的。 Mike Meyer Contributed by 创建和使用光学介质(CD) CDROMs creating 介绍 CD 与普通的磁盘相比有很多不同的特性。最初它们是不能被用户写入的。 由于没有磁头和磁道移动时的延迟,所以它们可以连续的进行读取。 方便的在两个系统之间进行数据的传输,比起相同大小的存储介质来说。 CD 有磁道,这关系到数据读取时的连续性而不是物理磁盘的性能。 要在 FreeBSD 中制作一个 CD,您要准备好要写到 CD 上的数据文件, 然后根据每个 tracks 写入到 CD。 ISO 9660 文件系统 ISO 9660 ISO 9660 文件系统被设计用来处理这些差异。它通常不会对文件系统作限制。 幸运的是,它提供了一个可扩展机制允许在制作 CD 时越越这些限制, 而同时在不支持这些扩展的系统上仍旧能够进行工作。 sysutils/cdrtools sysutils/ port 包括了 &man.mkisofs.8;, 这是一个可以用来生成包含 ISO 9660 文件系统的数据文件的程序。 他也提供了对于一些扩展的支持选项,下面将详细介绍。 CD burner ATAPI 使用哪个工具来刻录 CD 依赖于 CD 刻录机是 ATAPI 还是其它类型的。ATAPI CD 刻录器使用 burncd 程序,可以在基本系统中找到。SCSI 和 USB CD 刻录机使用 cdrecord 程序,可以 在 sysutils/cdrtools port中找到。 burncd 程序受到一系列支持设备的限制。如果想知道 设备是否被支持,可以查看 支持的 CD-R/RW 驱动器 列表。 CD burner ATAPI/CAM driver 如果您运行的是 &os; 5.X、&os; 4.8-RELEASE 或更高版本, 它将可能使用 cdrecord 和其它工作在一个 ATAPI 硬件 ATAPI/CAM module 为 SCSI 设备。 如果您想使用一个图形界面的 CD 刻录软件, 您可以参考一下 X-CD-RoastK3b。这些工具作为安装包可以从 sysutils/xcdroastsysutils/k3b ports 得到。 X-CD-RoastK3b 需要 ATAPI/CAM module 和 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 的目录树顶部的启动映像的路径。所以, /tmp/myboot/tmp/myboot/boot/cdboot 中保存了一个可启动的 FreeBSD 系统,您应当像下面这样在 /tmp/bootable.iso 中生成一个 ISO9660 文件系统的映像: &prompt.root; mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot 如果内核中已经配置了 vn (FreeBSD 4.X), 或 md (FreeBSD 5.X),就可以挂上文件系统: &prompt.root; vnconfig -e vn0c /tmp/bootable.iso &prompt.root; mount -t cd9660 /dev/vn0c /mnt 在 FreeBSD 4.X, 和 FreeBSD 5.X 中: &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; 手册页得到更多的帮助。 burncd CDROMs burning 如果用的是 ATAPE 的 CD 刻录机,可以使用 burncd  命令来记录您的 CD ISO 映像文件。 burncd 命令是基本  系统的一部分,中以使用 /usr/sbin/burncd 来安装。  用法如下: &prompt.root; burncd -f cddevice data imagefile.iso fixate cddevice 上刻录一份 imagefile.iso 的副本。 默认的设备是 /dev/acd0 (在 &os; 4.X 下则是 /dev/acd0c)。 请参考 &man.burncd.8; 以了解设置写入速度的参数,如何在刻录完成之后自动弹出CD,以及刻录音频数据。 cdrecord 如果没有一个 ATAPI CD 刻录机,必须使用 cdrecord 来刻录您的 CD 。 cdrecord 不是基本系统的一部分;必须 从 sysutils/cdrtools 或适当的 package 安装它。基本系统的变化可能会引起这个程序的错误。可能是由 coaster 引起的。当升级系统时,同时需要升级 port ,或者 如果已升级到 tracking -STABLE ,那么使用 新版本时也要升级 port。 cdrecord 有许多选项,基本用法与 burncd 相似。刻录一个 ISO 9660 映像文件只需这样做: &prompt.root; cdrecord dev=device imagefile.iso 使用 cdrecord 的比较巧妙的方法是找到使用的 。要找到正确的设置,可以使用 cdrecord 标记,这会产生这样的结果: CDROMs burning &prompt.root; cdrecord -scanbus Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 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 被适当的 - 设置,像 中描述的那样。 + 确保 2,0 被适当地设置了, + 具体方法在 中有所描述。 ATAPI 驱动器 ATAPI CD 驱动用 /dev/acddtnn表示每个轨道, 这里 d 是驱动器号, nn 是轨道号,由两位小数位组成,省略前缀零。 所以第一个盘片上的第一个轨道就是 /dev/acd0t01,第二个就是 /dev/acd0t02,第三个就是 /dev/acd0t03,等等。 确保在 /dev 中存在合适的文件。 &prompt.root; cd /dev &prompt.root; sh MAKEDEV acd0t99 在 FreeBSD 5.0 中,&man.devfs.5; 会为您自动创建 并管理 /dev 中的节点, 所以不再需要使用 MAKEDEV 使用 &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 设备。在 &os; 4.X 下面,字符 c 必须被附加到 设备名的结尾处来指明是整个分区, 或者对于 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 (重要!),所以非英语字符被做了有问题的标记。 (如果您正在运行 FreeBSD 4.3 或者以后的版本, CD9660 驱动包含了加载合适的 unicode 换算表的方法。 一些常用编码的模块可以通过 sysutils/cd9660_unicode port 来安装。) 有时候,当您试图挂载 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;。 Marc Fonvieille Contributed by CD burner ATAPI/CAM driver 使用 ATAPI/CAM 驱动 这个驱动允许 ATAPI 设备(CD-ROM, CD-RW, DVD 驱动器等...)通过 SCSI 子系统访问, 这样允许使用像 sysutils/cdrdao 或者 &man.cdrecord.1; 这样的程序。 要使用这个驱动,您需要把下面几行 添加到您的内核配置文件中: device atapicam device scbus device cd device pass 您也需要在您的内核配置文件有 下面几行: device ata 这个应该已经有了。 然后重建,安装您的新内核,重新启动机器。 在启动过程中,您的刻录机会被识别, 就像这样: 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; 手册 页。 Marc Fonvieille Contributed by Andy Polyakov With inputs from 创建和使用光学介质(DVD) DVD burning 介绍 和 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+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; 联机手册。 DVD DVD-Video 刻录 DVD-Video DVD-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; 选项。 DVD DVD+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/newdata DVD+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/zero DVD DVD-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 sitecdwrite mailing list 联接中也可找到。 dvd+rw-mediainfo 命令的输出结果记录或 媒体的问题被做成问题报告。没有这些输出,对你的帮助将会十分困难。 Julio Merino Original work by Martin Karlsson Rewritten by 创建和使用软盘 把数据存储在软盘上有时也是十分有用的。 例如,当没有其它可靠的存储介质或要传递少量的数据到其它的 计算机。 这一章将介绍怎样在 FreeBSD 上使用软盘。 在使用 DOS 3.5 英寸软盘时首要要涉及的就是格式化, 但其概念与其它的软盘格式化极为类似。 格式化软盘 设备 软盘的访问像其它设备一样是通过在 /dev 中的条目来实现的。 访问 raw 软盘在 4.X 和更早的版本,使用 /dev/fdN, 这里 N 标识设备号,通常为 0 , 或 /dev/fdNX, 这里 X 标识为一个字符。 在 5.0 或更新的版本中,简单的使用 /dev/fdN 4.X 以及更早版本的磁盘大小 也有 /dev/fdN.size 这样的设备,这里 size 代表软盘的含量以 KB 为单位。 这个条目用在低级格式化时来确定磁盘的大小。下面的例子就是 1440kB 有时这些条目必须在 /dev 目录中进行重建。 可以这样做: &prompt.root; cd /dev && ./MAKEDEV "fd*" 5.0 以及更新版本的磁盘大小 在 5.0 版本中, &man.devfs.5; 将自动管理在 /dev 目录中的设备,所以不摧荐使用 MAKEDEV 命令。 如果期望得到确定大小的磁盘可以给 &man.fdformat.1; 传递 参数。支持的大小列在 &man.fdcontrol.8; 中,但是建议和工作状态最好的 1440kB 。 格式化 一张软盘在使用这前必须先被低级格式化。 通常卖主已经做过了,但格式化是检测介质完整性的一种好方法。 尽管这有可能会强取大量(或少量)的硬盘大小,但 大部分磁盘都能被格式化设计为 1440kB 。 低级格式化软盘你需要使用 &man.fdformat.1; 命令。这个程序需要设备名作为参数。 要留意一切错误信息,这些信息能够帮助你确定 磁盘的好与坏。 在 4.X 以及更早版本中格式化 使用 /dev/fdN.size 设备来格式化软盘。插入一张新的 3.5 英寸的软盘在你的设备里: &prompt.root; /usr/sbin/fdformat /dev/fd0.1440 在 5.0 以及更新版本中格式化 使用 /dev/fdN 设备来格式化软盘。插入一张新的 3.5 英寸的软盘在你的设备中: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 磁盘标签 经过低级格式化后,你需要给它分配一个标签。 这个磁盘标签以后会被消毁,但是系统却需要它来确定硬盘的大小。 新的磁盘标签将会接管整个磁盘,会包括所有合适的关于软盘的 geometry 信息。 磁盘标签的 geometry 值列在 /etc/disktab中。 你能够使用 &man.disklabel.8; 像下面这样: &prompt.root; /sbin/disklabel -B -r -w /dev/fd0 fd1440 从 &os; 5.1-RELEASE, 开始 &man.bsdlabel.8; 程序代替了旧版本的 &man.disklabel.8; 程序。随着 &man.bsdlabel.8; 一起许多陈旧的选项和参数也被清除了; 在上面的例子中,选项 将被去掉。要想得到更多的信息, 请参考 &man.bsdlabel.8; 手册页。 文件系统 现在对软盘进行高级格式化。 这会在它上面安置一个新的文件系统,可使 FreeBSD 来对它进行读写。 在创建完新的文件系统后,磁盘标签将被消毁,所以如果你想重新格式化磁盘, 你必须重新创建磁盘标签。 软盘的文件系统可以选择 UFS 或 FAT 。 FAT 是通常情况下软盘比较好的选择。 要制作新的文件系统在软盘上,可以使用下面的命令: &prompt.root; /sbin/newfs_msdos /dev/fd0 现在磁盘已经可以进行读取和使用。 使用软盘 要使用软盘,需要先使用 &man.mount.msdos.8; (在 4.X 和更早的版本中) 或 &man.mount.msdosfs.8; (在 5.0 或更新 的版本中)。也可以使用在 ports collection 中的emulators/mtools 程序。 用磁带机备份 tape media 主流的磁带机有 4mm, 8mm, QIC, mini-cartridge 和 DLT。 4mm (DDS: Digital Data Storage) tape media DDS (4mm) tapes tape media QIC tapes 4mm 磁带机取代了 QIC 而成为工作站备份数据在设备面停止了 QIC 设备 的生产。 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 media Exabyte (8mm) tapes 8mm 磁带机是最常见的 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 度缠绕着轴,并抵住读写头,轴适时地旋转,使得磁带具有高密度, 从一端到另一端并可使磁道紧密地分布。 QIC tape media QIC-150 QIC-150 是最常见的磁带机。 QIC 磁带机是最便宜的 正规 备份驱动器。和 8mm or 4mm 比较,QIC 磁带机最高可能要 5 倍的价钱每 GB。 假如您需要六台左右的磁带机,那么 QIC 将是正确的选择。 QIC 是 最常见 的磁带机,每个工作站都会有一台 QIC 磁带机。 QIC 磁带机具有几种不同的存储密度。QIC 磁带机并不安静,读写时的声音都可清 淅地听到。 QIC 磁带机的规格:(6 x 4 x 0.7 inches; 15.2 x10.2 x 1.7 mm)。 数据传输的速度介于 150 kB/s 到 500 kB/s 之间,可存储的空间 从 40 MB 到 15 GB。较新的 QIC 磁带机具有硬件压缩的功能。 QIC 的使用率愈来愈低,渐渐被 DAT 所取代。 数据以磁道的方式记录在磁带上,磁道数及磁道的宽度会根据容量而有所不同。 通常新的磁带机具有的向后兼容的读取功能(通常也具备写入的功能)。对于数据 的安全性,QIC 具有不错的评价。 磁带机在经过 5,000 次的使用后,就该退休了。 DLT tape media DLT 在这一章列出的磁带机中 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 磁带),一次写入两个 磁道。读写头的寿命相当长,每当磁带停止前进,磁带与读写头之间没有相对运动。 AIT tape media AIT AIT 是 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 floppies floppy disks 软磁盘通常是用来备份的设备中不太合适的设备: 这种设备不太可靠,特别是长期使用。 备份和恢复都很慢 它们只有非常有限的存储容量。 然而,如果没有其它的备份数据的方法,那软盘备份总比没有备份要好。 如果必须使用软盘的话,必须确保盘片的质量。软盘在办公室中使用已经有许多 年了。最好使用一些名牌厂商的产品以确保质量。 如何备份数据到软盘 最好的备份数据到软盘的方法是使用 &man.tar.1; 程序加上 选项, 它可以允许数据备份到多张软盘上。 要备份当前目录中所有的文件可以使用这个命令 (需要有 root权限): &prompt.root; tar Mcvf /dev/fd0 * 当第一张盘满的时候, &man.tar.1; 会指示您插入下一张盘,插入第二张盘之后就按回车。 Prepare volume #2 for /dev/fd0 and hit return: 这个步骤可能需要重复很多次,直到这些文件备份完成为止。 可以压缩备份吗 tar gzip compression 不幸的是,&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; 命令会警告您它无法 恢复,即使您不要求它这样做。 备份程序 有三个主要的备份程序 &man.dump.8;、&man.tar.1; 和 &man.cpio.1;。 Dump 和 Restore 备份软件 dump / restore dump restore dumprestore 是 &unix; 传统的备份程序。它以 block 而不是以文件为单位来备份数据、链接或目录。 dump 备份的是设备上的整个文件系统,不能只备份一 一个文件系统的部分或是用到两个以上文件系统的目录树。 dump 不会写文件和目录到磁带机,而是写入包含文件 和目录的原始数据块。 如果在您的 root 目录使用 dump ,将不需要 备份 /home/usr 或其他目录, 因为这些是典型的其他文件系统或符号连接到那些文件系统的加载点。 dump 是最早出现于 AT&T UNIX 的 Version 6 (约 1975)。 默认的参数适用于 9-track 磁带(6250 bpi),所以如果要用高密度的磁带(最高可达 62,182 ftpi),就不能用默认的参数,而要另外指定参数。这些默认值必须在命令行被 修改以更好地利用当前磁带机的功能。 .rhosts rdumprrestore 可以通过网络在另一 台计算机的磁带机上备份数据。这两个程序都是依靠 rcmdruserok 来访问远程的磁带机。因此,运行备份的用户必须要有远程 主机的 .rhosts 访问权。rdumprrestore 的参数必须适用于远程主机(例如,当您从 FreeBSD 连到 一台 SUN 工作站 knomodo 去使用磁带机时,使用: &prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1 要注意的是:必须检查您在使用 .rhosts 时的安全情况。 也可以通过使用 ssh 用一个更安全的方式来使用 dumprestore 通过 <application>ssh</application> 使用 <command>dump</command> &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 通过设置 <application>ssh</application> 环境变量 <envar>RSH</envar> 使用 <command>dump</command> &prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 <command>tar</command> 备份软件 tar &man.tar.1; 也同样是在 AT&T UNIX Version 6 (约 1975)中出现的。 tar 可以直接对文件系统操作。它直接将文件和目录写到 磁带上, tar 不支持像 &man.cpio.1; 那样多的选项,但 tar 不需要用像用 cpio 那样奇怪的 命令行管道。 tar 许多版本的 tar 不支持通过网络备份,而 GNU 版的 tar (FreeBSD 用的就是 GNU 版的)提供与 rdump 相同的语法来使用远程的设备。例如要 tar Sun 工作站 komodo 上一台 Exabyte 磁带机,主使用: &prompt.root; /usr/bin/tar cf komodo:/dev/nsa8 . 2>&1 对于不支持远程设备的版本,可以使用一个管道和 rsh 传送数据给远程的磁带机。 &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b 如果您担心通过网络备份会有安全问题,应当使用 ssh , 而不是 rsh <command>cpio</command> backup software cpio &man.cpio.1; 是 &unix; 最早用来作文件交换的磁带机程序。它有执行字节 交换的选项,可以用几种不同的格式写入,并且可以将数据用管道传给其他程序。 cpio 没办法自动查找目录树内的文件列表,必须通过标准 输入 stdin 来指定。 cpio cpio 不支持通过网络的备份方式。可以使用 pipeline 和 rsh 来传送数据给远程的磁带机。 &prompt.root; for f in directory_list; do find $f >> backup.list done &prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device" 这里的 directory_list 是要备份的目录列表, user@host 结合了将 要执行备份的用户名和主机名,backup_device 是写 入备份的设备(如 /dev/nsa0)。 <command>pax</command> backup software pax pax POSIX IEEE &man.pax.1; 是符合 IEEE/&posix; 标准的程序。多年来各种不同版本 的 tarcpio 间有些不兼容。 为了防止这种情况,并使其标准化,&posix; 出了这套新的工具程序。 pax 尝试可以读写各种 cpiotar 的格式,并可以自己增加新的格式。它的命令 集比 tar 更接近 cpio <application>Amanda</application> backup software Amanda Amanda Amanda (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. 应急恢复程序 在出现灾难前 在遇到灾难前,只需要执行以下四个步骤: disklabel 第一,打出您的每个磁盘驱动器的磁盘标签(例如: disklabel da0 | lpr),文件系统表, (/etc/fstab) ,以及所有启动信息,并将每个拷贝 两份。 fix-it floppies 第二,确定遇到的情况时,用来启动及修复的软盘 (boot.flpfixit.flp) 具有您所有的设备代号。最简单的方法是用软盘启动,然后检查启动信息, 如果设备都被列出,并且可以正常使用,就可以跳到第三步。 否则,必须建立两张传统的可启动软盘,并包含: fdisk, disklabel, 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 cp -f /dev/MAKEDEV /mnt/dev chmod 755 /mnt/dev/MAKEDEV 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 the devices nodes # cd /mnt/dev ./MAKEDEV std ./MAKEDEV da0 ./MAKEDEV da1 ./MAKEDEV da2 ./MAKEDEV sa0 ./MAKEDEV pty0 cd / # # create minimum file system table # cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd < 出现灾难后 主要的问题在于:您的硬件有用吗?由于已经做好了定期的备份工作, 就不必担心软件的问题。 如果硬件已经损坏,首先,必须先将已损坏的硬件换掉。 如果硬件没有问题,再检查一下您的软盘。如果用的是传统的启动盘, 以 single-user 启动 (在出现 boot: 后键入 -s ), 并跳过下面这段。 如果使用的是具有 boot.flpfixit.flp 的启动磁盘,首先用这张磁盘启动。当屏幕 出现安装选单时,选择 Fixit--Repair mode with CDROM or floppy. 。根据屏幕的提示,插入有 fixit.flp 的磁盘, restore ,其他需要用到的程序就会出现在 /mnt2/stand 分别恢复每一个文件系统 mount root partition disklabel newfs 试着 mount 上您的第一个磁盘的 root 分区(例如: mount /dev/da0a /mnt)。假如这个磁盘标签已经损坏,使用 disklabel 来重新分割并分配磁盘标签(利用您以前保留下来的数据)。使用 newfs 来建立文件系统,并重新挂上软盘读写的 root 分区 (mount -u -o rw /mnt)。然后使用备份程序及备份磁带来修复文件系统 (例如: restore vrf /dev/sa0)。最后 Unmount 这个文件系统 (例如: umount /mnt)。对于每个损坏的文件系统都重复一次。 当您的系统正常启动后,将您的数据备份到新的磁带。任何造成数据丢失的 的灾难都可能再次发生。现在花一些时间,也许可以使您免于下次的灾难。 * I Did Not Prepare for the Disaster, What Now? ]]> Marc Fonvieille Reorganized and enhanced by 网络、内存和 File-Backed 文件系统 virtual disks 磁盘 虚拟 除了你的物理磁盘以外,插入你计算机的: 软盘 CDs,硬盘驱动器,等等;其它磁盘格式是不被 FreeBSD - virtual disks支持的。 NFS Coda disks memory 这还包括网络文件系统,例如 Network File System 和 Coda, 基于内存的 文件系统和后备文件系统。 按照你运行的 FreeBSD 版本,你可以使用不同的工具来创建和使用 后备文件系统和内存文件系统。 FreeBSD 4.X 用户可以使用 &man.MAKEDEV.8; 来创建需要的设备。 FreeBSD 5.0 和更新的版本使用 &man.devfs.5; 来创建设备节点,对用户来说是透明的。 FreeBSD 4.X 下的 File-Backed 文件系统 磁盘 file-backed (4.X) 应用程序 &man.vnconfig.8; 可以配置和启用 vnode 伪磁盘设备。 一个 vnode 代表一个文件。这就意味 使用 &man.vnconfig.8; 可以用来创建和操作一个文件系统。 也可以在文件中挂接一个软盘或 CD 映像。 要使用 &man.vnconfig.8;,你需要在内核配置文件中 &man.vn.4; 的支持: pseudo-device vn 挂接一个存在的文件系统映像: 使用 vnconfig 来挂接一个存在的文件系统映像在 FreeBSD 4.X 系统上。 &prompt.root; vnconfig vn0 diskimage &prompt.root; mount /dev/vn0c /mnt 使用 &man.vnconfig.8; 创建一个新的文件系统映像: 使用 <command>vnconfig</command> 创建一个新的 File-Backed 磁盘 &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; vnconfig -s labels -c vn0 newimage &prompt.root; disklabel -r -w vn0 auto &prompt.root; newfs vn0c Warning: 2048 sector(s) in last cylinder unallocated /dev/vn0c: 10240 sectors in 3 cylinders of 1 tracks, 4096 sectors 5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g) super-block backups (for fsck -b #) at: 32 &prompt.root; mount /dev/vn0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/vn0c 4927 1 4532 0% /mnt FreeBSD 5.X 下的 File-Backed 文件系统 磁盘 file-backed (5.X) 在 FreeBSD 5.X 系统中使用应用程序 &man.mdconfig.8;  被用来配置和启用内存磁盘,&man.md.4;,使用 &man.mdconfig.8;你需要在你的内核配置文件中添加 &man.md.4; 模块来支持它: device md &man.mdconfig.8; 命令支持三种类型的内存后备虚拟磁盘: 使用 &man.malloc.9;,来分配内存磁盘,内存磁盘作为文件或作为 备用的交换分区。一种使用方式是在文件中来挂接一个软盘和 CD 映像。 挂接一个存在的文件系统映像: 在 FreeBSD 5.X 中使用 <command>mdconfig</command> 命令来挂接一个存在的文件系统映像。 &prompt.root; mdconfig -a -t vnode -f diskimage -u 0 &prompt.root; mount /dev/md0 /mnt 使用 &man.mdconfig.8; 来创建一个新的文件系统映像: 用 <command>mdconfig</command> 创建一个新的 File-Backed 磁盘 &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; disklabel -r -w md0 auto &prompt.root; newfs md0c /dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes. super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 &prompt.root; mount /dev/md0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4846 2 4458 0% /mnt 如果你没有使用 选项指定一个单位号 &man.mdconfig.8; 将使用 &man.md.4; 自动为它选择一个未使用的设备。 分配给它的单位名将被输出到标准输出设备像 md4。想得到更多的关于 &man.mdconfig.8; 的信息请参考手册页。 从 &os; 5.1-RELEASE 开始, &man.bsdlabel.8; 程序代替了旧版的 &man.disklabel.8; 程序。相应的 &man.bsdlabel.8; 中的许多陈旧的选项和参数也被取消; 在上面的例子中选项 应该被删掉。想获得更多的信息, 请参考 &man.bsdlabel.8; 的手册页。 应用程序 &man.mdconfig.8; 是非常有作的,然而它 需要许多命令行来创建一个 file-backed 文件系统。 FreeBSD 5.0 也提供了一个被称作 &man.mdmfs.8; 的工具, 这个程序配置一个 &man.md.4; 磁盘使用 &man.mdconfig.8;,在它上面安装一个 UFS 文件系统使用 &man.newfs.8;,挂接它使用 &man.mount.8;。例如, 如果你想创建和挂接像上面一样的文件系统映像, 简单的执行下面的步骤: 使用 <command>mdmfs</command> 命令配置和挂接一个 File-Backed 磁盘 &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 4846 2 4458 0% /mnt 如果你使用没有加单位号的 选项, &man.mdmfs.8; 将使用 &man.md.4; 的自动单位号特性来自动为其 选择一个未使用的设备。更详细的 &man.mdmfs.8;,请参考手册页。 FreeBSD 4.X 下的内存后备式文件系统 磁盘 内存文件系统(4.X) &man.md.4; 驱动程序是一个简单有效的手段用来创建 内存文件系统在 FreeBSD 4.X 系统上。&man.malloc.9; 被 用来分配内存。 简单的获得一个文件系统你需要准备,例如: &man.vnconfig.8; FreeBSD 4.X 下的 md 内存磁盘 &prompt.root; dd if=newimage of=/dev/md0 5120+0 records in 5120+0 records out &prompt.root; mount /dev/md0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4927 1 4532 0% /mnt 更多的详情,请参考 &man.md.4; 手册页。 FreeBSD 5.X 下的内存后备式文件系统 磁盘 内存文件系统(5.X) 同样的工具也可以用来创建内存后备式文件系统: &man.mdconfig.8; 或 &man.mdmfs.8;。内存后备文件系统的 内存分配要使用 &man.malloc.9; 来完成。 用 <command>mdconfig</command> 创建一个新的内存后备磁盘 &prompt.root; mdconfig -a -t malloc -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, 256 inodes. with soft updates super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4846 2 4458 0% /mnt 用 <command>mdmfs</command> 创建一个新的内存后备磁盘 &prompt.root; mdmfs -M -s 5m md2 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt 代替使用一个 &man.malloc.9; 后备文件系统,可以使用 swap,正确的替换使用 替换 在命令行 &man.mdconfig.8; 中。&man.mdmfs.8; 程序默认 (没有 选项) 创建一个 swap-based 磁盘。更多的详情,请参考 &man.mdconfig.8; 和 &man.mdmfs.8; 手册页。 从系统中移除内存盘 磁盘 移除内存盘 当一个内存后备式文件系统不再使用时,你应该释放掉系统的资源。 每一件要做的事情就是摘掉文件系统,然后使用 &man.mdconfig.8; 把磁盘从系统中分离出来释放看资源。 例如分离和释放所有的资源使用 /dev/md4 命令: &prompt.root; mdconfig -d -u 4 mdconfig -l 命令可以列出关于配置 &man.md.4; 设备的信息。 在 FreeBSD 4.X 系统中,&man.vnconfig.8; 命令用来分离设备。 例如分离所有的资源使用 /dev/vn4 命令: &prompt.root; vnconfig -u vn4 Tom Rhodes Contributed by 文件系统快照 文件系统 快照 FreeBSD 5.0 提供了一个和 Soft Updates 关联的新功能: 文件系统快照 快照允许用户创建指定文件系统的映像,并把它们当做一个文件来对待。 快照文件必须在文件系统正在使用时创建,一个用户对每个文件系统创建的 快照不能大于20个。活动的快照文件被记录在超级块中,所以它们可以在系统 启动的时候一块进行挂接后摘掉。当一个快照不再需要时,可以使用标准的 &man.rm.1; 使用来使其删除。快照可以以任何顺序进行移除,但所有使用 的快照不可能同时进行移除,因为其它的快照将有可能互相引用一些块。 在初始创建时, 标志 (看 &man.chflags.1; 手册页) 用来确保 root 用户不能用来写快照文件系统。 &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 当快照文件被创建好后,可以用于下面一些目的: 有些管理员用文件快照来进行备份, 因为快照可以被转移到 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 站点 文件系统配额 accounting disk space disk quotas 配额是操作系统的一个可选择的属性,它允许限制用户使用的磁盘空间大小或是 使用的文件数量。这可以防止某个用户占用所有的磁盘空间。 配置系统来启用磁盘配额 在决定使用磁盘配额前,确信磁盘配额已经在内核中配置好了。只要在在内核 中配置文件中添加下面一行就行了: options QUOTA 在默认情况下 GENERIC 内核是不会启用这个功能的, 所以必须配置、重建和安装一个定制的内核。请参考 FreeBSD 内核配置 这章了解更多有关内核配置的信息。 接下来,需要在 /etc/rc.conf 中启用磁盘配额。可以 通过添加下面这行来完成: enable_quotas="YES" disk quotas checking 为了更好的控制配额时的启动,还有另外一个可配置的变量。通常 启动时,集成在每个文件系统上的配额会被配额检查程序 &man.quotacheck.8; 自动检查。配额检查功能能够确保在配额数据库中 的数据正确地反映了文件系统的数 据情况。这是一个很耗时间的处理进程,它会影响系统的启动时间。如果 想跳过这一步,可以在文件 /etc/rc.conf 加入 下面这一行来达到目的: check_quotas="NO" 如果运行的是 3.2-RELEASE 以前的版本,配置比较简单,只需要配置 一个选项,在您的 /etc/rc.conf 中设置下面这行: check_quotas="YES" 最后,要编辑 /etc/fstab 文件,以在每一个 文件系统基础上雇用磁盘配额。这是启用用户和组配额,或同时启用用户 和组配额的地方。 要在一个文件系统上启用每个用户的配额,可以在 /etc/fstab 里添加 选项在要雇用配额文件的系统上。例如: /dev/da1s2g /home ufs rw,userquota 1 2 同样的,要启用组配额,使用 选项来代替 选项。要同时启用用户和组配额,可以这样做: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 默认情况下,配额文件是存放在文件系统的以 quota.userquota.group 命名的根目录下。可以查看 &man.fstab.5; 联机手册了解更多信息。即使联机手册 &man.fstab.5; 说中以为配额文件指定其他 的位置,这里并不推荐这样做,因为不同的配额工具不一定遵循这样的规则。 到这儿,可以用新内核重新启动系统。 /etc/rc 将自动 运行适当的命令来创建最初的配额文件,所以并不需要手动来创建任何零长度的配额 文件。 在通常的操作过程中,并不要求手动运行 &man.quotacheck.8;、 &man.quotaon.8;, 或 &man.quotaoff.8; 命令,然而可能需要阅读与他们的操作 相似的联机手册。 设置配额限制 disk quotas limits 一旦您配置好了启用配额的系统,可以检查一下它们是真的有用。 可以这样做: &prompt.root; quota -v 您应该能够看到一行当前正在使用的每个文件系统启用的磁盘配额 使用情况的摘要信息。 现在可以使用 &man.edquota.8; 命令准备启用配额限制。 有几个有关如何强制限制用户或组可以分配到的磁盘空间大小的选项。 您可以限制磁盘窨的分配,或文件的数量,或两者都有。这些限制中的每 一个最终可分为两类:硬限制和软限制。 hard limit 一个硬限制可能无法被超越。一旦一个用户达到了他们的硬限制,他们 将无法在文件系统中行到更多的配额。例如,如果用户在文件系统上且个 500 blocks 的硬限制,而当前已经分派了490个 blocks ,用户就只能分派 剩下的 10 个 blocks 。如果硬是要分派 11 个 blocks 将会失败。 soft limit 软限制可以被有时间限制性地被越过。这段时间可以被理解为允许限期, 默认是一个星期。如果一个用户延缓时间太长的话,软限制将会变成硬限制, 根本就不允许再继续占用磁盘配额。当用户因到软限制以下时,允许延期将 重新开始计算。 下面是一个运行 &man.edquota.8; 时看到的例子。当 &man.edquota.8; 命令被调用时,会被转移进 EDITOR 环境变量指派的编辑 器中,允许编辑配额限制。如果环境变量没有设置,默认在 vi 编辑器上进行。 &prompt.root; edquota -u test Quotas for user test: /usr: blocks in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: blocks in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) 在每一个启用了磁盘配额的文件系统上,通常会看到两行。一行是 block 限制,另一行是 inode 限制。简单地改变要修改的配额限制的值。 例如,提高这个用户软限制的数值到 500 ,硬限制到 600 : /usr: blocks in use: 65, limits (soft = 50, hard = 75) to: /usr: blocks 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 quotas checking 即可以使用 &man.quota.1; 也可以使用 &man.repquota.8; 命令来检查 配额限制和磁盘使用情况。 &man.quota.1; 命令能够检查单个用户和组的配置 使用情况。只有超级用户才可以检查其它用户的配额和磁盘使用情况。 &man.repquota.8; 命令可以用来了解所有配额和磁盘的使用情况。 下面是一个使用 quota -v 命令后的输出情况: Disk quotas for user test (uid 1002): Filesystem blocks quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 grace period 上面的例子表示在 /usr 文件系统中,这个文件系统 中,这个用户超越了软限制(50 blocks )15个 blocks ,但是他有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; kill -HUP `cat /var/run/inetd.pid` Lucky Green Contributed by
shamrock@cypherpunks.to
加密磁盘分区 disks encrypting FreeBSD 提供了极好的数据保护措施,防止未受权的数据访问。 文件权限和强制访问控制(MAC)(看 ) 可以帮助预防在操作系统处于运行状态和计算机加电时未受权的第三方访问数据。 但是,和操作系统强制受权不相关的是,如果黑客有物理上访问计算机的可能, 那他就可以简单的把计算机的硬件安装到另一个系统上拷贝出敏感的数据。 不管怎样,黑客都有可能取得并获取停机时的硬件, GEOM 基于磁盘的加密 (gbde) 能够保护在计算机文件系统上的数据并防止黑客得到重要的信息。 不像 cumbersome 加密方法只加密个别的文件, gbde 透明的加密整个文件系统。 整个硬盘都是加密过的非明文数据。 在内核中启用 gbde 成为 <username>root</username> 配置 gbde 需要超级用户的权力。 &prompt.user; su - Password: 验证操作系统的版本 &man.gbde.4; 需要 FreeBSD 5.0 或更高的版本。 &prompt.root; uname -r 5.0-RELEASE 在内核配置文件中添加对 &man.gbde.4; 的支持 使用您喜欢的文本编辑器, 在内核配置文件中添加下面一行: options GEOM_BDE 配置,编译,安装 FreeBSD 内核, 这个过程在 中有详细描述。 重新引导进入新的内核。 准备加密整个硬盘 下面这个例子假设您添加了一个新的硬盘在您的系统并将拥有一个单独的加密分区。 这个分区将挂接在 /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/gbde gbde lock 文件包含了 gbde 需要访问的加密分区的信息。 没有 lock 文件, gbde 将不能解密包含在加密分区上的数据。 每个加密分区使用一个独立的 lock 文件。 初始化 gbde 分区 一个 gbde 分区在使用前必须被初始化, 这个初始化过程只需要执行一次: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c &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中。 gbde lock 文件必须和加密分区上的内容一块备份。 当一个 lock 文件被独自删除时, 不能确定一个 gbde 分区上的数据被解密过。 没有 lock 文件, 就是合法的磁盘所有者不经过大量细致的工作也将不能访问经过加密分区上的数据, 这是 &man.gbde.8; 在设计时整体上不支持。 把加密分区和内核进行关联 &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c 在加密分区的初始化过程中您将被要求提供一个密码短语。 新的加密设备将在 /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 文件系统还要快,摧荐使用 选项。 选项在 &os; 5.1-RELEASE 或更新的版本中是默认的选项。 &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 您将被要求提供您在初始化加密 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;。 用 gbde 进行加密保护 &man.gbde.8; 在 CBC 模式上使用 128-bit 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; 子系统, 您不能同时使用 gbdevinum 卷。
diff --git a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml index 08f408eb80..fa85b95a6a 100644 --- a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml @@ -1,966 +1,1146 @@ Murray Stokely Reorganized by Network Servers 概要 本章将覆盖某些在 &unix; 系统上常用的网络服务。话题将会涉及 如何安装、配置、测试和维护多种不同类型的网络服务。本章节中将提 供大量配置文件的样例,期望能够对您有所裨益。 在读完本章之后,您将会知道: 如何管理inetd 如何设置运行一个网络文件系统。 如何配置一个网络信息服务器以共享用户帐号。 如何通过DHCP自动配置网络。 如何配置一个域名服务器。 如何设置Apache HTTP 服务器。 如何设置文件传输(FTP)服务器。 如何使用Samba为 &windows; 客户端设置文件和打印服务。 如何同步时间和日期,以及如何设置使用NTP协议的时间服务器。 在阅读此章节之前,您应当: 理解有关/etc/rc中脚本的基本知识。 熟悉基本网络术语。 懂得如何安装额外的第三方软件()。 Chern Lee Contributed by <application>inetd</application> <quote>超级服务器</quote> 总览 &man.inetd.8; 被称为Internet Super-Server, 因为它管理几个守护程序的链接。提供网络 服务的程序被称为守护进程。inetd 作为一个为其他服务的管理服务器,当一个被inetd 收到后,它将决定连接将前往哪个程序,然后拉起对应的守护进程, 并将socket转交过去。 比起来将所有守护进程以stand-alone模式 运行,运行单个inetd实例可以降低 系统开销。 一般说来,inetd 被用来拉起 其他守护进程,不过有些细碎的协议被直接接管,比如chargenauth,和 daytime 这一部分将通过命令行选项和/etc/inetd.conf 文件来介绍配置inetd 的基础知识。 设置 inetd 通过 /etc/rc.conf 系统进行初始化。inetd_enable 选项默认被设定为 NO,不过可以通过sysinstall打开, 如果选用中等安全的模板。在/etc/rc.conf中设定: inetd_enable="YES"inetd_enable="NO" 可以激活或者禁止inetd在启动时加载。 此外,可以通过inetd_flags把不同的 命令行参数传给inetd 命令行选项 inetd 语法: -d 打开调试选项。 -l 纪录成功的连接 -w 为外部服务打开TCP Wrapping(默认)。 -W inetd的内置服务打开TCP Wrapping (默认)。 -c maximum 指定单个服务的最大并发访问数量,默认为不限。 也可以在此服务的具体配置里面通过改掉。 -C rate 指定单个服务一分钟内能被单个IP地址调用的最大次数, 默认不限。也可以在此服务的具体配置里面通过 改掉。 -R rate 指定单个服务一分钟内能被调用的最大次数,默认为256。 设为0 则允许不限次数调用。 -a 指定绑定的IP地址。此外,可以使用主机名,这样系统就 可以根据主机名对应的IPV4或者IPV6来选择绑定地址。通常当 inetd 在 &man.jail.8; 中运行 的时候指定主机名,这种情况下主机名来自 &man.jail.8; 环 境变量 当使用主机名方式时,如果IPV4和IPV6都会被绑定到服务, 那么,需要在/etc/inetd.conf.中为该服务 的每个对应协议添加一条记录。比如,一个TCP服务需要两条纪录, 一条使用tcp4,另一条使用tcp6 -p 指定用来存放进程ID的文件。 以上选项在/etc/rc.conf中将可以 被inetd_flags开关传递给inetd。 默认情况下,inetd_flags 被置为 -wW,也既是对inetd的内置或外部服务打开TCP wrapping. 对于新手,通常不用去动这些参数,就算它们出现在/etc/rc.conf里头。 inetd而言,所谓外部服务是当 连接请求到来时,被调用并接受连接,启动于inetd之外的守护进程。 反之,内置服务则是那些inetd自己可 以完全处理的了。 <filename>inetd.conf</filename> inetd的配置通过 /etc/inetd.conf文件进行控制。 /etc/inetd.conf内容发生改变,可以 对inetd进程发送一个HangUP信号,以强制 inetd重新读取配置文件,如下所示: 对 <application>inetd</application>发送HangUP信号 &prompt.root; kill -HUP `cat /var/run/inetd.pid` 配置文件中的每一行都是一个独立服务。如果要注释掉该服务,可以在行首加上 #/etc/inetd.conf的格式如下: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments ftpd使用IPv4的例子: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l service-name 指明各个服务的服务名。其服务名必须与/etc/services中列出的一致。 这将决定inetd会监听哪个port。 一旦有新的服务需要添加,必须先在/etc/services里面添加。 socket-type 可以是streamdgramraw或者 seqpacketstream 用在基于连接的,TCP 服务;而dgram被用于服务用于UDP传输协议。 protocol 下列之一: 协议 说明 tcp, tcp4 TCP IPv4 udp, udp4 UDP IPv4 tcp6 TCP IPv6 udp6 UDP IPv6 tcp46 Both TCP IPv4 and v6 udp46 Both UDP IPv4 and v6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] 指明从inetd 里头调用的服务是否可以自己处理socket. socket类型必须使用, 而stream socket daemons, 由于通常使用多线程方式,应当使用 . 通常usually 把多个socket丢给单个服务进程, 而 则 会为每个新的socket生成一个子进程。 使用选项可以设定针对服务, inetd可以派生出来的最大子进程数量。 如果某特定服务需要限定最高10个实例,把/10 放到后头就可以了。 之外,还有一个开关可以限制 来自同一个地方,针对某个服务的最大连接数。这个开关就是: 。 比如,设定该值为10就可以限定单个IP地址去向某服务的连接最大 为每分钟十个。这个对于防止有意或者无意的资源耗尽或者拒绝服 务(DoS)颇有用处。 在这部分,必须选择 则为可有可无。 一个stream-type多线程的服务,如果没有 或者 需要, 一般使用: nowait 同样的服务,如果需要限制最大连接数,则如下: nowait/10 此外,如果要限制每分钟单个IP来访连接为20个,同时最多 派生10个进程,可以如下: nowait/10/20 以上开关都默认被使用在fingerd服务上面, 如下所示: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s user 该开关指定服务将以什么用户身份运行。一般而言,服务运行身份是 root。基于安全目的,可以看到有些服务以 daemon身份,或者是最小特权的 nobody身份运行。 server-program 当连接到来时,执行服务程序的全路径。如果服务是由 inetd内置提供的,以代替。 server-program-arguments 调用到时,该开关 的值通过argv[0]通过传递给服务而工作。 如果命令行为:mydaemon -d,则 mydaemon -d 开关的值。同样的,如果服务是由inetd 内置提供的,这里还是 Security 随安装时候选择的安全模式不同,部分inetd的服务 会被设为默认打开。如果没有确实的需要,禁止它们!只要在/etc/inetd.conf里头 需要禁止的服务前头加上#,然后 对inetd发送hangup信号。某些服务,比如fingerd, 由于对攻击者提供太多信息,可能对任何人都应该禁止。 某些服务在安全上没有考虑,并且有一些连接超时检测设得很长或没有检测机制。 这回允许攻击者慢慢地发送连接,这样可以导致可用资源的消耗。在某些服务上面加上 的限制似乎不错。 默认情况下,TCP wrapping 是打开的。参考 &man.hosts.access.5; 手册,以获得更多关于在各种inetd 调用的服务上设置TCP限制的信息。 杂项 daytimetimeechodiscardchargen, 和 auth 都是inetd内置的服务。 auth服务提供 identity (identidentd)网络服务,并且某种程度上可配置。 参考 &man.inetd.8; 手册获得更多信息。 Tom Rhodes Reorganized and enhanced by Bill Swingle Written by 网络文件系统(NFS) NFS 网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件 一样访问远端系统上的文件。 以下是NFS最显而易见的好处: 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一 台机器上而且可以通过网络访问到。 用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。 诸如软驱,CDROM,和 &iomegazip; 之类的存储设备可以在网络上面被别的机器使用。 这可以减少整个网络上的可移动介质设备的数量。 <acronym>NFS</acronym>是如何工作的 NFS至少有两个主要部分:一台服务器和一 台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了 正常工作,一些进程需要被配置并运行。 在 &os; 5.X上面,portmaprpcbind替换了。而且,在&os; 5.X上面, the user is required to replace every instance of portmap with rpcbind in the forthcoming examples。 服务器必须运行以下服务: NFS server file server unix clients portmap mountd nfsd 服务 描述 nfsd NFS,为来自NFS客户端的 请求服务。 mountd NFS挂载服务,处理&man.nfsd.8;递交过来的请求。 portmap portmap服务允许 NFS客户端查看NFS服务在用的端口。 客户端同样运行一些进程,比如 nfsiodnfsiod处理来自NFS的请求。 这是可选的,而且可以提高性能,对于普通和正确的操作来说并不是必须的。 参考&man.nfsiod.8;手册获得更多信息。 配置<acronym>NFS</acronym> NFS configuration NFS的配置过程相对简单。这个过程只需要 对/etc/rc.conf文件作一些简单修改。 NFS服务器这端,确认/etc/rc.conf 文件里头以下开关都配上了: portmap_enable="YES" nfs_server_enable="YES" mountd_flags="-r" 只要NFS服务被置为enable,mountd 就能自动运行。 在客户端一侧,确认下面这个开关出现在 /etc/rc.conf里头: nfs_client_enable="YES" /etc/exports文件指定了哪个文件系统 NFS应该输出(有时被称为共享)。 /etc/exports里面每行指定一个输出的文件系统和 哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项 开关也可以被指定。有很多开关可以被用在这个文件里头,不过不会在这 里详细谈。您可以通过阅读&man.exports.5; 手册来发现这些开关。 以下是一些/etc/exports的例子: NFS export examples 紧接着的这个例子说明了如何输出一个文件系统,尽管具体设定和您 的环境以及网络配置有关。作为实例,为了输出/cdrom 到三个的例子机器,它们有同样域名(因此他们的域名不大对)或者在您的 /etc/hosts文件里头有纪录。 标志将被输出的文件系统置为只读。由于这个标志,远程系统将无法在被输出 的文件系统上写入任何变动。 /cdrom -ro host1 host2 host3 下面的例子可以输出/home给三个以IP地址方式表示的主机。 对于在没有配置DNS服务器的私有网络里头,这很有用。 此外,the /etc/hosts 文件也可以用以配置主机名;参看 &man.hosts.5; 。 标记允许子目录被作为挂载点。 也就是说,客户端可以根据需要挂载需要的目录。 /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 下面几行输出 /a ,以便两个来自不同域的客户端可以访问文件系统。 标记授权远端系统上的 root 用户在被输出的文件系统上以root身份进行读写。 如果没有特别指定 -maproot=root 标记, 则即使用户在远端系统上是 root 身份, 也不能修改被输出文件系统上的文件。 /a -maproot=root host.example.com box.example.org 为了能够访问到被输出的文件系统,客户端必须被授权。 请确认客户端在您的 /etc/exports 被列出。 /etc/exports 里头,每一行里面,输出信息和文件系统一一对应。 一个远程主机每次只能对应一个文件系统。而且只能有一个默认入口。比如,假设 /usr 是独立的文件系统。这个 /etc/exports 就是无效的: /usr/src client /usr/ports client 一个文件系统,/usr, 有两行指定输出到同一主机, client. 解决这一问题的正确的格式是: /usr/src /usr/ports client The properties of one filesystem exported to a given host must all occur on one line. Lines without a client specified are treated as a single host. This limits how you can export filesystems, but for most people this is not an issue. 下面是一个有效输出列表的例子, /usr and /exports 是本地文件系统: # Export src and ports to client01 and client02, but only # client01 has root privileges on it /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # The client machines have root and can mount anywhere # on /exports. Anyone in the world can mount /exports/obj read-only /exports -alldirs -maproot=root client01 client02 /exports/obj -ro 一旦修改 /etc/exports 了之后, 为了让变动生效,您必须重启 mountd。 可以通过对mountd 进程发送HUP信号重启: &prompt.root; kill -HUP `cat /var/run/mountd.pid` 另外,系统重启动可以让FreeBSD把一切都弄好。尽管如此,重启不是必须的。 以 root 身份执行下面的命令可以搞定一切。 NFS 服务器端: &prompt.root; portmap &prompt.root; nfsd -u -t -n 4 &prompt.root; mountd -r NFS 客户端: &prompt.root; nfsiod -n 4 现在每件事情都应该就绪,以备挂载一个远端文件系统。 在这些例子里头, 服务器名字将是:server ,而客户端的名字将是: client。 如果您只打算临时挂载一个远端文件系统或者只是打算作测试配置正确与否, 只要在客户端以 root 身份执行下面的命令: NFS mounting &prompt.root; mount server:/home /mnt 这条命令会把服务端的 /home 目录挂载到客户端的 /mnt 上。 如果配置正确,您应该可以进入客户端的 /mnt 目录并且看到所有服务端的文件。 如果您打算让系统每次在重启动的时候都自动挂载远端的文件系统,把那个文件系统加到 /etc/fstab 文件里头去。下面是例子: server:/home /mnt nfs rw 0 0 &man.fstab.5; 手册里有所有可用的开关。 实际应用 NFS 有很多实际应用。下面是比较常见的一些: NFS uses 多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。 在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。 这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。 几台机器可以有通用的/usr/ports/distfiles 目录。 这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。 Wylie Stilwell Contributed by Chern Lee Rewritten by 使用 <application>amd</application> 自动挂载 ** 翻译进行中 ** John Lind Contributed by Problems Integrating with Other Systems ** 翻译进行中 ** Bill Swingle Written by Eric Ogren Enhanced by Udo Erdelhoff Network Information System (NIS/YP) ** 翻译进行中 ** Udo Erdelhoff Contributed by Using Netgroups ** 翻译进行中 ** Important Things to Remember ** 翻译进行中 ** NIS Servers That Are Also NIS Clients ** 翻译进行中 ** Greg Sutter Written by - Automatic Network Configuration (DHCP) ** 翻译进行中 ** + 网络自动配置 (DHCP) - Installing and Configuring a DHCP Server ** 翻译进行中 ** + 安装和配置 DHCP 服务器 + + + 这一章包含哪些内容 + + 这一章提供了关于如何在 FreeBSD 系统上使用 ISC + (Internet 软件协会) 的 DHCP 实现套件来架设 DHCP 服务器的信息。 + + DHCP 套件中的服务器部分并没有作为 FreeBSD 的一部分来提供, + 因此您需要安装 + net/isc-dhcp3-server + port 才能提供这个服务。 请参见 + 以了解关于如何使用 ports collection 的进一步详情。 + + + + 安装 DHCP 服务器 + + DHCP + 安装 + + 为了在您的 FreeBSD 系统上进行配置以便作为 DHCP 服务器来使用, + 需要把 &man.bpf.4; 设备编译进内核。 要完成这项工作, 需要将 + device bpf (如果使用 &os; 4.X 的话, 则写作 + pseudo-device bpf) 加入到您的内核配置文件中, + 并重新联编内核。 要得到关于如何联编内核的进一步信息, 请参见 + + + bpf 设备是 FreeBSD 所附带的 + GENERIC 内核中已经联入的组件, + 因此您并不需要为了让 DHCP 正常工作而特地定制内核。 + + + 如果您有较强的安全意识, 应该注意 + bpf 同时也是让听包程序能够正确工作的设备 + (尽管这类程序仍然需要以特权用户身份运行)。 + bpf + 使用 DHCP 所必需的, + 但如果您对安全非常敏感, 您可能会不希望将 + bpf 放进内核, + 直到您真的认为 DHCP 是必需的为止。 + + + 接下来要做的是编辑示范的 + dhcpd.conf, 它由 + net/isc-dhcp3-server port + 安装。 默认情况下, 它的名字应该是 + /usr/local/etc/dhcpd.conf.sample, + 在开始修改之前, 您需要把它复制为 + /usr/local/etc/dhcpd.conf + + + + 配置 DHCP 服务器 + + DHCP + dhcpd.conf + + dhcpd.conf 包含了一系列关于子网和主机的定义, + 下面的例子可以帮助您理解它: + + option domain-name "example.com"; +option domain-name-servers 192.168.4.100; +option subnet-mask 255.255.255.0; + +default-lease-time 3600; +max-lease-time 86400; +ddns-update-style none; + +subnet 192.168.4.0 netmask 255.255.255.0 { + range 192.168.4.129 192.168.4.254; + option routers 192.168.4.1; +} + +host mailhost { + hardware ethernet 02:03:04:05:06:07; + fixed-address mailhost.example.com; +} + + + + 这个选项指定了提供给客户机作为默认搜索域的域名。 请参考 + &man.resolv.conf.5; 以了解关于这一概念的详情。 + + + + 这个选项用于指定一组客户机使用的 DNS 服务器, + 它们之间以逗号分隔。 + + + + 提供给客户机的子网掩码。 + + + + 客户机可以请求租约的有效期, 而如果没有, + 则服务器将指定一个租约有效期, 也就是这个值 (单位是秒)。 + + + + 这是服务器允许租出地址的最大时长。 + 如果客户机请求了更长的租期, 则它将得到一个地址, + 但其租期仅限于 max-lease-time 秒。 + + + + 这个选项用于指定 DHCP 服务器在一个地址被接受或释放时是否应对应尝试更新 + DNS。 在 ISC 实现中, 这一选项是 必须指定的 + + + + 指定地址池中可以用来分配给客户机的 IP 地址范围。 + 在这个范围之间, 以及其边界的 IP 地址将分配给客户机。 + + + + 定义客户机的默认网关。 + + + + 主机的硬件 MAC 地址 (这样 DHCP + 服务器就能够在接到请求时知道请求的主机身份)。 + + + + 指定总是得到同一 IP 地址的主机。 + 请注意在此处使用主机名是对的, 因为 DHCP + 服务器会在返回租借地址信息之前自行解析主机名。 + + + + 一旦您撰写完 + dhcpd.conf, 就可以用下面的命令来启动服务: + + &prompt.root; /usr/local/etc/rc.d/isc-dhcpd.sh start + + 如果未来您需要修改服务器的配置, 请务必牢记发送 + SIGHUP 信号给 + dhcpd不会 + 导致配置文件的重新加载, 而这在其他服务程序中则是比较普遍的约定。 + 您需要发送 SIGTERM 信号来停止进程, + 然后使用上面的命令来重新启动它。 + + + + 文件 + + DHCP + 配置文件 + + + /usr/local/sbin/dhcpd + dhcpd 是静态连接的, 并安装到 + /usr/local/sbin 中。 随 port 安装的 + &man.dhcpd.8; 联机手册提供了关于 + dhcpd 更为详尽的信息。 + + + /usr/local/etc/dhcpd.conf + dhcpd 需要配置文件, + 即 /usr/local/etc/dhcpd.conf + 才能够向客户机提供服务。 这个文件需要包括应提供给客户机的所有信息, + 以及关于服务器运行的其他信息。 此配置文件的详细描述可以在随 port + 安装的 &man.dhcpd.conf.5; 联机手册上找到。 + + + /var/db/dhcpd.leases + DHCP 服务器会维护一个它签发的租用地址数据库, + 并保存在这个文件中, 这个文件是以日志的形式保存的。 + 随 port 安装的 + &man.dhcpd.leases.5; 联机手册提供了更详细的描述。 + + + /usr/local/sbin/dhcrelay + dhcrelay 在更为复杂的环境中, + 可以用来支持使用 DHCP 服务器转发请求给另一个独立网络上的 + DHCP 服务器。 如果您需要这个功能, 需要安装 net/isc-dhcp3-relay port。 + &man.dhcrelay.8; 联机手册提供了更为详尽的介绍。 + + + - Chern Lee Contributed by Domain Name System (DNS) Running <application>named</application> in a Sandbox ** 翻译进行中 ** BIND running in a sandbox Murray Stokely Contributed by Apache HTTP Server ** 翻译进行中 ** web server setting up Apache Murray Stokely Contributed by File and Print Services for µsoft.windows; clients (Samba) ** 翻译进行中 ** Samba server Microsoft Windows file server Windows clients print server Windows clients Overview ** 翻译进行中 ** Tom Hukins Contributed by Clock Synchronization with NTP ** 翻译进行中 ** diff --git a/zh_CN.GB2312/books/handbook/x11/chapter.sgml b/zh_CN.GB2312/books/handbook/x11/chapter.sgml index 5d0b4c2a53..b61d47af4d 100644 --- a/zh_CN.GB2312/books/handbook/x11/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/x11/chapter.sgml @@ -1,1619 +1,1619 @@ Ken Tom Updated for X.Org's X11 server by Marc Fonvieille X Window 系统 概述 FreeBSD 使用 X11 来为用户提供功能强大的图形用户界面。 X11 是一种开放源代码的 X Window 系统实现, 它包括 &xorg;&xfree86;。 &os; 在包括 &os; 4.10-RELEASE 和 &os; 5.2.1-RELEASE 以前的版本中默认安装 &xfree86;, 一种由 The &xfree86; Project, Inc. 发行的 X11 服务。 从 &os; 5.3-RELEASE 开始, 默认并且为官方支持的 X11 改为了 &xorg;, 它是由 X.Org Foundation 开发的 X11 服务。 这章将介绍 X11 的安装和配置, 并着重强调 &xorg; 欲了解 X11 所支持的显示卡等硬件, 请访问 &xorg;&xfree86; 的网站。 在阅读完这一章后,您将会了解: X 视窗系统的不同组件,它们是如何协同工作的。 如何安装和配置 X11。 如何安装和使用不同的窗口管理器。 如何在 X11 中使用 &truetype; 字体。 如何为您的系统设置图形登陆 (XDM)。 在阅读这一章之前,您应该: 知道如何安装额外的第三方应用程序()。 这一章介绍了 &xorg;&xfree86; 两种 X11 服务的安装和配置。 绝大多数时候, 配置文件、 命令句法是完全一样的。 当存在差异时, &xorg;&xfree86; 的写法都会有所体现。 理解 X 对于那些熟悉其他图形环境,比如 µsoft.windows; 或者 &macos; 的用户来说,第一次使用 X 可能会感觉很惊讶。 尽管您不需要了解各种 X 组件的所有细节和它们是如何互相影响的; 然而, 了解一些基本的知识可以让您很好地利用 X 的强大功能。 为什么要使用 X? X 不是第一个为 &unix;而开发的视窗系统,但它是最流行的。 X 的原始开发团队在开发 X 之前就已经在另外一个视窗系统上工作了。 那个系统的名字叫做 W (就是 Window)。X 只是罗马字母中 W 后面 的一个。 X 可以被叫做 X, X Window 系统, X11, 等等。把 X11 称做 X Windows 可能会冒犯某些人; 查看 &man.X.7; 可以了解更多的信息。 X 客户机/服务器模型 X 一开始就是针对网络而设计的,所以 采用了 client-server 模型。在 X 模型中, X server 运行在有键盘,显示器,鼠标的计算机上。 服务器用来管理显示信息,处理来自键盘和鼠标的输入等。 每一个 X 应用程序 (比如 XTerm, 或者 &netscape;) 就是一个 client。 一个 client 给服务器发送信息,如 Please draw a window at these coordinates, 然后服务器就返回处理信息,如 The user just clicked on the OK button 如果您在只有一台计算机的家里或小型办公环境中使用 FreeBSD,您就 需要在同一台计算机上运行 X server和 X client。然而,如果您有很多运行 FreeBSD 的机器,您可以在您的桌面计算机上运行 X server,而在比较高档 的服务器上运行 X 应用程序。在这样的环境中,X server 和 X client 之间的 通信就可以通过网络来进行。 这迷惑了一些人,因为 X 的术语和他们料想的有些不同。 他们以为 X server 是运行在功能强大的大型机上的,而 X client 是运行在他们桌面上的计算机上的。 记住,X server 是有键盘和显示器的那台计算机,而 X client 是那些显示窗口的程序。 并不需要 client 和 server 都运行在同一种操作系统上,或甚至运行在 同一种类型的计算机上。在 µsoft.windows; 或者 Apple 公司的 &macos; 上运行 一个 X server 也是可以的,在它们上面也有很多免费的和商业化的应用程序。 从 &os; 5.3-RELEASE 开始, 随 &os; 一同安装的 X 服务改成了 &xorg;, 它在类似 FreeBSD 的授权下可以免费使用。 此外, 也有一些针对 FreeBSD 的商业 X 服务器。 窗口管理器 X 的设计哲学很像 &unix; 的设计哲学, tools, not policy。这就意味着 X 不会试图去规定任务应该如何 去完成,而是,只给用户提供一些工具,至于决定如何使用这些工具是用户自己的 事情。 这套哲学扩展了 X,它不会规定窗口在屏幕上应该是什么样子,要如何移动鼠标, 什么键应该用来切换窗体 (比如, Alt Tab 按键,在 µsoft.windows; 环境中的作用), 每个窗口的工具条应该 看起来像什么,他们是否应该有关闭按钮等等。 实际上,X 行使了一种叫做 窗口管理器的应用程序的职责。有很多这样的程序可用: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker,等等。每一个窗口管理器 都提供了不同的界面和观感;其中一些还支持 虚拟桌面;有一些允许您可以定制一些键来管理您的桌面; 一些有开始 按钮,或者其他类似的设计;一些有 themeable,通过安装一个 新的主题允许外观的完全改变。这些窗口管理器,还有很多其他的,都可以在 Ports Collection 的 x11-wm 分类目录里找到。 另外,KDEGNOME 桌面环境都有他们自己的窗口管理器 与桌面集成。 每个窗口管理器也有不同的配置机制;有些需要手工来写配置文件, 而另外一些则可以使用 GUI 工具来完成大部分的配置任务,至少 (Sawfish) 有一个用 Lisp 语言来写的配置 文件。 焦点策略 窗口管理器的另一个特性是鼠标的 focus policy。 每个窗口系统都需要有一个选择窗口的方法来接受键盘的输入信息,以及当前 哪个窗口处于可用状态。 您通常比较熟悉的是一个叫做 click-to-focus 的焦点策略。 这是 µsoft.windows; 使用的典型焦点策略,也就是您在一个窗口上点击 一下鼠标,这个窗口就处于当前可用的状态。 X 不支持一些特殊的焦点策略。而是,窗口管理器控制着在什么时候哪个窗口 拥有焦点。不同的窗口管理器支持不同的焦点方案。它们都支持点击即获得焦点, 而且它们中的大多数都支持好几种方案。 最流行的焦点策略: focus-follows-mouse 鼠标指示器下面的窗口就是获得焦点的窗口。这可以不是位于其他所有 窗口顶部的窗口。您可以通过将鼠标移到另一个窗口就可以来改变焦点,您 不需要在它上面点击。 sloppy-focus 这种方式是对 focus-follows-mouse 策略的一个小小扩展。对于 focus-follows-mouse,如果您在根窗口(或桌面背景)上移动鼠标,键盘的 输入也会丢失。对于 sloppy-focus,只有当指针在键入一个新窗口时,窗口 焦点才会发生变化,当退出当前窗口时是不会变化的。 click-to-focus 当前窗口由鼠标点击来选择。窗口被突出显示 , 出现在所有其他窗口的前面。即使指针被移向了另一个窗口,所有的键盘输入 仍会被这个窗口接收。 许多窗口管理器支持其他的策略,与这些相比又有些变化。您可以看具体 窗口管理器的文档。 窗口部件 提供工具而非策略的 X 方法使得在每个应用程序屏幕上看到的窗口部件得到了 大大的扩展。 Widget 只是针对用户接口中所有列举项目的一个术语,它 可以用某种方法来点击或操作;如按钮,复选框,单选按钮,图标,列表框等等。 µsoft.windows; 把这些叫做控件 µsoft.windows; 和苹果公司的 &macos; 都有一个严格的窗口部件策略。 应用程序开发者被建议确保他们的应用程序共享一个普通的所见即所得的用户界面。 对于 X,它并不要求一个特殊的图形风格或一套相结合的窗口部件集。 这样的结果是您不能期望 X 应用程序只拥有一个普通的所见即所得的界面。 有很多的流行的窗口部件集设置,包括来自于 MIT 的 Athena, &motif; (模仿 µsoft.windows; 的窗口风格),OpenLook, 和其他一些窗口部件集。 今天,绝大多数比较新的 X 应用程序将使用一个现代风格的窗口设计, 像 Qt, 用来设计 KDE, 或 GTK+,用来设计 GNOME。 在这样一种窗口系统下,&unix; 桌面的一些所见即所得特性作了一些收敛,以使 初学者感到更容易一些。 安装 X11 &xorg;&xfree86; 都可以安装到 &os; 上。 从 &os; 5.3-RELEASE 开始, &xorg; 成为了 &os; 上的默认 X11 实现。 &xorg; 是由 X.Org Foundation 发行的 X11R6.7 实现。 X11R6.7 基于 &xfree86 4.4RC2 和 X11R6.6 的代码。 The X.Org Foundation 于 2004 年 4月正式发行了 X11R6.7。 如果需要从 ports collection 编译和安装 &xorg; &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean - 想要完整地编译 &xorg; 则需要至少 2GB - 的剩余磁盘空间。 + 要完整地编译 &xorg; 则需要至少 + 4 GB 的剩余磁盘空间。 如果想从 ports collection 中编译和安装 &xfree86; &prompt.root; cd /usr/ports/x11/XFree86-4 &prompt.root; make install clean 另外 X11 也可以直接从 package 来安装。 我们提供了可以与 &man.pkg.add.1; 工具配合使用的 X11 安装包。 如果从远程下载并安装时, &man.pkg.add.1; 请不要指定版本号。 &man.pkg.add.1; 会自动地下载最新版本的安装包。 想要从 package 安装 &xorg;, 简单地输入下面的命令: &prompt.root; pkg_add -r xorg &xfree86; 4.X 也可以用类似的办法安装: &prompt.root; pkg-add -r XFree86 上面的例子介绍了如何安装完整的 X11 软件包, 包括服务器端,客户端,字体等等。 此外, 也有一些单独的 X11 的 ports 和 packages. 这一章余下的部分将会讲解如何配置 X11, 以及如何设置一个高效的桌面环境。 从 <application>&xfree86;</application> 转移到 <application>&xorg;</application> 任何 port 都一样,您应该检查 /usr/ports/UPDATING 文件看看有哪些改变。 这个文件中包含了把您的系统从 &xfree86; 转换到 &xorg; 的说明。 在尝试任何转换之前请使用 CVSup 来更新您的 ports tree。在转换您的 X11 安装前您还需要安装 sysutils/portupgrade /etc/make.conf 中您需要添加变量 X_WINDOW_SYSTEM=xorg。 这样做确保您的系统知道正在使用哪种 X11。 旧的 XFREE86_VERSION 变量已经过时并被 X_WINDOW_SYSTEM 变量所取代。 然后,使用下面的命令: &prompt.root; pkg_delete -f /var/db/pkg/imake-4* /var/db/pkg/XFree86-* &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean &prompt.root; pkgdb -F &man.pkgdb.1; 命令是 portupgrade 软件的一部分, 会更新各种软件包的依赖关系。 - 要完全编译 &xorg;, - 请确保有至少 2GB 的剩余磁盘空间。 + 要联编完整的 &xorg;, + 请确保至少有 4 GB 的剩余磁盘空间。 Christopher Shumway Contributed by 配置 X11 &xfree86; 4.X &xfree86; &xorg; X11 开始之前 在配置 X11 之前, 您需要了解所安装的系统的下列信息: 显示器规格 显示卡的芯片类型 显示卡的显存容量 水平刷新率 垂直刷新率 显示器的规格被 X11 用来决定显示的分辨率和刷新率。 这些规格通常可以从显示器所带的文档中, 以及制造商的网站找到。 需要知道两个数字范围: 垂直刷新率和水平刷新率。 显示卡的芯片类型将决定 X11 使用什么模块来驱动图形硬件。 绝大多数的硬件都能被自动检测, 但是了解它在自动检测出错的时候还是很有用处的。 显示卡的显存大小决定了系统支持的分辨率和颜色深度。 了解这些限制非常重要。 配置 X11 配置 X11 需要几步。 第一步是以超级用户的身份建立初始的配置文件: &prompt.root; Xorg -configure 在使用 &xfree86; 的情况下键入: &prompt.root; XFree86 -configure 这会在 /root 中生成一个叫做 xorg.conf.new 的配置文件 (无论您使用 &man.su.1; 或直接登录, 都会改变默认的 $HOME 目录变量)。 对于 &xfree86; 来说, 配置文件的名字是 XF86Config.new。 X11 程序将尝试探测系统中的图形硬件并写包含检测到的硬件的配置文件, 以便加载正确的驱动程序。 下一步是测试现存的配置文件, 以确认 &xorg; 能够同系统上的图形设备正常工作。 要完成这个任务,只需: &prompt.root; Xorg -config xorg.conf.new &xfree86; 用户应: &prompt.root; XFree86 -xf86config XF86Config.new 如果用户看到一个黑灰的格子和一个 X 形的鼠标指针,那么配置就是成功 的。要退出测试,只要同时键入 Ctrl Alt Backspace 如果鼠标工作不正常, 请首先配置它。 请查看 &os; 安装一章 微调 X11 接下来是调整 xorg.conf.new (或 XF86Config.new, 如果运行 &xfree86 的话) 配置文件并作测试。 用文本编辑器如 &man.emacs.1; 或 &man.ee.1; 打开这个文件。 要做的第一件事是为当前系统的显示器设置刷新率。 这些值包括垂直和水平的同步频率。 把它们加到 xorg.conf.new"Monitor" 小节中: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection HorizSyncVertRefresh 在配置文件中可能没有。 如果是这样的话, 就需要添加它们, 并在 HorizSync 以及 VertRefresh 后面设置合适的数值。 在上面的例子中, 给出了相应的显示其的参数。 X 能够利用显示器所支持的 DPMS (能源之星) 功能。 &man.xset.1; 程序可以控制超时时间, 并强制待机、挂起或关机。 如果希望启用显示器的 DPMS 功能, 则需要把下面的设置添加到 monitor 节中: Option "DPMS" xorg.conf XF86Config 关闭 xorg.conf.new (或 XF86Config.new) 之前还应该选择默认的分辨率和色深。 这是在 "Screen" 小节中定义的: Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection DefaultDepth 关键字描述了要运行的默认色深。 这可以通过 &man.Xorg.1; (或 &man.XFree86.1;) 的 命令行开关来替代配置文件中的设置。 Modes 关键字描述了给定颜色深度下屏幕的分辨率。 需要说明的是, 目标系统的图形硬件只支持由 VESA 定义的标准模式。 前面的例子中, 默认色深是使用 24位色。 在采用这个色深时, 允许的分辨率是 1024x768。 最后就是将配置文件存盘, 并使用前面介绍的测试模式测试一下。 在发现并解决问题的过程中可以帮助您的工具之一就是 X11 的日志文件,包含了与 X11 服务器相关的每个设备的信息。 &xorg; 日志的文件名是 /var/log/Xorg.0.log 这样的格式 (&xfree86; 日志文件名是 XFree86.0.log 这样的格式)。日志的准确的名字 可以从 Xorg.0.logXorg.8.log 等等。 如果一切准备停当, 就可以把配置文件放到公共的目录中了。 您可以在 &man.Xorg.1; (或 &man.XFree86.1;) 里面找到具体位置。 这个位置通常是 /etc/X11/xorg.conf/usr/X11R6/etc/X11/xorg.conf (对于 &xfree86; 它应该是 /etc/X11/XF86Config/usr/X11R6/etc/X11/XF86Config)。 &prompt.root; cp xorg.conf.new /etc/X11/xorg.conf For &xfree86;: &prompt.root; cp XF86Config.new /etc/X11/XF86Config 现在已经完成了 X11 的配置全过程。 为了使用 &man.startx.1; 来启动 &xfree86; 4.X 需要安装 x11/wrapper port。 &xorg; 已经包含了 wrapper 代码, 因此并不需要安装 wrapper port。 X11 服务器也可以用 &man.xdm.1; 来启动。 有一个图形配置工具, &man.xorgcfg.1; (对于 &xfree86; 来说, 是 &man.xf86cfg.1;), 随 X11 软件包一同安装。 它可以通过选择合适的驱动和设置交互式地定义配置。 这个程序可以从控制台通过命令 xorgcfg -textmode 来直接启动。 与了解详情, 请参考 &man.xorgcfg.1; 和 &man.xf86cfg.1; 的联机手册。 另外还有一个叫做 &man.xorgconfig.1; 的文本界面配置工具 (对于 &xfree86; 是 &man.xf86config.1;), 这是一个控制台工具因此对用户显得不太友好, 不过当其他工具无法工作时, 它仍然可能可以使用。 高级配置主题 配置 &intel; i810 显示芯片组 Intel i810 显示芯片 配置Intel i810芯片组的显示卡需要有针对 X11 的能够用来驱动显示卡的 agpgart AGP程序接口。 自从发行版本 4.8-RELEASE 和 5.0-RELEASE 发行以来 &man.agp.4; 驱动程序就包含在 GENERIC 内核配置里面了。 在以前的发行版里,您必须要在您的内核配置文件里添加下面的一行: device agp 然后重新编译一个新的内核。 或者,您可以在启动的时候使用 &man.loader.8; 自动加载 agp.ko 内核模块。 简单的添加下面这行到 /boot/loader.conf 文件里: agp_load="YES" 接下来,如果您正在运行 FreeBSD 4.X 或者更早的版本, 需要创建一个设备节点作为程序接口。 要创建 AGP 设备节点,在 /dev 下运行 &man.MAKEDEV.8;: &prompt.root; cd /dev &prompt.root; sh MAKEDEV agpgart FreeBSD 5.X 和以后的版本会使用 &man.devfs.5; 来半透明的分配 设备节点,因此 &man.MAKEDEV.8; 这一步是不必要的。 这也适用于其他的图形卡硬件配置。 注意如果系统没有将 &man.agp.4; 驱动程序编译进内核,尝试用 &man.kldload.8; 加载模块是无效的。 这个驱动程序必须编译进内核或者使用 /boot/loader.conf 在启动时加载进入内核。 如果您正在使用 &xfree86; 4.1.0 (或者以后的 版本) 并且出现了像 fbPictureInit 这样未解决的符号提示, 试着在 X11 配置文件里的 Driver "i810" 一行后面加入下面这行: Option "NoDDC" Murray Stokely Contributed by 在 X11 中使用字体 Type1 字体 X11 使用的默认字体不是很理想。 大型的字体显得参差不齐,看起来很不专业,在 &netscape; 中,小字体也显得莫名颇。 然而,有几个自由的,高质量的字体可以在 X11 中使用。 例如,URW字体集合 (x11-fonts/urwfonts) 就包括了高质量的 标准 type1 字体 (Times Roman, Helvetica, Palatino 和其他一些).在 Freefont 集合中 (x11-fonts/freefonts) 也包括更多的字体, 但它们中的绝大部分使用在图形软件中,如 Gimp,在屏幕字体中使用并不完美。另外, 只要花很少的功夫,可以将 &xfree86; 配置成能使用 &truetype; 字体:请参见后面的 &truetype; 字体一节。 要安装上面的Type1字体,您只需要运行下面的命令: &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean freefont 或其他的字库和上面所说的大体类似。 为了让 X 服务器能够检测到这些字体, 需要在 X 服务器的配置文件 /etc/X11/ (&xorg;xorg.conf&xfree86; 则是 XF86Config) 中增加下面的配置: FontPath "/usr/X11R6/lib/X11/fonts/URW/" 或者,也可以在命令行运行: &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/URW &prompt.user; xset fp rehash 这样会起作用,但是当 X 会话结束后就会丢失, 除非它被添加到启动文件 (~/.xinitrc 中, 针对一个寻常的 startx 会话,或者当您通过一个类似 XDM 的图形登陆管理器登陆时添加到 ~/.xsession 中)。 第三种方法是使用新的 /usr/X11R6/etc/fonts/local.conf 文件: 查看 anti-aliasing 章节。 &truetype; 字体 TrueType Fonts fonts TrueType &xfree86; 4.X&xorg; 都已经内建了对 &truetype; 字体的支持。有两个不同的模块能够启用这个功能。 在这个例子中使用 freetype 这个模块,因为它与其他的字体描绘后端 是兼容的。要启用 freetype 模块,只需要将下面这行添加到 /etc/X11/XF86Config 文件的 "Module" 部分。 Load "freetype" 对于 &xfree86; 3.3.X,需要额外的 &truetype; 字体服务器。 Xfstt 通常被用于这个目的。 要安装 Xfstt, 只要简单的安装 port x11-servers/Xfstt. 现在,为 &truetype; 字体创建一个目录 (比如, /usr/X11R6/lib/X11/fonts/TrueType) 然后把所有的 &truetype; 字体拷贝到这个目录。记住您不能直接从 &macintosh; 计算机中提取 &truetype; 字体; 能被 X11 使用的必须是 &unix;/&ms-dos;/&windows; 格式的。 一旦您已经拷贝了这些文件到这个目录,使用 ttmkfdir 来创建一个 fonts.dir 文件,以便让X字体引擎知道 您已经安装了这些新文件。 ttmkfdir 可以在 FreeBSD Ports Collection x11-fonts/ttmkfdir 中找到。 &prompt.root; cd /usr/X11R6/lib/X11/fonts/TrueType &prompt.root; ttmkfdir > fonts.dir 现在把 &truetype; 字体目录添加到字体路径中。 这和上面 Type1 字体的步骤是一样的, 那就是,使用 &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/TrueType &prompt.user; xset fp rehash 或者把 FontPath 这行加到 xorg.conf (或 XF86Config) 文件中。 就是这样。现在 &netscape;, Gimp, &staroffice; 和其他所有的 X 应用程序 应该可以认出安装的 &truetype; 字体。一些很小的字体(如在 Web 页面上高分辨率显示的文本) 和一些很大的字体(在 &staroffice; 下) 现在看起来已经很好了。 Joe Marcus Clarke Updated by Anti-Aliased 字体 anti-aliased fonts fonts anti-aliased X11 从 &xfree86; 4.0.2 开始支持字体的反走样。 但是, 字体配置在 &xfree86; 4.3.0 之前是非常繁琐的。 从 &xfree86; 4.3.0 开始, 对于所有支持 Xft 的应用程序, 所有放到 X11 /usr/X11R6/lib/X11/fonts/~/.fonts/ 中的字体都自动地被加入反走样支持。 并不是所有的应用程序都支持 Xft, 但已经有相当多的程序提供 Xft 支持了。 支持 Xft 的应用程序包括 Qt 2.3 以及更高版本 (用以开发 KDE 桌面的工具包)、 GTK+ 2.0 和更高版本 (用于开发 GNOME 桌面的工具包), 以及 Mozilla 1.2 和更高版本。 要控制哪些字体是 anti-aliased,或者配置 anti-aliased 特性, 创建(或者编辑,如果文件已经存在的话)文件 /usr/X11R6/etc/fonts/local.conf。Xft 字体系统的几个 高级特性都可以使用这个文件来调节; 这一部分只描述几种最简单的情况。要了解更多的细节,请查看 &man.fonts-conf.5;. XML 这个文件一定是 XML 格式的。注意确保所有的标签都完全的关闭掉。 这个文件用一个 DOCTYPE 定义的普通的 XML 头开始, 然后是 <fontconfig> 标签: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> 像前面所做的那样,在 /usr/X11R6/lib/X11/fonts/~/.fonts/ 目录下的所有字体已经可以被支持 Xft 的 应用程序使用了。如果您想添加这两个目录以外的其他路径, 简单的添加下面这行到 /usr/X11R6/etc/fonts/local.conf文件中: <dir>/path/to/my/fonts</dir> 添加了新的字体,尤其是添加了新的字体目录后, 您应该运行下面的命令重建字体缓存: &prompt.root; fc-cache -f Anti-aliasing 会让字体边缘有些模糊,这样增加了非常小的文本的可读性, 然后从大文本字体中删除 staircases 但如果使用普通的文本,可能会引起眼疲劳。 要将字体大小范围控制在14号以下,包括这些行: <match target="font"> <test name="size" compare="less"> <double>14</double> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> <match target="font"> <test name="pixelsize" compare="less" qual="any"> <double>14</double> </test> <edit mode="assign" name="antialias"> <bool>false</bool> </edit> </match> fonts spacing 用 anti-aliasing 来间隔一些等宽字体也是不适当的。 这似乎是 KDE 的一个问题。 要修复这个问题需要确保每个字体之间的间距保持在100。 加入下面这些行: <match target="pattern" name="family"> <test qual="any" name="family"> <string>fixed</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> <match target="pattern" name="family"> <test qual="any" name="family"> <string>console</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> (这里把其他普通的修复的字体作为 "mono"),然后加入: <match target="pattern" name="family"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="spacing" mode="assign"> <int>100</int> </edit> </match> 某些字体,比如 Helvetica,当 anti-aliased 的时候可能存在问题。 通常的表现为字体本身似乎被垂直的切成两半。 糟糕的时候,还可能导致应用程序比如 Mozilla 崩溃。 为了避免这样的现象,考虑添加下面几行到 local.conf文件里面: <match target="pattern" name="family"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign"> <string>sans-serif</string> </edit> </match> 一旦您完成对 local.conf 文件的编辑,确保您使用了 </fontconfig> 标签来结束文件。 不这样做将会导致您的更改被忽略。 X11 默认的字库当使用反走样时会比较难看。 更好的字库可以在 x11-fonts/bitstream-vera port 中找到。 这个 port 会创建一个 /usr/X11R6/etc/fonts/local.conf 文件, 如果这个文件不存在的话。 反之, port 将创建 /usr/X11R6/etc/fonts/local.conf-vera 文件。 将其内容合并到 /usr/X11R6/etc/fonts/local.conf 中, 则 Bitstream 字体将自动地代替默认的 X11 Serif, Sans Serif, 以及单倍距字体。 最后,用户可以添加他们自己的设定通过他们个人的 .fonts.conf 文件。这样做,每个用户应该简单的 创建文件 ~/.fonts.conf。这个文件也必须是 XML 格式的。 LCD screen Fonts LCD screen 最后一点:对于LCD屏幕,需要有子像素的取样。这个基本上 由(水平分割的)红,绿,蓝三色组成,用来提高水平刷新率,结果 可能很有趣。要启用这个,需要在 local.conf 文件的某个地方加入下面这行: <match target="font"> <test qual="all" name="rgba"> <const>unknown</const> </test> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> 依赖于显示器的种类, rgb 可能需要被更改为 bgr, vrgbvbgr:实验一下 看看那个更好。 Mozilla web browsers Mozilla Mozilla Anti-aliasing 在您下次启动系统时就能用了。 然而,注意您的程序必须知道如何使用它。现在,Qt 工具包做到了, 所以整个 KDE 环境能够使用 anti-aliased 字体 (查看 KDE 上的 了解细节)。 GTK+ 和 GNOME 也可以被编译为使用 anti-aliasing 通过 Font capplet (查看 了解细节)。默认情况下, Mozilla 1.2 以及更高版本都会自动的使用 anti-aliasing。要禁用它,使用 -DWITHOUT_XFT 选项 重新编译 Mozilla Seth Kingsley Contributed by X 显示管理器 概要 X Display Manager X 显示管理器(XDM) 是一个X视窗系统用于进行登陆会话管理的可选项。 这个可以应用于多种情况下,包括小 X Terminals, 桌面,大网络显示服务器。既然 X 视窗系统不受网络和协议的限制, 那对于通过网络连接起来的运行 X 客户端和服务器端的不同机器, 就会有很多的可配置项。 XDM 提供了一个选择要连接到哪个显示服务器的图形接口, 只要键入如登陆用户名和密码这样的验证信息。 您也可以把 XDM 想象成与 &man.getty.8 工具一样(see for details)。为用户提供了同样功能。它可以完成系统的登陆任务, 然后为用户运行一个会话管理器 (通常是一个 X 视窗管理器)。接下来 XDM 就等待这个程序退出,发出信号用户已经登陆完成,应当退出屏幕。 这时, XDM 就可以为下一个登陆用户显示登陆和可选择屏幕。 使用 XDM XDM 精灵程序在 /usr/X11R6/bin/xdm 中。您可以在任何时候 用 root 来运行这个程序, 在本地机器上,它将启动管理X的画面。如果要 XDM 每次机器一启动就开始运行, 一个简单的办法是在 /etc/ttys 中加入一个记录。 有关这个文件的更多的格式和使用方法,可以看看 。在默认的 /etc/ttys 文件中用于运行 XDM 守护程序的一行是这样的: ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure 默认情况下,这个记录是关闭的,要启用它, 您需要把第5部分的 off 改为 on 然后按照 的指导 重新启动 &man.init.8;。第一部分,这个程序将管理的终端名称是 ttyv8。这意味着 XDM 将运行在第9个虚拟终端上。 配置 XDM XDM 的配置目录是在 /usr/X11R6/lib/X11/xdm中。在这个目录中, 您会看到几个用来改变 XDM 行为和外观的文件。您会找到这些文件: 文件 描述 Xaccess 客户端授权规则。 Xresources 默认的X资源值。 Xservers 远程和本地显示管理列表。 Xsession 用于登陆的默认的会话脚本。 Xsetup_* 登陆之前用于加载应用程序的脚本。 xdm-config 运行在这台机器上的所有显示的全局配置。 xdm-errors 服务器程序产生的错误。 xdm-pid 当前运行的 XDM 的进程 ID。 XDM 运行时, 在这个目录中有几个脚本和程序可以用来设置桌面。 这些文件中的每一个的用法都将被简要地描述。 这些文件的更详细的语法和用法在 &man.xdm.1; 中将有详细描述。 默认的配置是一个矩形的登陆窗口,上面有机器的名称, Login:Password:。如果您想设计您自己个性化的 XDM 屏幕,这是一个很好的起点。 Xaccess 连接到 XDM 的用来控制显示的协议 叫做 X 显示管理连接协议(XDMCP)。 这个文件是一个用来控制来自远程机器的XDMCP连接。默认的, 它允许任何客户端连接,但那没有用,除非 xdm-config 被修改成用于侦听远程连接。 Xresources 这是一个默认的用来显示选项和登陆屏幕的应用程序文件。这 就是您能够定制登陆程序的外观的地方。这个格式与 X11 文档中描述的默认应用 程序文件是一样的。 Xservers 这是一个选择者应当提供的作为可选的远程显示列表。 Xsession 这是一个用户登陆后针对 XDM 的默认会话脚本。通常,在 ~/.xsession 中每个用户将有一个可定制的会话脚本。 Xsetup_* 在显示选择者或登陆接口之前,这些将被自动运行。 这是一个每个显示都要用到的脚本,叫做 Xsetup_, 后面会跟一个本地显示的数字(比如 Xsetup_0)。典型的,这些脚本将在后台 (如 xconsole)运行一个或两个程序。 xdm-config 此文件以应用程序默认值的形式, 提供了在安装时所使用的普适的显示设置。 xdm-errors 这个文件包含了正在设法运行的 XDM 的X server输出。如果一个 XDM 正设法运行的显示由于某种原因被挂起, 那这是一个寻找错误信息的好地方。 这些信息会在每一个会话的基础上被写到用户的 ~/.xsession-errors 文件中。 运行一个网络显示服务器 对于其他客户端来说,为了连接到显示服务器,您将必须编辑访问控制规则, 然后启用连接侦听。默认的这些被设置成比较保守的值。 要让XDM能侦听连接,先要在 xdm-config 文件中注释掉一行: ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 然后重新启动XDM。 记住默认应用程序文件的注释以! 字母开始,不是#。 您需要设置严格的访问控制。看看在 Xaccess文件中的实例记录,可以参考 &man.xdm.1; 的联机手册。 替换 XDM 有几个替换默认 XDM程序的方案。它们是, 上一节已经描述过的kdm (与 KDE捆绑在一起)。 kdm 提供了许多视觉上的改进和局部的修饰, 同样能让用户在启动时能选择他们喜欢的窗口管理器。 Valentino Vaschetto Contributed by 桌面环境 这节描述了 FreeBSD 上用于 X 的不同桌面环境。 桌面环境 可能仅仅是一个简单的窗口管理器, 也可能是一个像 KDE 或者 GNOME这样的完整桌面应用程序套件。 GNOME 有关 GNOME GNOME GNOME 是一个用户界面友好的桌面环境, 能够使用户很容易地使用和配置他们的计算机。 GNOME 包括一个面板(用来启动应用程序和显示状态), 一个桌面(存放数据和应用程序的地方), 一套标准的桌面工具和应用程序, 和一套与其他人相互协同工作的协议集。 其他操作系统的用户在使用 GNOME提供的强大的图形驱动环境时会觉得很好。 更多的关于 FreeBSD 上 GNOME 的信息 可以在 FreeBSD GNOME Project的网页上找到。 安装 GNOME 安装 GNOME的最简单的方法是 第 2 章描述的在FreeBSD安装过程中通过 Desktop Configuration菜单来进行。 它们也可以很容易地从一个package或ports collection安装: 要从网络安装GNOME, 只要键入: &prompt.root; pkg_add -r gnome2 从源代码编译GNOME,可以使用 ports树: &prompt.root; cd /usr/ports/x11/gnome2 &prompt.root; make install clean 一旦GNOME被安装好, X Server必须被告知启动 GNOME以代替默认的窗口管理器。 如果在适当的位置已经定制好了文件.xinitrc, 简单地将启动当前窗口管理器的那行替换为 /usr/X11R6/bin/gnome-session。 如果对配置文件不想添加任何特殊改动,只需简单地键入: &prompt.user; echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc 接着,键入startxGNOME桌面环境就启动了。 如果已经使用了一个像 XDM这样的显示管理器,就不能这样做。 而是,用同样的命令创建一个可执行文件.xsession。 要这样做,需要先编辑文件,然后用 /usr/X11R6/bin/gnome-session替换已存在的窗口管理命令: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession 另一个选项是在登陆时配置显示管理器允许您选择窗口管理器;有关 KDE 细节 会解释如何使用kdmKDE显示管理器来做。 在GNOME上使用Anti-aliased字体 GNOME anti-aliased fonts X11 通过RENDER扩展来支持 anti-aliasing。 GTK+ 2.0 以及更高的版本(被 GNOME使用的工具包)可以使用这个功能。 配置 anti-aliasing 在 描述。所以,使用最近的软件, anti-aliasing 可以应用在 GNOME桌面环境中。只需要依次选择 应用程序 桌面首选项 字体,然后选上 最佳形状最佳对比度,或者 像素圆滑(LCD)。对于 GTK+ 应用程序,它们不是 GNOME 桌面的一部分,在启动程序前需要设置 环境变量GDK_USE_XFT的值为 1 KDE KDE 有关 KDE KDE 是一个容易使用的现代桌面环境。 KDE 有很多很好的特性: 一个美丽的现代的桌面。 一个集合了完美网络环境的桌面。 一个集成的允许您方便,高效地帮助您使用 KDE 桌面和它的应用程序的帮助系统。 所有的KDE应用程序具有一致的所见即所得界面。 标准的菜单和工具栏,键盘布局,颜色配置等。 国际化:KDE 可以使用超过40种语言。 集中的一致化的桌面驱动配置。 许多有用的 KDE应用程序。 KDE 有一个以 KDEKParts 技术为基础的办公套件。 它包括电子表格,幻灯片,日程管理和新闻等软件。 KDE 也包含一个与当前 &unix; 系统上其他Web浏览器相竞争的叫做 Konqueror 的浏览器。 systems. 关于 KDE 的更多信息可以在 KDE 网站上找到。 KDE 上关于 FreeBSD 的特定信息和资源,可以参考 FreeBSD-KDE team的网站。 安装 KDE GNOME 或其他桌面环境一样,安装 KDE 的最容易的方法是通过 第 2 章所描绘的 FreeBSD 安装过程的 Desktop Configuration 菜单来安装。 另外,它也可以很容易地从packages或ports collection安装: 要从网络安装 KDE 只需要: &prompt.root; pkg_add -r kde &man.pkg.add.1; 就回自动的下在最新版本的应用程序。 要从源代码编译 KDE, 可以使用 port 树: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean KDE 安装完成后, X server必须被告知启动这个应用程序以代替默认的窗口管理器。 这可以通过编辑 .xinitrc 文件来完成: &prompt.user; echo "exec startkde" > ~/.xinitrc 现在,无论您什么时候用 startx进入 X 视窗系统, KDE 就将成为您的桌面环境。 如果使用一个像 XDM这样的显示管理器, 那配置文件可能有点不同。需要编辑一个 .xsession 文件,有关 kdm 的用法会在这章的后面介绍。 有关 KDE 的更多细节 现在 KDE 已经被安装在系统中了。 通过帮助页面或点击多个菜单可以发现很多东西。 &windows; 或 &mac; 用户会有回到家的感觉。 有关 KDE 的最好的参考资料是 它的在线文档。KDE 拥有它自己的 web 浏览器 Konqueror, 还有很多其他的应用程序和丰富文档。 这节的余下部分将讨论一些很难用走马观花的方法来学习的技术项目。 KDE 显示管理器 KDE display manager 一个多用户系统的系统管理员可能希望给用户提供一个图形化的登陆界面, 像前面描述的一样,可以使用 xdm。 然而, KDE 提供了另一种选择, kdm, 它看起来很吸引人,还包含很多登陆选项。 特别的,用户可以很容易地(通过一个菜单) 选择登陆后使用哪个桌面环境 (KDEGNOME或其他)。 首先,以 root 用户身份运行 KDE 控制面板,kcontrol。 通常情况下,以 root 身份运行 X 环境是很不安全的。 您应当以普通用户来使用窗口管理器, 打开一个终端窗口(例如 xterm 或者 KDEkonsole),用 su 来切换成 root(这个用户必须首先在 /etc/groupwheel 组里),然后再键入 kcontrol 点击左边标记 系统的图标,然后选择登陆管理器 。在右面,有几个配置选项, KDE 手册会解释的更加详细一些。 点击右边的会话。 点击新类型来添加几个窗口管理器或桌面环境。 这些只是标签,所以它们用 KDEGNOME要比用 startkde或者 gnome-session来得好。 也可以是failsafe 也可以用同样方法定制其他菜单,它们主要是起修饰和自我解释用的。 完成之后,键入Apply按钮,退出控制中心。 要确信kdm理解标签 (KDEGNOME等)的意思,需要编辑一些 xdm用的文件。 KDE 2.2中,这有些变化: kdm现在使用它自己的配置文件。 请看看KDE 2.2的文档。 在一个终端窗口,作为root用户,要编辑 /usr/X11R6/lib/X11/xdm/Xsession文件, 中间有一部分是这样的: case $# in 1) case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac 需要在这部分加几行。 假定使用的标签是KDEGNOME, 就像下面这样: case $# in 1) case $1 in kde) exec /usr/local/bin/startkde ;; GNOME) exec /usr/X11R6/bin/gnome-session ;; failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac 为了加上KDE 的登陆桌面背景, 需要在 /usr/X11R6/lib/X11/xdm/Xsetup_0中加入下面这行: /usr/local/bin/kdmdesktop 现在,确信kdm/etc/ttys中列出来了,并且将被启动。 要这样做,只要跟着先前有关 XDM用法,用 /usr/X11R6/bin/xdm 程序的用法替换/usr/local/bin/kdm的用法就可以了。 Anti-aliased字体 KDE anti-aliased fonts X11 通过它的 RENDER扩展来支持anti-aliasing,从2.3版本开始, Qt (被KDE使用的工具包)也支持 这个扩展。在有关anti-aliasing X11字体的节描述到了如何配置这些。 所以,对于现在的软件,anti-aliasing也可以用在 KDE桌面上。只需要到KDE 菜单,到 Preferences Look and Feel Fonts,然后点击 Use Anti-Aliasing for Fonts and Icons。 对于一个不是 KDE的一部分的Qt应用程序,环境变量 QT_XFT需要在启动程序前被设置成true XFce 有关XFce XFce是以被GNOME 使用的 GTK+ 工具包为基础的桌面环境, 但是更加轻巧,适合于那些需要一个易于使用和配置并且简单而高效的桌面的人。 看起来,它非常像使用在商业&unix;系统上的 CDE环境。 XFce的主要特性有下面这些: 一个简单,易于使用的桌面。 完全通过鼠标的拖动和按键来控制等。 CDE 相似的主面板,菜单,applets和应用launchers。 集成的窗口管理器,文件管理器,声音管理器, GNOME应用模块,和其他一些。 可配置界面的主题。(因为它使用GTK+) 快速,轻便,高效:对于比较老的/旧的机器或带有很少内存的机器仍然很理想。 更多有关XFce 的信息可以参考XFce 网站 安装XFce 有一个二进制的XFce 软件包存在(在写作的时候)。要安装的话,执行下面的命令: &prompt.root; pkg_add -r xfce4 另外,要从源代码建立,使用ports collection: &prompt.root; cd /usr/ports/x11-wm/xfce4 &prompt.root; make install clean 现在,要告诉X服务器在下次X启动时执行 XFce。 只要执行下面的命令: &prompt.user; echo "/usr/X11R6/bin/startxfce4" > ~/.xinitrc 接下来就是启动 X, XFce将成为您的桌面。 与以前一样,如果使用像 XDM 这样的显示管理器,需要创建一个 .xsession文件,就像有关 GNOME 的那节描述的, 使用/usr/X11R6/bin/startxfce4 命令,或者,配置显示管理器允许在启动时选择一个桌面, 就像有关kdm的那节描述的。