Posts Tagged ‘boot’

Linux忘记密码的处理方法

January 14th, 2006

这个问题总被问,回答过无数次了,贴在这里,这是终极方法,适用于一切可以重新启动系统、使用 LILO/GRUB,并且引导程序没有密码的情况。
如果你忘了普通用户的用户名密码,用 root 登录,然后运行 passwd username 即可修改
如果忘了 root 密码,启动到单用户模式,用 passwd 命令修改密码
如果单用户模式也需要密码,启动时用内核参数 init=/bin/sh 即可,出现提示符后,以 rw 方法重新 mount 根分区,编辑 /etc/passwd,去掉 root 密码即可,具体操作是
1.a 如果用 grub 引导的话,在引导菜单上要启动的选项处按’e',然后上下找到kernel那一行,再按 e,在后面加上 init=/bin/sh 这几个字,然后按回车,然后大概是按b,启动
1.b 如果用lilo,在 lilo 提示界面下,输入你启动的东东的 lable,再在后面加上参数,比如label是linux,那就输入 linux init=/bin/sh,然后回车
2. 看到 Shell 提示符之后,输入命令, mount -o remount,rw /,重新以可读写方式挂载根分区。
3 用 passwd 命令修改密码,也可以直接修改 /etc/passwd文件
4 用 mount -o ro,remount / 重新把根分区只读,这个必须做,否则就功亏一篑了
5 按计算机的 reset 键,重新启动系统。因为没有 init,所以 reboot, halt, shutdown 这些命令很可能不好用。
完毕。

硬盘分区调整导致grub无法引导的修复

January 14th, 2006

1. 定位 boot 分区:
==================
"grub>"提示符下运行如下命令:
grub> find /grub/stage1
(hd0,4)
如果得到类似上述的结果,则表明存在单独的 /boot 分区,这是 Red hat 的典型
风格,记为(*),相应的记 /dev/hda5 为 (*’)。(*)到(*’)的映射遵循如下规律
(hdm,n)–>(/dev/hdck)
m=0,1,2,3 —> c=a,b,c,d
k=n+1
如果没有得到有用结果,则表明不存在 /boot 分区,那么运行如下命令
grub> find /boot/grub/stage1
(hd0,4)
记此结果为 (**),对应的 (**’) 使用同样的方式转换而成
(*) 或 (**) 就是对应的 grub 的分区的位置,记为 (grub)
2. 定位根分区:
==============
如果存在(**’) 则这个就是根分区,如果存在(*),则运行如下命令
grub> find /etc/fstab
(hd0,6)
记上述结果为 (***) 并用同样规则,相应得到 (***’)
(**’) 或 (***’) 就是的根分区的位置,记为 (root’)
3. 引导系统:
一共需要三到四条命令:
a) grub>root (grub)
例如
grub> root (hd0,4)
b) kernel (vmlinuz) root=(root’) ro
这里(vmlinuz)以如下方式确定
如果(*)
grub> kernel /vmlinuz
如果(**)
grub> kernel /boot/vmlinuz
输入上面内容后,*不要回车*,连按tab键,可以得到匹配文件名列表,选择一个
合适的,输入完整,格式如下
grub> kernel /vmlinuz-2.6.10-1 root=/dev/hda5 ro

grub> kernle /boot/vmlinuz-2.6.10-1 root=/dev/hda7 ro
c) initrd (initrd)
同样按照上面同样的命令行补全方式,输入,例如
grub> initrd /initrd-2.6.10-i386.img

grub> initrd /boot/initrd-2.6.10-i386.img
d) boot
grub> boot
至此,系统启动
4. 修复引导程序:
a)首先使用(root’)和(boot’)更新 /etc/fstab 里面的 / 和 /boot 的设备号,
如果有其它分区,相应调整。
b) 修改 /boot/grub/menu.lst 或 grub.conf
按照步骤3里面的数据修改此文件
c) 重新安装 grub
以root用户
# grub
grub> root (boot)
grub> setup (hd0)
大概就是这样了,没有实验,直接写的,恐怕有些地方有些疏漏,请大家指正。

U盘/光盘的一般引导方法与引导介质的制作

January 14th, 2006

我不打算太具体地说这个启动盘的制作方法了,相反,更简洁地介绍一下更一般的方法。
关键词: boot loader, initrd, syslinux, isolinux, damn small linux,
    debian installer, bootable usb flash disk
大纲:
* 引导程序概述
* initrd
* SYSLINUX/ISOLINUX
* 实战 2 in 1 双启动 U 盘
说明 & 免责声明:
* U 盘的可引导性同时依赖于 U 盘本身和计算机主板,较早主板一律不支持
* 作者不对读者因为参照本文所引起的一切后果负责
一、引导程序概述
================
任何一个操作系统在任何一个硬件平台上的运行都需要一个引导的过程,即,初始化
软件环境、把内核从存储介质放到内存当中去,并开始运行。当然对于某些简单软硬
件系统,这个过程可能及其简单,而对于 PC 就要略微复杂一些了。
PC 的引导程序上承 BIOS,下接内核的初始化代码,虽然开一次机只运行一次后就
不留痕迹了,不过还是相当重要的。所有的引导程序都在做类似的事情:
* 驻留在存贮介质的特殊位置可以被 BIOS 启动,或是自己是某一系统的可执行
  文件,可以被用户显式或隐式在该系统(宿主系统)内启动;
* 了解要被启动的必要启动文件的位置,包括系统内核、ramdisk 等,并把它们
  读取出来、装载到内存之中;
* 构造环境、运行操作系统的内核,自己则就此退出历史舞台。
历史上,用于 Linux 的最著名的引导程序莫过于 LILO 和 Grub 了,作为通用的引导
程序,二者用途广泛,但对于一些特殊的场合,譬如引导程序可利用的空间比较有限
的可移动存储介质 (通俗地说,包括光盘、软盘、u 盘等),它们有些过于厚重了,这
就引出了我们今天的主角 — SYSLINUX/ISOLINUX,现在,你只要知道他们是引导程序
就足够了,接下来,我们还要插入一些废话。
二、initrd
==========
initrd = init ramdisk, 顾名思义,就是在启动时使用的一个内存虚拟磁盘,它是系统
广泛的硬件支持性的必需品。
我们知道,Linux 的驱动程序是内核的一部分,它们提供了硬件向上层的抽象接口,
Linux 内核的核心子系统 — 虚拟文件系统部分的工作强烈依赖于底层硬件驱动程序
的支持,在启动过程当中,当某些必备的驱动程序无法使用的时候,比如 EXT2 文件
系统、IDE 硬盘适配器等无法工作的时候,系统启动将就此中止,发生所谓的
“Kernel Panic”,这也是初学者编译内核最常遇到的困难。
然而,我们当然不能将所有的驱动都编译到内核当中去,因为
* 我们不能无限制地加大内核的尺寸,这对于系统资源,尤其是引导过程中非常
  有限的可用存储资源是难以承受的
* 我们可以把很多驱动程序编译成模块,随用随加载
* 极少数情况,某些模块是相互冲突的,比如 2.4 内核的某些版本之中,reiserfs
  和 ext3 两种驱动不能同时被编译到内核当中。
所以,我们只能在内核中放入必要的驱动程序,其余的不那么需要的部分编译成模块
放到 /lib/modules/`uname -r`/ 之中,在需要的时候会被加载。
但是,对于具有通用性的内核,是很难论断出哪几种驱动程序才是真正必须的,究竟
是 Intel 的 IDE 磁盘控制器还是 AMD/nVidia 的,抑或是 VIA 的,乃至光纤通道
SCSI 磁盘……是阿,这真是个很困扰人的问题,没有一个驱动可以在占用绝对少的空
间的前提下应付所有的设备,于是,我们退而求其次,寻求一个中间介质 — ramdisk
在内核启动前,引导程序首先在内存之中构建一个 ramdisk,成为一个基本文件系统,
然后 Linux 内核以此为自己的根文件系统启动,这样的好处是可以不必理会磁盘驱动
的问题,只要能驱动 ramdisk 就可以了。
用 ramdisk 启动之后,在 ramdisk 的启动脚本 (一般叫 /linuxrc) 之中,针对硬件
尝试 ramdisk 里面的 /lib/modules/`uname -r`/,加载恰当的驱动,这时系统已经
具备了切换到硬盘或其他介质上的文件系统的条件了。
机不可失,这时,我们首先加载硬盘或光盘、u 盘等启动介质,然后设该介质为新的
根分区,并运行其 init 进程为 1 进程,之后,在 init 脚本中,释放掉 initrd 的
空间,这就是借助 initrd 的引导过程。在这个过程之中 引导程序帮我们多做了一件
事 — 构建 ramdisk, 把 initrd 放入内存。
三、用 SYSLINUX/ISOLINUX 引导软盘和光盘
=======================================
上文已经说过了,SYSLINUX/ISOLINUX 是专门用来引导可移动介质的轻量级引导程序,
因为这样的介质通常不会固定只针对一种硬件,initrd 当然是 SYSLINUX/ISOLINUX
必须支持的功能了。这两种引导程序其实是一样的,没有多大区别,只是放在不同的
设备的引导区罢了。
3.1 配置 SYSLINUX/ISOLINUX
————————–
对于这两种引导程序,都会有一段引导代码,写入引导代码的时候,还同时需要一个
配置文件: syslinux.cfg/isolinux.cfg,同样,这两个文件也是一样的,唯一的区别
在于文件名,其各个字段的写法如下:
  DISPLAY xxx.txt
这指定了一个文件名,会在启动的时候显示的内容,该文件甚至可以包含一个 RLE
编码的图形文件,也就是大家在安装光盘启动时看到的那个;不过这个字段不甚重要,
我们就略过了。
  DEFAULT linux
指定 label 是 linux 的启动选项为缺省,当然也可以是别的。
  LABEL linux
    kernel vmlinuz
    append initrd=initrd26.gz ramdisk_size=1000000 vga=791
这就是一个启动描述,前面的 label 大家都认识了,之后分别是指定 kernel 和内核
参数,其中重要的参数就是 initrd= 指定 initrd 的文件和 ramdisk_size= 指定
initrd 的尺寸上限。其余的内核参数还可能有很多,不过这里的参数我们一般都可以
抄过来。这样的启动选项描述是可以有若干个的。
  PROMPT=1
这是说,向用户提示输入选择,直接回车就是缺省选项了
  TIMEOUT=0
没有时间限制,当然也可以指定一定时间之后自动进入缺省选项。
好了,就这么多,如果你会用 LILO 的话,用这个一定得心应手,说实话 grub 也
差不了太多。
3.2 安装 SYSLINUX/ISOLINUX
————————–
配置文件写完了,现在进入实质阶段,这里,两种引导程序还是略有差别的,首先介绍
SYSLINUX:
首先格式化引导介质为 FAT16 格式 (软盘似乎应该是 FAT12),我们的例子里面是 U 盘,
  mkdosfs -F16 -I /dev/sda
我们是操作整个 U 盘,而不是里面的唯一分区,这种情况不是很多见,只是手上的 U 盘
比较特殊,大部分情况下,我们也可以
  mkdosfs -F16 /dev/sda1
然后挂在该 U 盘,放入我们的 syslinux.cfg 以及 kernel 和 initrd.gz,还有其他
启动所需要的东东,之后 umount 该 U 盘。
  * 执行下面操作之前,必须 umount U 盘!*
然后写引导区:
  syslinux /dev/sda (或 syslinux /dev/sda1,如果是格式化的 /dev/sda1 的话)
至此就完成了。
对于光盘,同样不复杂,我们用 ISOLINUX:
在准备制作 ISO 的目录里添加一个子目录,比如 boot/isolinux/ ,然后放入
isolinux.cfg 和一个对所有光盘都一样的 isolinux 提供的引导介质 isolinux.bin,
当然还要放入相应的 kernel, initrd 等等,然后,制作 iso 的时候要使用 -b 参数:
  mkisofs -o output.iso \
    -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
    -no-emul-boot -boot-load-size 4 -boot-info-table \
    for-iso-dir/
最后的参数就是指定的光盘的目录了,-c 参数的那个文件是自动生成的,不用太担心,
其余参数都是固定的。事实上,也常常有人用 isolinux/ 而不是 boot/isolinux/ ,
这都是约定俗成的,你完全可以用自己的。这里的路径都是相对于光盘的根的,而和
制作光盘时的工作目录没有关系。
至此,你也会用 SYSLINUX/ISOLINUX 了。 :)
四、实战 — damn small linux + debian installer, 2 in 1 usb disk
=================================================================
1 下载 di 的 hd-image 里的 kernel image 和 initrd,放入 U 盘,同时把
businesscard iso 也放进去,从 iso 里找到 isolinux.cfg,记下里面的启动
设置
2 下载 dsl,把 KNOPPIX 目录搬到我们的 U 盘里,把 boot/isolinux/ 里面的
kernel image 和 initrd 也放入 U 盘的根目录,这时,U 盘根目录里同时有
二者的启动文件了,也记住 dsl 里面的 isolinux.cfg 的启动选项。
3 以其中一个的 isolinux.cfg 为基础,加入另一个的启动参数,注意 label
命名不要冲突了就可以了
4 umount U盘,然后对 U 盘运行 syslinux,写引导区,大功告成。
如前面帖子说过,dsl 的 initrd 之中,只搜索 /dev/sda[1-9] 而不搜索
/dev/sda,所以,如果如果像我们一样被迫用 /dev/sda 的话,就不得不修改一
下 dsl 的 initrd 里面的 linuxrc 了,除此之外,没有什么其它值得大书特书
的了。
Enjoy it!

Damn Small Linux + Debian Netinstall, 2 in 1

December 26th, 2005

一张小光盘可以放 200MB,一个 Damn Small Linux 只有 50MB,有点浪费,
young 建议我把两个 iso 合并一下,做成一个。
今天我把 Damn Small Linux 2.1rc2 (49MM) 和 Debian 3.1r0a (Sarge) Net
Install (109M) 合并起来做了一个 ISO,既可以运行 DSL Live CD,也可以
网络安装 Debian,呵呵
主要操作过程:
1. 从两个 iso 中提取数据文件,放在一个目录中,注意 netinstall 中有一个
   .disk/ 隐藏目录,如果没有无法安装,我吃了这个不小的亏。
2. 建立一个 isolinux 目录,参考原来两张光盘的 isolinux 目录,放入
   isolinux.bin 和 isolinux.cfg,以及一些说明性信息,boot.cat 不需要;
   isolinux.bin 对所有光盘都是一样的,不用改动; isolinux.cfg 和 lilo.conf
   有点类似,看看就会了,其他文件照猫画虎就行了,放置好 kernel 文件和
   initrd 文件
3. 重新生成 md5sum.txt,为所有东西做个 md5sum
4. 生成 iso:
      mkisofs -o twins.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \
      -no-emul-boot -boot-load-size 4 -boot-info-table -J -r \
       -input-charset iso8859-1  twins/
   最后的 twins/ 是我生成iso的源文件目录,开始的 twins.iso 是输出的 iso
   文件名。
其实主要就是 isolinux 这个引导程序,呵呵,不是很复杂。

半日惊魂—Linux 系统 Debug 小记

November 14th, 2005

原创文章,转载请保留出处 (bupt.org 或 gnawux.blogchina.com) 和作者 (王旭)
笔记本的 Debian Sid 系统于周末在无网络条件下出现故障,经过半天的排查、分析,
调整若干处,重启十数回,终于定位错误并修正,使系统恢复如初,特此记录
————-(目录)—————
1 万恶之源—背景概述
2 危机浮现—案发现场
2.1 现场一: 无线网卡无法启动了
2.2 现场二: CPUFreqd 启动失败
2.3 现场三: 硬件监视传感器失灵、快捷键停转
3 蛛丝马迹—错误排查
3.1 新安装的软家包没有问题
3.2 降级 udev 没有效果
3.3 新内核不是罪魁祸首
3.4 modconf 招来最大嫌疑
3.5 单用户模式找不到问题,濒临放弃
4 拨云见日—定位错误
4.1 udev 仍在风口浪尖
4.2 udev 拒绝认罪
4.3 真相只有一个
5 余音绕梁—疑虑尚存
5.1 为什么会这样
5.2 FHS 之疑
————————————
万恶之源—背景概述
===================
这是一台华硕 M2N 笔记本,Pentium M 处理器,Intel I845GMe 的芯片组/整合显卡,
以及 Intel Pro/Wireless 2100 (ipw2100) 802.11b 无线网卡,典型的迅驰配置,购
买一年以来,它的 40 G 硬盘上只装过一种操作系统—Debian GNU/Linux,而且只安
装过一次,稳定性、性能与功能都很不错,无可非议。
硬盘的分区是很讲究的老鸟的划分方式: /, /usr/, /var/, /home/ 分享硬盘,而恰恰
是这种细致的划分,让系统陷入了危机,如果上天重新给我一次机会,我一定不会分这
么多分区,不过这是后话了。
我的所有硬件,包括快捷按钮、无线网卡、屏幕切换、多媒体控制中心等,全部工作良
好,而根据电池的情况和计算机所执行的人物,我的 Dophin Pentium M CPU 的主频也
可以在 600MHz 到 1500MHz 之间浮动,一年之后的今天,电池也可以使用超过四个小
时,对我来说,这台爱机真是天衣无缝阿。
危机浮现—案发现场
===================
十一月十日,光光节前夜,在 IPW2100 进入官方内核的鼓舞下,我安装了 Debian 打
包的 2.6.14 内核,并且,证实该内核工作良好,系统完全正常,无须安装其他驱动和
补丁,这是我第一次在笔记本上使用这么省事的内核。
第二天 (11.11) 启动,系统仍然正常,无线网卡工作很好,我还用它传送了不少数
据,之后,升级了系统,安装了几个关于蓝牙软件包,准备有机会借个蓝牙适配器来调
教蓝牙玩玩。
晚上,回家之后,系统启动后突然发现出问题了……
现场一: 无线网卡无法启动了
————————–
第一个注意到的问题就是无线网卡加载失败了……这是不小的打击,刚才不是还好好的
么? 使用 modconf 加载 ipw2100 模块,仍然不起作用,究竟是怎么回事呢?
系统日志里没有说明这一点,重新启动之后注意到,居然是 firmware 无法加载? 我的
天阿,一年前他们就已经存在了阿? 况且刚刚换内核的时候也没有说过他们有不兼容的
情况阿,重新复制一次文件也毫无反应,究竟是什么原因呢,总不会是硬盘平白无故的
出问题了吧……
现场二: CPUFreqd 启动失败
————————-
第二个被注意到的问题是十分容易被发现的 cpufreqd 的问题,它作为处理器频率调整
工具十分重要,而且,它的启动脚本中,十分厚道的用红字显式出来—启动失败。
本来一次失败不容易被注意的,因为与 ipw2100 不同,cpufreqd 在我手动加载相应模
块之后便正常了,只是每次启动都需要手工加载一次,这点十分不正常!于是才引起了
我的极大注意。
现场三: 硬件监视传感器失灵、快捷键停转
————————————–
同时被观察到的还有硬件传感器 lm-sensors 的硬件温度采集失灵和笔记本的快捷键也
都一一停止了工作,这让我觉得十分懊恼,而他们和 cpufreqd 一样,稍后加载模块就
可以工作了,只是每次加载都无法保存,似乎 /etc/modules 根本就没人理。
蛛丝马迹—错误排查
===================
周五 (11.11) 当天晚上比较累了,于是就没有解决,问题一直拖到周日(11.13) 下午
才正式开始解决,这也就是所谓的“惊魂半日”,在劫后余生的今天,我回忆着把主要
的调试过程记录下来,重复一次显然不需要半天,不过当时的复杂考虑、犹豫、斗争等
夹杂着的情况下,用这么长时间还是挺正常的。
新安装的软家包没有问题
———————-
从出问题的先后顺序看,系统在出问题前后最大的变化莫过于更新了几个软件包、安装
了一些蓝牙相关的软件包,而其中恰好有一个是有关 firmware 的,它们就首当其冲的
成为了我的第一批刀下之鬼。
闲话少说,根据 /var/log/aptitude,直接删掉新安装软件包,使用 purge,让它随风
去,不留一点痕迹 (当是显然是没有现在这么轻松的心情了)。
重启系统……居然不管用! 无奈下只好考虑降级刚刚升级的软件包,可是它们看起来实
在是太无辜了,根本就不关系统和硬件什么事,于是,只好转移目光。
降级 udev 没有效果
——————
近来硬件相关的系统级软件包当中,udev 无疑是最具偶像气质的一个,因为彻底删除
了 hotplug,其出镜率一直居高不下,bug 多多也是此君最近表现枪眼的原因,自然
的,我对他投上怀疑的目光也是不无道理的。
迄今为止,我对系统调整仍然是软件包级别的,如果我就此深入调查一下的话,可能可
以节省至少两个小时的时间,不过,处理问题总要循序渐进的,以我的水平和对问题的
认识,不可能先验地直接去 Debug。
于是,我抱着侥幸心理,利用 /var/cache/apt/archives 目录下的藏品,把 udev 强
行降级,结果,根据上面的现象其实就已经注定这种尝试是不会有结果的,udev 包其
实根本就没有变动过的。
新内核不是罪魁祸首
——————
那么……会不会是新内核惹的祸呢? 这是我不愿意做的假设,我对这个官方内核包还是
很有信心的,可是事到如今,我也只好拿起怀疑一切的态度来了。
使用旧内核启动,问题不减当年,更换内核参数,仍然是问题如故……真是有些万念俱
灰的感觉阿,难道让我放弃么?!
modconf 招来最大嫌疑
——————–
想想这两天还动过些什么— modconf! 用它加载的模块在后来证明根本无效,包存在
/etc/modules 中的模块从来没有在启动过程中顺利启动的,这个东西已经把很多重复
的内容写到 /etc/modules 里面了,难道是它干的?
几乎一定是它了,去掉老的 /etc/modules,重新手动创建一个,只写我最需要的几个
模块,不再用 modconf 了,而是用 modprobe 一个一个来。
然后用 module-init-tools 的启动搅拌试一次,可以加载这几个模块,好了,重新启
动。
打击再一次降临,上面的修改,架空 modconf 根本没有取得效果,我仍然停留在原地,
甚至可能让情况更糟了。
单用户模式找不到问题,濒临放弃
——————————
使用单用户模式进入系统,问题丝毫没有变化,我开始把做过的大多数调整恢复,盼望
着新一次的系统更新可以还给我一个干净的系统。
不过,modules 刚才的问题还困扰着我,我仍然在观察着 /etc/rcS.d/ 的内容,
modules-init-tools 为什么会在那个时候不工作呢? 这个问题我似乎曾经在别的什么
地方遇到过啊……
拨云见日—定位错误
===================
这种时候放弃是一个选择,但我还有方法没有尝试,更多的蛛丝马迹仍然在不断地暴
露出来,我隐隐的感到—udev 还是有问题的。
udev 仍在风口浪尖
—————–
似乎有某个软件包宣称找不到设备,难道 udev 仍然不正常么? 来到 /dev/ 下面一
ls,吓了我一大跳—这么多文件,难道 udev 没有工作么?
大家知道,根据 hal (硬件抽象层) 提供的规则,udev 会在 /dev/ 下面创建一个
disk/ 目录,可是事实是,现在这个目录并不存在,可以得到结论:udev 根本就没工
作!
那么,启动过程中的 udev 到底发生了什么呢? dmesg 和 syslog 都没有给我答案,
我试试手动启动一下 udev,看看会怎么样。
/etc/init.d/udev start 运行的结果是,该程序已经在运行中了—那它在干什么?!
udev 拒绝认罪
————-
忽然我在又一次启动中注意到,udev 抱怨说它无法加载 tmpfs,所以无法启动。笑
话! /dev/shm 的 249MB 的 tmpfs 在那里乖乖的,你居然说挂不上! 作为愤青的我当
然不能接受,可是怎么才能知道这是为什么呢?
我把 /etc/udev/udev.conf 里面的日志记录级别从 “err” 调整到了 “info”,
冀望于它能够把更多信息写到 syslog 里面。不过,事实又一次证明了敌人的强大和
我的不成熟,把希望寄托到这里是徒劳的,syslog 里面连挂不上 tmpfs 都没写,那
只在系统启动时 post 出来的信息中存在……
局面似乎僵持在这里了
真相只有一个
————
不过,我还有杀手锏没有亮出来呢!
我注意到,udev 在 /etc/rcS.d/ 之中的位置是第三个,仅仅在 glibc 和
mountvirtualfs 之后,我们不妨手动启动一次系统,这样,谁犯的错误就是“秃子
头上的虱子”—明摆着的了。
grub 中设定内核参数 init=/bin/sh,这是绕过复杂登录过程的看家本领,如果密码
丢失或是什么其它特殊情况,这个手段是绕过 /sbin/init 的最好手段。不要说密码
了,任何守护进程都没有开过。
这时,系统启动后得到了 root 权限的 shell 提示符,我已经准备好解决问题了,
进入 /etc/rcS.d,一个一个的用 start 参数运行这些脚本,不多,只要三个就可以
发现问题的。
事实是,当运行到第二个的时候,也就是 mountvirtualfs,加载虚拟文件系统时,
问题已经产生,因为缺少 libpcre3.so,无法挂载!!!
这个错误其实刚才我已经注意到了,但它是 Perl 5 兼容政则表达式库,会那么关键
么? 我居然忽略了它! 是事实,正是它的缺席导致了 grep -E 运行出错,既无法挂载
虚拟文件系统,也会让 udev 出错,而它原本是在 /usr/lib/ 之下的,在 /usr/ 挂
载之前是不可能找到的。
解决问题很简单,复制一份到 / 分区里面的 /usr/lib/, 这个目录在 /usr 挂载之后
会被覆盖,但在挂载之前,它独自支撑起了这个系统。
重新起动……振奋人心的一刻终于来到了!问题解决,一切正常了!
余音绕梁—疑虑尚存
===================
为什么会这样
————
时至今日,我仍然不知道为什么会这样,是脚本的 grep 参数变化了,还是 grep 变
化了,还是 libpcre3 变化了才引发的半日惊魂? 这个问题从何而来的让我百思不得
其解,因为从软件包变化上,这个问题实在难以引人注意。
FHS 之疑
——–
可是根据 Linux 文件系统层次标准 (debian-policy 包中),/usr 不需要在系统启动
中始终存在,甚至应该可以位于 NFS 分区上的,为什么会这样呢? 究竟是哪里的问题
呢。
现在,经历劫后余生,我也希望大家要主义,如果没有特殊情况,/usr 和 / 还是放到
同一个分区之中吧,免生事端。
补充
====
目前(11.14 星期一,问题发生后的第一次更新系统),Debian 已经升级了 grep 软件包,
去掉了对 libpcre 的依赖,从而解决了这一问题。

debian下的grub启动选项管理

October 14th, 2005

那天偶和偶在版面上说相声的搭挡 LeoVirgo 都提到了根据 debian 的
kernel-img.conf
更新完内核后会自动调用 update-grub 来更新引导程序,就觉得这个东西一定可以
配置,否则每次总要改写一下 menu.lst 来修改启动内核参数毕竟不方便
恰逢今天为了上一贴的那个网卡驱动,编译了一次内核,就想着看看这个东西怎么工作
(阿?您问怎么看阿,当然是 man 了,男人嘛,如果是女同胞可以 alias 一下,
来个 woman 什么的)
发现,menu.lst 里面就有关于 update-grub 的设置,LeoVirgo 一定知道自动
修改的 menu.lst 上面有一大段注释吧,以
### BEGIN AUTOMAGIC KERNELS LIST
开始
我抄一段过来大家就知道是什么意思了
## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specifiv kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
# kopt=root=/dev/hda1 ro acpi_sleep=s3_bios resume=/dev/hda2
看到了不?这个就是设置内核参数的,我把对我有用的
acpi_sleep=s3_bios resume=/dev/hda2
这下,自动生成的配置文件里面就有我的自定义内核参数了,
还有这个
## should update-grub create alternative automagic boot options
## e.g. alternative=true
##     alternative=false
# alternative=false
可以指定一个其他的启动方式,缺省文件里面是单用户模式,偶好好的用机器,
要单用户模式做什么?出了问题 grub 还有命令行呢,去掉之,于是写成 false
怎么样,明白了吧,还有其它设置,呵呵,自己打开 menu.lst 看看就知道了,
如果用的不是 Debian,那我就不负责了;P

Switch to our mobile site