Сервер Ubuntu, таблиця розділів gpt, mdadm, збій завантаження grub


9

Основні деталі робочої системи:

Я використовував серверний компакт-диск Ubuntu 12.04 для встановлення сервера.

У мене є 4 диски. На всіх дисках я зробив наступне, подібне до цього способу :

  • створив розділ обміну 2 ГБ
  • створив розділ 256 Гб / завантаження
  • створив розділ RAID10 на 64 ГБ (для root)
  • створив великий розділ RAID10, зайнявши решту місця

Я відформатував завантаження як ext3. Я встановив RAID10 на кореневих та великих розділах. Я відформатував корінь один ext4. Я створив логічний том на великому і відформатував його ext4.

Отримана система працює добре, а черевики - чудово.

Деталі проблеми:

Тоді я вирішив задокументувати процедуру відмови. В якості першого кроку я вирішив переустановити grub.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

Таким чином, схоже, що він не вдався, але також здається, що він здався і не вніс змін. Тому я перезавантажився. Завантаження не вдалося. Він просто висить на чорному екрані з миготливим курсором приблизно на 4 лінії вниз. Якщо я завантажую, утримуючи "Shift", я отримую слово "GRUB" зліва від курсору, але інтерактивного запиту немає.

У цей момент я використовував завантажувальний ремонт-диск для створення цього звіту: http://paste.ubuntu.com/966531/

Зауважте у вищезгаданому звіті, він говорить, що завантажувач не вказує на правильний сектор для core.img. (sda - це віртуальний cd; sdb - це завантажувальний диск; sdc - це дзеркало sdb, але завантаження не є дзеркальним відображенням, просто окремий неспоріднений розділ є та відформатований ext3; sdd та sde мають місце для завантаження, але він не відформатований)

Потім я завантажився з компакт-диска сервера Ubuntu, запустив систему порятунку і видав наступні команди, які виконані без помилок (де sda - це віртуальний компакт-диск, а b, c, d, e - диски, які були a, b, c , d у попередніх командах grub):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

У цей момент я використовував завантажувальний ремонт-диск для створення цього звіту: http://paste.ubuntu.com/966561/

Зауважте, що у наведеному вище звіті проблема з core.img відсутня. Здається, це вказує на правильний сектор.

Тепер, якщо я спробую завантажитися, я отримую запит на груб. Якщо я запускаю "set", я бачу, що корінь знайдений і встановлений. Якщо я запускаю "ls /", я бачу свою кореневу директорію з тома raid, включаючи файл ядра vmlinuz. Якщо я набираю "ls / vmlinuz", він говорить "помилка: файл не знайдено." Він говорить про ту саму помилку, якщо я використовую команду "linux", щоб спробувати завантажити ядро. Файл vmlinuz не вказаний, якщо я використовую "ls -l /".

Надмірно деталізовані деталі, якщо ви хочете дотримуватися:

Я помітив, що також немає /boot/grub/grub.cfg, тому я побіг

# grub-mkconfig -o /boot/grub/grub.cfg

Але проблема залишається.

Якщо я використовую інструмент "gptsync", в цій поведінці змін не буде.

Завантажувально-відновний диск не буде ремонтувати систему, тому що він хоче завантажуватись із біозаписом із підтримкою EFI. Я коротко вивчив це, але не знаю, як це працює. Я знайшов оболонку UEFI в своїх варіантах завантаження, але я нічого не знаю про це, і не бачу, як змінити запуск звідти (наприклад, для завантаження CD з цієї оболонки EFI).

Я також читав цю сторінку , але Ubuntu не поставляється з командою "grub", тому я не можу точно слідувати за нею. Я міг би просто встановити цю команду, але мені цікавіше дізнатись, як інсталятору Ubuntu вдалося встановити її, а не іншим налаштуванням. Він використовував блокові списки?

Ось вихід розлученого під час завантаження на завантажувальний ремонт-диск (де тут sdb - перший жорсткий диск, sda при завантаженні з диска, а "boot" змінюється на "bios_grub" у 2-й посилання вставки):

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

Ось непов’язана супер-стара віртуальна машина для порівняння (для всіх, хто не знає завантажувальний ремонт-диск ): http://paste.ubuntu.com/966799/

Ось остання паста із проблемної системи після запуску вищезгаданого grub-mkconfig, а також встановлення "bios_grub" назад до "boot". http://paste.ubuntu.com/966808/

Порівнюючи обидві, це виглядає цікаво:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

Схоже, у рейду є завантажувальні файли, а sdb2 не відформатований. (незважаючи на це, система завантажилася перед запуском grub-install). З рятувального компакт-диска "mount -t ext3 / dev / sdb2 / boot" виходить з ладу. Але має сенс, що це заплутає речі, оскільки grub використовує розділ 2 явно (2 в команді parted, для якої bios_grub увімкнено).

Тому я зробив щось подібне:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

Потім перезавантажився, і у мене знову чорний екран, жодного запиту. http://paste.ubuntu.com/966848/

Отже, на даний момент я здогадуюсь, що коли біос_груб встановлений, grub встановлюється не в MBR, а не в файлову систему ext3 на ext3, а на сам розділ, як ніби це EFI ... що, очевидно, буде безлад до файлової системи ext3. І з мого короткого читання про EFI, це звучало так, що EFI передбачає, що перший розділ - це завантаження, але в моєму випадку перший - своп, а також він повинен бути FAT, а не чимось незмінним ... так що це робить мало / ні сенс, я все ще повністю втрачений без підказки. [EDIT: тепер у мене є поняття ... пропустіть трохи для оновлення]

І тепер, коли я натискаю ремонт на завантажувальному-ремонтному диску , він запитує щось інше. Востаннє помилка була захована під вікном, і мені довелося перетягнути іншу, щоб побачити її. Цього разу головне вікно відсутнє, а нове вікно говорить:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

Тож я натиснув так, і він сказав, що він успішно відреставрувався, і створив іншу пасту: http://paste.ubuntu.com/966862/

Але в мене все ще є чорний екран із миготливим курсором.

Тепер моя теорія полягає в тому, що завантаження перезаписане нежирним не-EFI, що є лише грубим кодом, який інакше був би в секторах 0-63 раніше. На щастя я наткнувся на дуже чітку заяву на цій сторінці, яка, ймовірно, завершила моє розуміння того, що все це означає. А потім після того, як я це виявив, Джеремі опублікував відповідь, яка, якщо це правда, підтверджує, що це ключова концепція, яка відсутня. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

Запитання:

Що відбувається? Чому груб не повинен завантажуватися? Чому на ньому написано "файл не знайдено"?

Чому grub не хоче встановити без цього налаштування, яке я встановив з розділеним (який не встановлений установщиком Ubuntu)? Я подумав, що все, що мені потрібно для його встановлення, - це окремий / завантажувальний механізм, який не є в LVM, ані в програмному RAID, оскільки мій корінь знаходиться в RAID, а таблиця розділів - GPT.

Як установник Ubuntu CD встановлює його без цієї проблеми та без налаштування bios_grub?

Я також розглядаю можливість використання ІФІ. Якщо це гарна ідея, і є стандартний спосіб її налаштувати, я завжди готовий до вивчення нових речей.

Найшвидшою відповіддю, яка зробила б мене щасливим, навіть не відповідаючи на всі мої запитання, - це набір команд, які я можу запустити з рятувального компакт-диска, щоб виправити завантажувач таким же чином, як це зробив установочний компакт-диск. Було б також дуже приємно, якби я міг запускати їх із завантаженою системою замість CD.


Чи можете ви додати вихід друку з проділу?
Джеремі

Ви бачите, що в 2-х посиланнях рядка 993, але за запитом я додаю це до свого запитання.
Петро

Відповіді:


8

Рішенням є використання розділу bios_grub, який не є тим самим, як розділ / boot.

За замовчуванням розділ bios_grub дорівнює 1MiB, і він повинен бути позначений bios_grub. Мій - перший розділ на моєму диску. Якщо ваш розділ 2 є насправді / завантажуваним, як підказано, це було б неправильно, і вам слід зробити інший розділ 1MiB.

У GPT та GRUB2 мінімальна файлова система має три розділи: bios_grub, root, swap. (не зовсім впевнений, що потрібен замін)

Чому grub не завантажується після просто запуску "grub-install"?

Невідомо ... Ви можете подумати, що він нічого не змінить, якщо чітко сказано, що він не може вбудовуватися, тому він не може працювати.

Чому на ньому написано "файл не знайдено"?

/ vmlinuz - це симпосилання, що використовує завантажувальний розділ, а завантажувальний розділ пошкоджений. Код bios_grub був написаний поверх його структури ext3. Це, ймовірно, означало, що / boot не був змонтований, а файли grub, які там були, насправді були в кореневій системі, яка не містила ядра.

Чому не хоче встановити grub без цього налаштування, яке я встановив з проділом

У таблиці розділів GPT немає місця для завантажувача, на відміну від MBR. Отже, для створення завантажувального коду повинен бути створений конкретний розділ. Перед запуском "grub-install" вкажіть цей розділ за допомогою команди:

    parted /dev/sda set 1 bios_grub on

Я подумав, що все, що мені потрібно, це окремий / завантажувальний. Як установник CD Ubuntu встановлює його без налаштування bios_grub?

Ця вимога, здається, є всім, що потрібно для інсталятора Ubuntu, але це створює нестандартну систему, яка легко порушується.

Коли GRUB каже: "Ця мітка розділу GPT не має завантажувального розділу BIOS ", це означає розділ bios_grub, а не / завантаження.


Дякую. Це насправді дуже близько до того, над чим я зараз працюю. Дивіться моє "Я все ще повністю загублений без підказки". розділ вище. Тепер моя теорія полягає в тому, що завантаження перезаписане нежирним не-EFI, що є лише грубим кодом, який інакше був би в секторах 0-63 раніше. Я працюю над експериментом, а потім дам вам знати, як це відбувається.
Петро

Ви використовуєте Ubuntu? Чи існує спосіб встановлення Ubuntu належним чином встановити за допомогою розділу bios_grub?
Петро

@Peter Я використовую Ubuntu, і якщо ви зробите керований розділ, інсталятор повинен налаштувати його правильно. Я знаю, що це зробило для мене інсталятор 11.10.
Джеремі

Дуже дякую. Це відповідь. Далі я спробую з більш складними налаштуваннями (рейд і lvm на завантаженні), а потім я відредагую вашу відповідь деталями.
Петро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.