我需要修复一台服务器(SUSE Linux Enterprise Server),该服务器在负责 RAID 的硬件损坏并更换后停止正常启动。
启动过程卡在这条消息上:
Waiting for device /dev/disk/by-id/scsi-360{...}-part1
我试图找到 SLES 11 的实时 iso 来运行救援系统,但只能找到 12 到 15。所以我下载了版本 15,并从那里运行救援系统。
由此我可以看到 fstab 不正确,因为此处找到的 scsi id(与错误中相同)与 /dev/disk/by-id/scsi-..... 中的内容不同。
根据我发现的解决此问题的方法,如果我手动将 fstab 更改为正确的 ID 或分区名称(sda、sdb...),则应该可以解决该问题。所以我更改了分区名称(我应该只在这里输入磁盘 ID 吗?),并且在遵循网络上的指南时做了一些非常错误的事情。更改 fstab 后,我应该运行grub-install --root-directory=/mnt /dev/sda
但是,因为我使用的是带有 SLE 15 的实时 USB,所以 grub 不可用,只有 grub2。所以我运行 grub2-install ......这使得它安装 grub2 与 grub Legacy ......现在,当我尝试引导时,我收到一个 grub 错误:Welcome to GRUB! error: disk 'hd1,msdos1' not found. Entering rescue mode...
所以现在我不确定问题出在哪里。是因为我有两只幼虫吗? (我假设是这样)如果是这样,我的计划是删除 grub2 并运行这个工具使用 ubuntu live 笔。但如何删除 grub2?
或者问题出在其他地方?
这是我将其更改为使用 /dev/sdx 而不是 /disk/by-id/ 后的 fstab
请Unix高手帮忙
为了让分区与我检查的 blkid 相对应(这里可能存在一定的误差,但由于我能够使用 ubuntu live usb 浏览分区,我认为它们是正确的......)
更新:
运行 mkinitrd 出现错误:(
Root device(/dev/sda1) not found
如果我将所有引用从 sdX 更改为 by-id,也会出现同样的情况,显示与分区 id 相同的错误)
运行yast bootloader
使控制台不再更新。即使按 ctrl+c 后也是如此。但是,自从我输入“重新启动”并且它起作用后,它仍然在获取输入。
答案1
有点浏览你的故事,但是...
启动过程陷入此消息:等待设备 /dev/disk/by-id/scsi-360{...}-part1
在 Linux 中挂载文件系统的方法有很多种
- 按名称,例如 /dev/sda
- by-id,比如你的问题
- 按标签,具有分区标签集
- 另外一两个,有兴趣的话谷歌一下
在我看来,按 id 或按 uuid 挂载是首选,因为它可以避免一系列我不会去解释的问题,但是当你忘记在情况发生变化时更新 scsi-id 时很容易失败。 新的 raid 控制器将为现有卷提供不同的 scsi-id,这是您的问题。
by-name
只要您只有一个磁盘或一个 raid 卷,安装就是一种故障保护。那么就永远是这样了/dev/sda#
。所以我的建议是
- 删除除启动磁盘之外的所有其他磁盘
- 仅存在一张启动磁盘,或者是您的操作系统的一个 raid 卷。暂时断开与所有其他磁盘的电缆连接
- 这假设您的引导分区与操作系统根分区位于同一磁盘或 raid 卷上;从技术上讲,您可以将启动分区放在与根分区不同的磁盘上,除非您有充分的理由,否则您不想这样做。
- 编辑您的文件
/etc/fstab
,使其仅引用/dev/sda
挂载根分区和交换。从技术上讲,您不需要在 fstab 中包含 boot 或 efi 分区,这不是启动的要求。从你的第一张照片sdd1
来看,swap
我认为这是一个错字,应该是sda
?因为sdd
是与 不同的磁盘sda
。从技术上讲,您不需要安装交换来启动并拥有一个正在运行的系统,因此可以想象您可以只使用一个/dev/sda# / defaults 0 0
来安装根分区,其中#
是正确的分区号。 - SLES 11 很棒,因为它允许埃利洛而不是 GRUB 或 GRUB2。如果您知道自己正在使用 elilo,那么您需要
elilo.conf
在启动分区而不是下面的那个/etc/
。在那里,您将看到通过 scsi-id 调用引导分区的参考,这将是旧的且不正确的分区。您可以简单地将其更改为/dev/sda#
仅存在一个磁盘(或 raid 卷),其中 # 是正确的分区号,通常为 1。同样的想法或原则也适用于 grub - 您需要更正磁盘的所有旧引用grub 中的 scsi-id,现在您只需将其更改为sda
.启动系统,然后识别所有内容的新 scsi-id 并更新您的 elilo.conf 或 grub 文件以及/etc/fstab
.
考虑更改splash=silent
为splash=verbose
.
通过使用实时启动 CD 和您的图片,您已经显示了正确的/dev/disk/by-id
信息,因此您可以从技术上输入所有内容,但我发现先输入然后dev/sda#
复制并过去会更容易。
在你的最后一张照片中,上面写着root = /dev/disk/by-id/blabla
。那里到处都写着 by disk by-id 将其更改为/dev/sda#
.如果它有 a,part1
则 # = 1,part2
is # = 2,依此类推。我不知道 sles 11 中的 grub 命令如何进行正确的更新,而不是编辑 menu.lst ,上面写着“不要编辑我”。您可以手动编辑引导分区上的 menu.lst,它现在可以工作,但是当新内核发生更新时,它将引用任何全局 grub 模板(可能在 /etc 下),您将遇到这个问题再次。抱歉,我只知道并在 RHEL7 中grub2-mkconfig
编辑;/etc/default/grub.conf
你必须找出 sles11 中用于 grub 或 grub2 的程序。