12. 常见问题解答 (FAQ) 列表

问:我从启动/根磁盘启动,但没有任何反应。我该怎么办?
问:Slackware/Debian/RedHat 启动盘是如何工作的?
问:我如何使用更高密度的 (> 1440K) 软盘?我如何确定哪些密度适用于我的软盘驱动器?
问:我如何增加我的内存盘的大小?
问:我如何制作可启动的 CD-ROM?
问:我如何制作可启动的 LS-120 磁盘?
问:我如何使用 XYZ 驱动程序制作启动盘?
问:我如何使用新文件更新我的根磁盘?
问:我如何删除 LILO,以便我可以再次使用 DOS 启动?
问:如果我丢失了内核我的启动盘,我该如何启动?
问:我如何制作启动/根磁盘的额外副本?
问:如何才能在每次启动时不用输入 “ahaxxxx=nn,nn,nn”?
问:在启动时,我收到错误 “A: cannot execute B”。为什么?
问:我的内核支持内存盘,但初始化的内存盘大小为 0K。为什么?

问:我从启动/根磁盘启动,但没有任何反应。我该怎么办?

答:请参阅上面的第 7 章节

问:Slackware/Debian/RedHat 启动盘是如何工作的?

答:请参阅上面的第 10 章节

问:我如何使用更高密度的 (> 1440K) 软盘?我如何确定哪些密度适用于我的软盘驱动器?

答:请参阅上面的第 8 章节,Alain Knaff 关于此主题的评论。据我所知,他的回答是最权威的。

问:我如何增加我的内存盘的大小?

答:这可能应该在文本中更好地解释,但为了暂时解答问题,我在这里给出答案。

首先,不要尝试使用rdevramsize命令来执行此操作,无论它们的文档如何说明。内存盘字不再决定内存盘的大小。

其次,请记住内存盘实际上是动态的;当您设置内存盘大小时,您并没有分配任何内存,您只是设置它可以增长的最大限制。不要害怕将这些设置得相当大(例如,8 甚至 16 兆字节)。RAM 空间在您需要它之前实际上不会被消耗。您可以通过以下几种方式设置这些限制。

  1. 使用ramdisk_size=NNN命令行参数。您可以手动输入此参数,也可以使用类似以下的命令append="ramdisk_size=NNN"与 LILO 一起使用。

  2. 如果您正在使用 LILO,您可以使用内核选项,例如ramdisk=8192Klilo.conf文件中。

  3. 更改内核配置选项CONFIG_BLK_DEV_RAM_SIZE并重新编译您的内核。

问:我如何制作可启动的 CD-ROM?

答:请参阅第 11 章节

问:我如何制作可启动的 LS-120 磁盘?

答:由于我没有 LS-120 驱动器,以下信息是从 Dave Cinege 提供的Linux Router Project 信息中总结出来的。

LS-120 是一种 IDE 软盘驱动器。它与标准的 3.5 英寸磁盘和新的 120MB 磁盘兼容。截至 Linux v2.0.31,它已获得完全支持。要能够从中启动,您必须具有专门允许将 LS-120 视为驱动器 0 的 BIOS(而 IDE 设备通常从 80 开始)。如果您没有 BIOS 支持,您可以从 Promise Technologies 购买小型 IDE FloppyMAX 卡来克服此缺陷。

内核引导加载程序不喜欢 LS-120,并且会立即死机。此外,2m 磁盘也不喜欢它,并且无法启动。1.44MB 到 1.74MB 的磁盘可以正常工作。截至 v1.32,SYSLINUX 可以与 120MB 磁盘一起使用。除非您需要 MS-DOS 兼容性,否则最好对磁盘进行分区并使用 ext2 或 minix,而不是 SYSLINUX。

LILO 可以很好地与 120MB 磁盘配合使用。这是一个 lilo.conf 示例
        boot=/dev/hda
        compact
        disk=/dev/hda bios=0
        install=/floppy/boot.b
        map=/floppy/map
        image=/floppy/linux
        label=Linux
        append="load_ramdisk=1"
        initrd=/floppy/root.bin
        ramdisk=8192
“disk=/dev/hda bios=0” 行是使 LS-120 启动的诀窍。

问:我如何使用 XYZ 驱动程序制作启动盘?

答:最简单的方法是从您最近的 Slackware 镜像站点获取 Slackware 内核。Slackware 内核是通用内核,旨在包含尽可能多的设备的驱动程序,因此如果您有 SCSI 或 IDE 控制器,则很可能 Slackware 内核中包含其驱动程序。

转到a1目录,然后根据您拥有的控制器类型选择 IDE 或 SCSI 内核。检查所选内核的 xxxxkern.cfg 文件,以查看该内核中包含的驱动程序。如果您想要的设备在该列表中,则相应的内核应启动您的计算机。下载 xxxxkern.tgz 文件并将其复制到您的启动盘,如上面关于制作启动盘的部分所述。

然后,您必须使用命令 rdev zImage 检查内核中的根设备。如果这与您想要的根设备不同,请使用 rdev 更改它。例如,我尝试的内核设置为/dev/sda2,但我的根 SCSI 分区是/dev/sda8。要使用根磁盘,您必须使用命令 rdev zImage /dev/fd0

如果您想知道如何设置 Slackware 根磁盘,这超出了本 HOWTO 的范围,因此我建议您查看 Linux 安装指南或获取 Slackware 发行版。请参阅本 HOWTO 中标题为“参考文献”的部分。

问:我如何使用新文件更新我的根磁盘?

答:最简单的方法是将根磁盘的文件系统复制回您使用的 DEVICE(来自上面的第 4.2 章节)。然后挂载文件系统并进行更改。您必须记住您的根文件系统的起始位置以及它占用了多少块
        dd if=/dev/fd0 bs=1k skip=ROOTBEGIN count=BLOCKS | gunzip > DEVICE
        mount -t ext2 DEVICE /mnt
进行更改后,像以前一样继续操作(在第 4.7 章节中),并将根文件系统传输回磁盘。如果您不更改新根文件系统的起始位置,则不应重新传输内核或重新计算内存盘字。

问:我如何删除 LILO,以便我可以再次使用 DOS 启动?

答:这不是真正的启动盘主题,但经常被问到。在 Linux 中,您可以运行
        /sbin/lilo -u

您还可以使用 dd 命令将 LILO 保存的备份复制到引导扇区。如果您希望这样做,请参阅 LILO 文档。

在 DOS 和 Windows 中,您可以使用 DOS 命令
        FDISK /MBR
MBR 代表主引导记录。此命令将引导扇区替换为干净的 DOS 引导扇区,而不会影响分区表。一些纯粹主义者不同意这一点,但即使 LILO 的作者 Werner Almesberger 也建议这样做。它很容易,而且有效。

问:如果我丢失了内核我的启动盘,我该如何启动?

答:如果您没有备用启动盘,可能最简单的方法是获取适用于您的磁盘控制器类型(IDE 或 SCSI)的 Slackware 内核,如上面“我如何使用 XXX 驱动程序制作启动盘?”中所述。然后,您可以使用此内核启动计算机,然后修复存在的任何损坏。

您获得的内核可能未将根设备设置为您想要的磁盘类型和分区。例如,Slackware 的通用 SCSI 内核将根设备设置为/dev/sda2,而我的根 Linux 分区恰好是/dev/sda8。在这种情况下,内核中的根设备将必须更改。

即使您只有一个内核和一些其他操作系统(例如 DOS),您仍然可以更改内核中的根设备和内存盘设置。

rdev 通过更改内核文件中固定偏移量的值来更改内核设置,因此如果您在您仍然运行的任何系统上都有可用的十六进制编辑器(例如,DOS 下的 Norton Utilities Disk Editor),您可以执行相同的操作。然后,您需要检查并在必要时更改以下偏移量处的内核中的值
HEX     DEC  DESCRIPTION
0x01F8  504  Low byte of RAMDISK word
0x01F9  505  High byte of RAMDISK word
0x01FC  508  Root minor device number - see below
0X01FD  509  Root major device number - see below

内存盘字的解释在上面的第 6.3 章节中进行了描述。

主设备号和次设备号必须设置为您要挂载根文件系统的设备。一些有用的值可供选择
DEVICE          MAJOR MINOR
/dev/fd0            2     0   1st floppy drive
/dev/hda1           3     1   partition 1 on 1st IDE drive
/dev/sda1           8     1   partition 1 on 1st SCSI drive
/dev/sda8           8     8   partition 8 on 1st SCSI drive
设置这些值后,您可以使用 Norton Utilities Disk Editor 或名为 rawrite.exe 的程序将文件写入软盘。此程序包含在所有发行版中。它是一个 DOS 程序,它将文件写入“原始”磁盘,从引导扇区开始,而不是将其写入文件系统。如果您使用 Norton Utilities,则必须将文件写入物理磁盘,从磁盘的开头开始。

问:我如何制作启动/根磁盘的额外副本?

答:由于磁介质可能会随着时间推移而退化,因此您应该保留几个救援盘的副本,以防原始磁盘无法读取。

制作任何软盘(包括可启动软盘和实用程序软盘)副本的最简单方法是使用 dd 命令将原始软盘的内容复制到硬盘驱动器上的文件中,然后使用相同的命令将文件复制回新软盘。请注意,您不需要也不应该挂载软盘,因为 dd 使用原始设备接口。

要复制原始磁盘,请输入命令
        dd if=DEVICENAME of=FILENAME
其中 DEVICENAME 是软盘驱动器的设备名称,FILENAME 是(硬盘)输出文件的名称。省略count参数会导致 dd 复制整个软盘(如果是高密度软盘,则为 2880 个块)。

要将生成的文件复制回新软盘,请插入新软盘并输入反向命令
        dd if=FILENAME of=DEVICENAME

请注意,以上讨论假设您只有一个软盘驱动器。如果您有两个相同类型的驱动器,则可以使用类似以下的命令复制软盘
        dd if=/dev/fd0 of=/dev/fd1

问:如何才能在每次启动时不用输入 “ahaxxxx=nn,nn,nn”?

答:在无法自动检测磁盘设备的情况下,有必要向内核提供命令设备参数字符串,例如
        aha152x=0x340,11,3,1
可以使用 LILO 通过多种方式提供此参数字符串

  • 通过在每次系统通过 LILO 启动时在命令行上输入它。但这很无聊。

  • 通过使用 LILO 的lock关键字使其将命令行存储为默认命令行,以便 LILO 每次启动时都使用相同的选项。

  • 通过使用append=LILO 配置文件中的语句。请注意,参数字符串必须用引号引起来。

例如,使用上述参数字符串的示例命令行将是
        zImage  aha152x=0x340,11,3,1 root=/dev/sda1 lock

这将传递设备参数字符串,并要求内核将根设备设置为/dev/sda1并保存整个命令行,以便在所有未来的启动中重复使用。

APPEND 语句的示例是
        APPEND = “aha152x=0x340,11,3,1”

请注意,参数字符串不能在命令行上用引号引起来,但必须APPEND语句中用引号引起来。

另请注意,要使参数字符串生效,内核必须包含该磁盘类型的驱动程序。如果它不包含,则没有任何东西在侦听参数字符串,您将必须重新构建内核以包含所需的驱动程序。有关重新构建内核的详细信息,请转到/usr/src/linux并阅读 README,并阅读 Linux FAQ 和安装 HOWTO。或者,您可以获取适用于该磁盘类型的通用内核并安装它。

强烈建议读者在尝试 LILO 安装之前阅读 LILO 文档。不小心使用BOOT语句可能会损坏分区。

问:在启动时,我收到错误 “A: cannot execute B”。为什么?

答:在各种实用程序中,程序名称被硬编码的情况有几种。这些情况并非到处都发生,但它们可以解释为什么即使您可以看到可执行文件在那里,但在您的系统上显然找不到它。您可以使用 strings 命令并通过 grep 管道输出,来找出给定程序是否硬编码了另一个程序的名称。

已知的硬编码示例包括

  • shutdown 在某些版本中硬编码了/etc/reboot,因此 reboot 必须放在/etc目录中。

  • init 至少给一个人带来了问题,内核无法找到 init

要解决这些问题,请将程序移动到正确的目录,或更改配置文件(例如inittab)以指向正确的目录。如果不确定,请将程序放在与硬盘驱动器上相同的目录中,并使用相同的inittab/etc/rc.d文件,就像它们出现在您的硬盘驱动器上一样。

问:我的内核支持内存盘,但初始化的内存盘大小为 0K。为什么?

答:如果发生这种情况,内核启动时会出现类似这样的内核消息
        Ramdisk driver initialized : 16 ramdisks of 0K size

这可能是因为在启动时,内核参数将大小设置为 0。这可能是因为忽略了 LILO 配置文件参数
    ramdisk= 0

这包含在某些旧发行版中的示例 LILO 配置文件中,并且放在那里是为了覆盖任何先前的内核设置。如果您有这样一行,请将其删除。

请注意,如果您尝试使用大小为 0 的内存盘,则行为可能无法预测,并可能导致内核崩溃。