AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 57366
Accepted
Stu
Stu
Asked: 2009-08-22 16:07:56 +0800 CST2009-08-22 16:07:56 +0800 CST 2009-08-22 16:07:56 +0800 CST

如何从软件 raid 1 阵列启动 linux

  • 772

我正在尝试在现有的 linux ubuntu 安装上创建一个 raid 阵列。

我正在学习本教程... http://howtoforge.org/software-raid1-grub-boot-fedora-8

在经历了一百万次之后,我终于明白发生了什么。您在新的空白驱动器上创建了 raid 设备,将旧 / 驱动器复制到它,设置 grub menu.lst、fstab、mtab initrd 和 grub MBR 以全部指向 raid 设备(我已经定义并且正在工作) 然后重新启动。启动后,您现在可以在 RAID 设备 (/dev/md0) 中运行,然后您只需将原始驱动器连接到 RAID 阵列,它就会同步,瞧,您就完成了。

因此,我将 menu.lst 设置为主要从 raid 设备加载内核和 initrd,并故障转移到我原来的(仍然完好无损)旧磁盘。当我重新启动时,它总是失败。我启动机器,运行我的新 grub 条目,它显示“找不到错误 15 文件”。网上有很多关于它的东西,似乎没有任何帮助。

唯一奇怪的是当我用 grub 设置 MBR 时,你说“root (hd0,0)”,我终于明白它的意思了,它应该说文件系统类型是 ext2fs,分区类型 0xfd 或类似的东西那。我的什么也没说。但是当我运行 setup (hd0) 和 setup (hd2) 时,它说它正在对正确的驱动器做正确的事情。所以我认为它正在工作。但它无法从 md0 设备加载 initrd/内核。

我唯一在想的另一件事是,grub 到底是如何知道什么是突袭设备。内核没有加载,软件raid模块没有加载,愚蠢的小grub怎么知道从哪里加载initrd?所以我在想,好吧,从 /dev/md0 到 /dev/sdc1 (新的 raid 驱动器)的某个地方有一个映射,但我看不出这会发生在哪里。为了踢球,(我以各种组合做了很多次)我尝试设置 grub menu.lst 以尝试从 root=/dev/sdc1 (我的新驱动器)加载 initrd 和内核,它仍然说找不到文件. 所以要么 grub mbr 设置不起作用,要么我错过了一些非常简单的东西。

有任何想法吗?

这里有更多信息...

root@io:~# cat /proc/mdstat
个性:[线性] [多路径] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : 活动 raid1 sdc1[1]
      18771840 块 [2/1] [_U]



root@io:~# fdisk -l

磁盘 /dev/sda:20.8 GB,20847697920 字节
255 个磁头,63 个扇区/磁道,2534 个柱面
单位 = 16065 * 512 = 8225280 字节的柱面
磁盘标识符:0x9d949d94

   设备引导开始结束块 ID 系统
/dev/sda1 * 1 2337 18771921 83 Linux
/dev/sda2 2338 2434 779152+ 5 扩展
/dev/sda5 2338 2434 779121 82 Linux 交换/Solaris

磁盘 /dev/sdb:320.0 GB,320072933376 字节
16 个磁头,63 个扇区/磁道,620181 个柱面
单位 = 1008 * 512 = 516096 字节的柱面
磁盘标识符:0x00000000

   设备引导开始结束块 ID 系统
/dev/sdb1 * 1 4064 2048224+ 83 Linux
/dev/sdb2 4065 620181 310522968 83 Linux

磁盘 /dev/sdc:20.0 GB,20020396032 字节
255 个磁头,63 个扇区/磁道,2434 个柱面
单位 = 16065 * 512 = 8225280 字节的柱面
磁盘标识符:0x00000080

   设备引导开始结束块 ID 系统
/dev/sdc1 * 1 2337 18771921 fd Linux raid 自动检测
/dev/sdc2 2338 2434 779152+ 5 扩展
/dev/sdc5 2338 2434 779121 82 Linux 交换/Solaris

磁盘 /dev/md0:19.2 GB,19222364160 字节
2 个磁头,4 个扇区/磁道,4692960 个柱面
单位 = 8 * 512 = 4096 字节的柱面
磁盘标识符:0x00000000

磁盘 /dev/md0 不包含有效的分区表



root@io:~# mdadm -E
mdadm:没有要检查的设备



root@io:~# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=5248ed76:cba39cc2:3082255a:649c0d18
根@io:~#



root@io:~# cat /boot/grub/menu.lst

默认 0
# 2009 年 8 月 14 日添加了这个
后备 1

## 超时秒
# 设置超时时间,单位为 SEC 秒,在自动启动默认项之前
#(通常是定义的第一个条目)。
超时 3

##隐藏菜单
# 默认隐藏菜单(按ESC查看菜单)
隐藏菜单

# 添加这个 8/14/09 用于 raid 启动,注意这将在下一次内核更新时被吹走
# 如果它在魔法标记之后
# 这意味着我们必须在内核升级时手动更新它:-(
# 在 grub 中 hd0 = /dev/sda and hd1 = /dev/sdb and hd2 = /dev/sdc 我希望
# 我们现在把 sdc 放在第一位
标题 Ubuntu 8.04.3 LTS,内核 2.6.24-24-generic (raid)
根 (hd2,0)
#kernel /boot/vmlinuz-2.6.24-24-generic root=UUID=b11d6b08-fdfe-4b0d-adec-4e263455be23 ro
内核/boot/vmlinuz-2.6.24-24-generic root=/dev/md0 ro
initrd          /boot/initrd.img-2.6.24-24-generic
quiet




title           Ubuntu 8.04.3 LTS, kernel 2.6.24-24-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-24-generic root=UUID=d8c402cc-7445-4878-b3aa-c9568b740b51 ro
initrd          /boot/initrd.img-2.6.24-24-generic
quiet


title           Ubuntu 8.04.3 LTS, kernel 2.6.24-24-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-24-generic root=UUID=d8c402cc-7445-4878-b3aa-c9568b740b51 ro single
initrd          /boot/initrd.img-2.6.24-24-generic



root@io:~# blkid
/dev/sda1: UUID="d8c402cc-7445-4878-b3aa-c9568b740b51" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda5: TYPE="swap" UUID="e0509276-30eb-4dcb-8e17-20f8244f5403"
/dev/sdb1: LABEL="alt" UUID="ea1789eb-9d6f-47a9-a074-18121792b30a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb2: LABEL="sp" UUID="3b6d1173-f9fd-4a3e-8e5d-249fc682355b" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdc1: UUID="76ed4852-c29c-a3cb-5a25-8230180d9c64" TYPE="mdraid"
/dev/md0: UUID="b11d6b08-fdfe-4b0d-adec-4e263455be23" SEC_TYPE="ext2" TYPE="ext3"


linux
  • 3 3 个回答
  • 6963 Views

3 个回答

  • Voted
  1. Best Answer
    Stu
    2009-08-29T08:09:22+08:002009-08-29T08:09:22+08:00

    对于其他最终遭受错误 15 悲痛的人来说,grub 中的设备命名方案(hd0、hd1、hd2...)最终在 grub 引导和 grub 在系统已启动并正在运行。我在 root (hd2,0) 上花了一个星期,因为 grub 告诉我我想要的驱动器被调用了。但是当我在启动时掉入 grub shell 时,我惊讶地发现机器启动时是 hd2,启动时是 hd1。所以我将 menu.lst 更改为使用 root (hd1,0) 并开始工作。我希望用那个来拯救别人的头发。

    • 4
  2. gbjbaanb
    2009-08-23T05:43:11+08:002009-08-23T05:43:11+08:00

    关于 Grub 的事情是它在 linux 系统的其余部分(显然)之前被调用,所以它对你的软件 raid 一无所知。它只看到裸硬盘驱动器。

    因此,在 RAID1 阵列的两个驱动器上安装 grub 非常重要。BIOS 会选择一个来启动,如果 grub 没有安装在那个驱动器上,它就不会启动。(当我的一个 sw RAID1 配置中的驱动器出现故障时,我发现这一点很困难 - 系统拒绝启动说它没有启动分区.. 安装了 grub 的驱动器出现故障,我只剩下一个非-可启动硬盘。在其上安装 Grub 可修复它)

    因此,在提示符下打开 grub(您可以在运行 linux 的情况下执行此操作)并输入:

    grub
    

    获取 grub 提示。

    root(hd0,0)
    setup(hd0)
    
    root(hd1,0)
    setup(hd1)
    

    将 grub 设置为驱动器上的每个第一个分区(***如果您的引导分区位于驱动器上的其他位置,请更改该 0 以反映正确的分区)然后安装程序安装 grub 引导文件。

    这应该是你需要做的一切。如果它不能正常工作,你确定你有正确的引导分区,并且你的驱动器的布局是一样的吗?

    • 3
  3. womble
    2009-08-22T17:51:23+08:002009-08-22T17:51:23+08:00

    Grub doesn't know about your RAID device; it just reads direct from the drive, which (in a RAID-1 setup) is still fine, because an entire copy of the drive is right there (not chopped up into bits as it would be on a RAID-5 or RAID-10 configuration).

    You haven't really provided enough info to determine what's going on though; what would handy would be:

    • Partition tables for all your drives;
    • RAID configuration details (output of /proc/mdstat, mdadm -E, etc)
    • 2

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve