8.1. 启动参数

内置于内核的 SCSI 驱动程序会按照预定的顺序进行检查,以查看它们可以控制的 HBA 是否存在。用户无法控制此顺序,在大多数情况下,此顺序是任意的,但在某些较旧的 ISA 适配器的情况下,这是为了防止错误识别 [1]

scsi_logging=<n>
    where <n> is 0 to turn logging off
    where <n> is non-zero to turn logging on

max_scsi_luns=<n>
    where <n> is a number between 1 and 8 (< lk 2.4.7),
    	>= lk 2.4.7 the upper limit can be much larger

scsi_allow_ghost_devices=<n>
    where (<n> - 1) is the maximum lu number to ghost if the
        the corresponding device is offline. When <n>==0
        (default) then don't ghost any devices (in lk 2.4.26
        and later)

scsihosts=host0:hosts1::host3 

最近引入的 devfs 定义了一个 "scsihosts" 启动时参数,以便用户对此进行一些控制。 有关说明,请参阅 devfs 文档 [参考:W5]。 "scsihosts" 引导选项列表中给出的主机名是底层驱动程序的名称(例如 "scsihosts=advansys:imm::ide-scsi")。 [2] [3] 使用 "scsihosts" 不需要 devfs。 如果给定 "scsihosts" 参数,则会在启动消息中回显该参数。 例如

scsi: host order: advansys:imm::ide-scsi
此外,如果系统中存在多个 HBA,则会按照固定的顺序扫描它们(请参阅脚注)。 "scsihosts" 参数仅影响如何索引这些 HBA(即内核将哪些 SCSI 适配器编号与它们关联)。 在上面的示例中,如果在启动期间未找到 "imm" 驱动程序,则不会分配 scsi 适配器编号 "1"。 如果 "imm" 驱动程序稍后作为模块加载,则它将采用 scsi 适配器编号 "1"。 如果找到未在 "scsihosts" 中命名的驱动程序,则它将获得下一个可用的 scsi 适配器编号(例如,内置的 aic7xxx 驱动程序将在上面的示例中获得 scsi 适配器编号 "2")。

包含一些解释的完整内核参数列表可以在以下文件中找到/usr/src/linux/Documentation/kernel-parameters.txt.

注释

[1]

对于初始化代码而言,PCI 适配器比旧的 ISA 适配器“安全”得多。 因此,PCI 适配器的初始化顺序不太可能导致死锁。 在这种情况下,可以通过更改 SCSI 子系统 Makefile 中的条目顺序来修改内置驱动程序的初始化顺序(以及 SCSI 适配器编号)(/usr/src/linux/drivers/scsi/Makefile)。 注意:某些适配器可能被多个底层驱动程序识别(例如,基于 NCR 芯片组的适配器)。

[2]

逗号或冒号都可以用作 "scsihosts" 的分隔符。 这意味着 "scsihosts=advansys,imm,,ide-scsi" 也是有效的。 此外,如果机器的启动序列涉及 "initrd" 阶段(请查看/etc/grub.conf/etc/lilo.conf以确定是否是这种情况),那么在更改 "scsihosts" 启动时参数后,应运行 mkinitrd 命令。 这将生成一个新的 initrd 映像,需要将其放在正确的位置(最有可能在/boot目录)。

[3]

使用 "scsihosts" 可能会导致这样一种情况:计算机的 BIOS 在一个磁盘上找到引导轨道(以及在 lilo 或 grub 中设置的启动时间参数),而内核在另一个磁盘上找到根分区。 当这是计划外的情况时,可能会非常令人困惑。 因此,在 lilo 或 grub 的配置中更改(或添加)"scsihosts" 后,启动机器以查看访问了哪些磁盘可能是明智之举。