Linux

mdadm raid 1 grub 僅在 sda 上

  • February 12, 2015

我剛剛用 mdadm 完成了一個 CentOS 6.3 64 位伺服器的設置,但是一個燈泡亮了,我意識到 grub 只會安裝在第一個驅動器上,它的用途和摩托車上的煙灰缸差不多。

我看了看以證實我的懷疑:

grub> find /grub/stage1
find /grub/stage1
(hd0,0)

所以我更新了我的設備地圖,如下所示:

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

(注意 (hd1) 條目是我添加的

所以然後我嘗試在 /dev/sdb 上安裝 grub

我得到:

grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... no

Error 15t: File not found

所以我做了一些Google搜尋(遺憾的是,Google剛剛做得很好,並收集了 100 個在這裡沒有幫助的 grub 安裝範例)

在找到一些線索後,我嘗試了:

# grub-install --recheck /dev/sdb

Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

# grub-install /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

哪種建議 grub 現在也安裝在 /dev/sdb 上,但是如果我再看一下,我仍然會得到:

grub> find /grub/stage1
find /grub/stage1
(hd0,0)

2 個驅動器的分開輸出:

SDA

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
1      17.4kB  500MB   500MB   ext3         1     boot
2      500MB   81.0GB  80.5GB               2     raid
3      81.0GB  85.0GB  4000MB               3     raid
4      85.0GB  3001GB  2916GB               4     raid

深發展

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
1      17.4kB  500MB   500MB   ext3         1
2      500MB   81.0GB  80.5GB               2     raid
3      81.0GB  85.0GB  4000MB               3     raid
4      85.0GB  3001GB  2916GB               4     raid

和 mdadm mdstat:

Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
     3905218 blocks super 1.1 [2/2] [UU]

md2 : active raid1 sdb4[1] sda4[0]
     2847257598 blocks super 1.1 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
     78612189 blocks super 1.1 [2/2] [UU]

有沒有人能夠對這種情況有所了解,感覺就像我現在 99% 都在那兒,並且遺漏了一些明顯的東西。

謝謝。

編輯更新:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0               74G   18G   53G  25% /
tmpfs                 580M     0  580M   0% /dev/shm
/dev/sda1             462M   98M  341M  23% /boot
xenstore              580M   64K  580M   1% /var/lib/xenstored

/ 在 md0 上,它由 sda2 和 sdb2 交換是 md1,它是 sda3 和 sdb3 md2 是 LVM 但是 /boot 只在 /sda1

我想這就是問題所在,解決方法是創建 md4 並讓它包含 sd a 1 和 sd b 1

也許我腦子裡有些混亂,但我認為 grub 沒有安裝在分區上,而是驅動器的前幾個塊,即 sda 或 hd0/1

任何澄清和建議表示讚賞。

這應該是你的問題

root (hd1,0)
Filesystem type is ext2fs, partition type 0x83

採取以下步驟:

  • 在 /dev/sda1 和 /dev/sdb1 上創建 2 個 /boot 分區 - 鍵入 fd(Linux 自動檢測 raid) - 使用您最喜歡的工具(fdisk、cfdisk、gparted…)(fd00 用於 GPT)
  • 請記住在 sda1 和 sdb1 兩個分區上打開可引導標誌(不適用於 GPT)
  • 強制磁碟成為全新的 RAID:
mdadm --zero-superblock /dev/sda1 
mdadm --zero-superblock /dev/sdb1
  • 在創建將作為 /boot 分區的 RAID 元數據時,請使用 0.9 版。Linux 無法自動檢測較新的版本(沒有 ramdisk)。
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.9
  • 使用 ext2 或 ext3 格式化
  • 安裝您選擇的 Linux,無需格式化 /boot

在您的發行版首次啟動後:

  • 修復您的 /etc/fstab 以將 /boot 指向 /dev/md0(也許沒有必要)
  • 在 2 個磁碟 MBR 上安裝 grub
# grub /dev/sda
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
quit

# grub /dev/sdb
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
quit
  • 編輯您的引導載入程序(Grub1 的說明)
  • 搜尋“預設”行並在下面添加“備份”選項
vi /boot/grub/menu.lst
default 0
fallback 1
  • 將另一個條目添加到您的引導載入程序(再次,在我的情況下,我選擇了 grub1,因為它不太複雜並且足以滿足我的需求),每個條目指向作為 raid 成員的不同引導分區:
title           Debian GNU/Linux, kernel 2.6.32-5-686  (default)
root            (hd0,0)
kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
initrd          /initrd.img-2.6.32-5-686

title           Debian GNU/Linux, kernel 2.6.32-5-686  (fallback)
root            (hd1,0)
kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
initrd          /initrd.img-2.6.32-5-686 
  • 請注意,就我而言,我的 / md raid 上有一個 LVM 層。

完畢。這應該足以讓您擁有一個“冗餘”引導載入程序。

引用自:https://serverfault.com/questions/483141