ОБНОВЛЕНИЕ: я убедился, что приведенное ниже описание также работает для Ubuntu 16.04. Другие пользователи сообщили о работе 17.10 и 18.04.1.
ПРИМЕЧАНИЕ: этот HOWTO не даст вам LVM. Если вы тоже хотите использовать LVM, попробуйте установить рабочий стол Ubuntu 18.04 с RAID 1 и LVM на компьютер с UEFI BIOS .
После нескольких дней попыток у меня теперь есть работающая система! Вкратце, решение состояло из следующих шагов:
- Загрузитесь с помощью Ubuntu Live CD / USB.
- Разбивает SSD по мере необходимости.
- Установите недостающие пакеты (mdadm и grub-efi).
- Создайте разделы RAID.
- Запустите установщик Ubiquity (но не загружайтесь в новую систему).
- Патч установленной системы (initramfs), чтобы включить загрузку из корня RAIDed.
- Заполните раздел EFI первого SSD с помощью GRUB и установите его в загрузочную цепочку EFI.
- Клонировать раздел EFI на другой SSD и установить его в загрузочную цепочку.
- Выполнено! Ваша система теперь будет иметь избыточность RAID 1. Обратите внимание, что после обновления ядра ничего делать не нужно, так как разделы UEFI не затрагиваются.
Ключевым компонентом шага 6 решения была задержка в последовательности загрузки, которая в противном случае выводила меня прямо в приглашение GRUB (без клавиатуры!), Если какой-либо из SSD отсутствовал.
Подробный HOWTO
1. Загрузка
Загрузитесь с помощью EFI с флешки. Как именно будет зависеть от вашей системы. Выберите Попробовать Ubuntu без установки .
Запустите эмулятор терминала, например, xterm
чтобы запустить команды ниже.
1.1 Вход с другого компьютера
Испытывая это, я часто находил, что легче войти с другого, уже полностью настроенного компьютера. Это упрощает вырезание и вставку команд и т. Д. Если вы хотите сделать то же самое, вы можете войти через ssh, выполнив следующие действия:
На компьютере, который нужно настроить, установите сервер openssh:
sudo apt-get install openssh-server
Измени пароль. Пароль по умолчанию для пользователя ubuntu
пуст. Вы, вероятно, можете выбрать пароль средней надежности. Это будет забыто, как только вы перезагрузите свой новый компьютер.
passwd
Теперь вы можете войти в сеанс Ubuntu Live с другого компьютера. Ниже приведены инструкции для Linux:
ssh -l ubuntu <your-new-computer>
Если вы получили предупреждение о подозрении на атаку типа «человек посередине», вам необходимо очистить ключи ssh, используемые для идентификации нового компьютера. Это потому, что openssh-server
генерирует новые ключи сервера каждый раз, когда он установлен. Используемая команда обычно печатается и должна выглядеть так:
ssh-keygen -f <path-to-.ssh/known_hosts> -R <your-new-computer>
После выполнения этой команды вы сможете войти в сеанс Ubuntu Live.
2. Перегородка дисков
Очистите все старые разделы и загрузочные блоки. Предупреждение! Это уничтожит данные на ваших дисках!
sudo sgdisk -z /dev/sda
sudo sgdisk -z /dev/sdb
Создайте новые разделы на самых маленьких из ваших дисков: 100M для ESP, 32G для RAID SWAP, остальные для корня RAID. Если ваш накопитель sda самый маленький, следуйте разделу 2.1, в противном случае - разделу 2.2.
2.1 Создание таблиц разделов (/ dev / sda меньше)
Сделайте следующие шаги:
sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sda
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sda
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sda
Скопируйте таблицу разделов на другой диск и создайте уникальные идентификаторы UUID (на самом деле будут созданы идентификаторы UUID для sda).
sudo sgdisk /dev/sda -R /dev/sdb -G
2.2 Создайте таблицы разделов (/ dev / sdb меньше)
Сделайте следующие шаги:
sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sdb
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sdb
Скопируйте таблицу разделов на другой диск и сгенерируйте уникальные UUID (на самом деле будут сгенерированы UUID для sdb).
sudo sgdisk /dev/sdb -R /dev/sda -G
2.3 Создать файловую систему FAT32 в / dev / sda
Создайте файловую систему FAT32 для раздела EFI.
sudo mkfs.fat -F 32 /dev/sda1
mkdir /tmp/sda1
sudo mount /dev/sda1 /tmp/sda1
sudo mkdir /tmp/sda1/EFI
sudo umount /dev/sda1
3. Установите недостающие пакеты
Ubuntu Live CD поставляется без двух пакетов ключей; Граб-ефи и мдадм. Установите их. (Я не уверен на 100%, что здесь нужна grub-efi, но чтобы сохранить симметрию с грядущей установкой, внесите и ее.)
sudo apt-get update
sudo apt-get -y install grub-efi-amd64 # (or grub-efi-amd64-signed)
sudo apt-get -y install mdadm
Вам может понадобиться grub-efi-amd64-signed
вместо того, grub-efi-amd64
если у вас включена безопасная загрузка. (См. Комментарий Alecz.)
4. Создайте разделы RAID
Создайте устройства RAID в деградированном режиме. Устройства будут завершены позже. Создание полного RAID1 иногда приводило к проблемам во время ubiquity
установки ниже, не знаю почему. (mount / unmount? format?)
sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 missing
sudo mdadm --create /dev/md1 --bitmap=internal --level=1 --raid-disks=2 /dev/sda3 missing
Проверьте состояние RAID.
cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
bitmap: 0/2 pages [0KB], 65536KB chunk
md0 : active raid1 sda2[0]
33537920 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
Разбейте устройства md.
sudo sgdisk -z /dev/md0
sudo sgdisk -z /dev/md1
sudo sgdisk -N 1 -t 1:8200 -c 1:"Linux swap" /dev/md0
sudo sgdisk -N 1 -t 1:8300 -c 1:"Linux filesystem" /dev/md1
5. Запустите установщик
Запустите установщик ubiquity, исключая загрузчик , который все равно не будет работать . ( Примечание : если вы вошли в систему через ssh, вы, вероятно, захотите выполнить это на своем новом компьютере.)
sudo ubiquity -b
Выберите « Что-то еще» в качестве типа установки и измените md1p1
тип на ext4
, отформатируйте: да и точку монтирования /
. md0p1
Раздел будет автоматически выбран в качестве свопа.
Получите чашку кофе, пока установка заканчивается.
Важное замечание: После завершения установки выберите Продолжить тестирование, поскольку система еще не готова к загрузке.
Завершите устройства RAID
Присоедините ожидающие разделы sdb к RAID.
sudo mdadm --add /dev/md0 /dev/sdb2
sudo mdadm --add /dev/md1 /dev/sdb3
Убедитесь, что все RAID-устройства исправны (и при необходимости синхронизируются).
cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 0.2% (465536/216269952) finish=17.9min speed=200000K/sec
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sdb2[1] sda2[0]
33537920 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
Процесс ниже может продолжаться во время синхронизации, включая перезагрузку.
6. Настройте установленную систему
Настройте для включения chroot в систему установки.
sudo -s
mount /dev/md1p1 /mnt
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
cat /etc/resolv.conf >> /mnt/etc/resolv.conf
chroot /mnt
Настройте и установите пакеты.
apt-get install -y grub-efi-amd64 # (or grub-efi-amd64-signed; same as in step 3)
apt-get install -y mdadm
Если ваши md-устройства все еще синхронизируются, вы можете увидеть случайные предупреждения, такие как:
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Это нормально и может быть проигнорировано (см. Ответ внизу
этого вопроса ).
nano /etc/grub.d/10_linux
# change quick_boot and quiet_boot to 0
Отключение quick_boot
позволит избежать записи в Diskfilter не поддерживаемых ошибок. Отключение quiet_boot
имеет только личные предпочтения.
Измените /etc/mdadm/mdadm.conf, чтобы удалить все ссылки на метки, т.е.
ARRAY /dev/md/0 metadata=1.2 name=ubuntu:0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 metadata=1.2 name=ubuntu:1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623
в
ARRAY /dev/md/0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623
Этот шаг может быть ненужным, но я видел, что на некоторых страницах предполагается, что схемы именования могут быть нестабильными (name = ubuntu: 0/1), и это может помешать сборке совершенно корректного RAID-устройства во время загрузки.
Изменить строки, /etc/default/grub
чтобы читать
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
Опять же, этот шаг может быть ненужным, но я предпочитаю загружаться с открытыми глазами ...
6.1. Добавить скрипт сна
(Сообщество предположило, что этот шаг может быть ненужным и может быть заменен с помощью GRUB_CMDLINE_LINUX="rootdelay=30"
in /etc/default/grub
. По причинам, объясненным в нижней части этого HOWTO, я предлагаю придерживаться спящего сценария, даже если он более уродлив, чем использование rootdelay. Таким образом, мы продолжаем нашу обычную программу ... )
Создайте сценарий, который будет ожидать установки устройств RAID. Без этой задержки монтирование root может завершиться неудачей из-за того, что сборка RAID не была завершена вовремя . Я нашел это трудным путем - проблема не обнаружилась, пока я не отключил один из SSD для имитации сбоя диска! Время может потребоваться изменить в зависимости от доступного оборудования, например, медленные внешние USB-диски и т. Д.
Введите следующий код в /usr/share/initramfs-tools/scripts/local-premount/sleepAwhile
:
#!/bin/sh
echo
echo "sleeping for 30 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 25 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 20 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 15 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 10 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 5 seconds while udevd and mdadm settle down"
sleep 5
echo "done sleeping"
Сделайте скрипт исполняемым и установите его.
chmod a+x /usr/share/initramfs-tools/scripts/local-premount/sleepAwhile
update-grub
update-initramfs -u
7. Включить загрузку с первого SSD
Теперь система почти готова, необходимо установить только параметры загрузки UEFI.
mount /dev/sda1 /boot/efi
grub-install --boot-directory=/boot --bootloader-id=Ubuntu --target=x86_64-efi --efi-directory=/boot/efi --recheck
update-grub
umount /dev/sda1
Это позволит установить загрузчик в /boot/efi/EFI/Ubuntu
(он же EFI/Ubuntu
на /dev/sda1
) и установите его первым в цепочке загрузки UEFI на компьютере.
8. Включить загрузку со второго SSD
Мы почти закончили. На этом этапе мы должны перезагрузить sda
накопитель. Кроме того, mdadm
должен быть в состоянии справиться с ошибкой sda
или sdb
диска. Однако EFI не является RAID-массивом, поэтому нам нужно его клонировать .
dd if=/dev/sda1 of=/dev/sdb1
В дополнение к установке загрузчика на втором диске, это сделает UUID в FAT32 файловой системы на sdb1
разделе (по данным blkid
) совпадающее sda1
и /etc/fstab
. (Обратите внимание , однако , что UUID , для /dev/sda1
и /dev/sdb1
перегородки еще будет отличаться - сравнить ls -la /dev/disk/by-partuuid | grep sd[ab]1
с blkid /dev/sd[ab]1
после установки , чтобы проверить себя.)
Наконец, мы должны вставить sdb1
раздел в порядок загрузки. (Примечание: этот шаг может быть ненужным, в зависимости от вашего BIOS. Я получил сообщения, что некоторые BIOS 'автоматически генерируют список действительных ESP.)
efibootmgr -c -g -d /dev/sdb -p 1 -L "Ubuntu #2" -l '\EFI\ubuntu\grubx64.efi'
Я не проверял это, но, вероятно, необходимо иметь уникальные метки (-L) между ESP sda
и sdb
.
Это сгенерирует распечатку текущего порядка загрузки, например
Timeout: 0 seconds
BootOrder: 0009,0008,0000,0001,0002,000B,0003,0004,0005,0006,0007
Boot0000 Windows Boot Manager
Boot0001 DTO UEFI USB Floppy/CD
Boot0002 DTO UEFI USB Hard Drive
Boot0003* DTO UEFI ATAPI CD-ROM Drive
Boot0004 CD/DVD Drive
Boot0005 DTO Legacy USB Floppy/CD
Boot0006* Hard Drive
Boot0007* IBA GE Slot 00C8 v1550
Boot0008* Ubuntu
Boot000B KingstonDT 101 II PMAP
Boot0009* Ubuntu #2
Обратите внимание, что Ubuntu # 2 (sdb) и Ubuntu (sda) являются первыми в порядке загрузки.
перезагружать
Теперь мы готовы к перезагрузке.
exit # from chroot
exit # from sudo -s
sudo reboot
Система должна перезагрузиться в Ubuntu (возможно, вам придется сначала удалить установочный носитель Ubuntu Live.)
После загрузки вы можете запустить
sudo update-grub
подключить загрузчик Windows к загрузочной цепочке grub.
Виртуальная машина попала
Если вы хотите сначала попробовать это на виртуальной машине, есть несколько предостережений: по-видимому, NVRAM, которая содержит информацию UEFI, запоминается между перезагрузками, но не между циклами выключения-перезапуска. В этом случае вы можете оказаться в консоли UEFI Shell. Следующие команды должны загрузить вас с вашего компьютера /dev/sda1
(используйте FS1:
для /dev/sdb1
):
FS0:
\EFI\ubuntu\grubx64.efi
Первое решение в верхнем ответе загрузки UEFI в virtualbox - Ubuntu 12.04 также может быть полезным.
Имитация сбоя диска
Отказ любого из компонентов RAID-устройства можно смоделировать с помощью mdadm
. Тем не менее, чтобы убедиться, что загрузочный материал выдержит сбой диска, мне пришлось выключить компьютер и отключить питание от диска. Если вы это сделаете, сначала убедитесь, что устройства md синхронизированы .
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb3[2] sda3[0]
216269952 blocks super 1.2 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sda2[0] sdb2[2]
33537920 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
В приведенных ниже инструкциях sdX - неисправное устройство (X = a или b), а sdY - исправное устройство.
Отключить диск
Выключить компьютер. Отключить диск. Перезапуск. Ubuntu теперь должен загружаться с дисков RAID в ухудшенном режиме. (Празднуйте! Это то, что вы пытались достичь!;)
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sda2[0]
33537920 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
Восстановить с неисправного диска
Это процесс, которому нужно следовать, если вам необходимо заменить неисправный диск. Если вы хотите эмулировать замену, вы можете загрузиться в сеанс Ubuntu Live и использовать
dd if=/dev/zero of=/dev/sdX
очистить диск перед перезагрузкой в реальную систему. Если вы только что проверили избыточность загрузки / RAID в разделе выше, вы можете пропустить этот шаг. Однако вы должны как минимум выполнить шаги 2 и 4 ниже, чтобы восстановить полную загрузку / избыточность RAID для вашей системы.
Восстановление загрузочной системы RAID + после замены диска требует следующих шагов:
- Разбить новый диск.
- Добавьте разделы на устройства md.
- Клонировать загрузочный раздел.
- Добавьте запись EFI для клона.
1. Разбить новый диск
Скопируйте таблицу разделов со здорового диска:
sudo sgdisk /dev/sdY -R /dev/sdX
Повторите рандомизацию UUID на новом диске.
sudo sgdisk /dev/sdX -G
2. Добавить в md устройства
sudo mdadm --add /dev/md0 /dev/sdX2
sudo mdadm --add /dev/md1 /dev/sdX3
3. Клонировать загрузочный раздел
Клонируйте ESP от здорового двигателя. (Осторожно, возможно, сначала сделайте дамп в файл обоих ESP, чтобы включить восстановление, если вы действительно испортили его.)
sudo dd if=/dev/sdY1 of=/dev/sdX1
4. Вставьте восстановленный диск в порядок загрузки
Добавьте запись EFI для клона. Измените метку -L, как требуется.
sudo efibootmgr -c -g -d /dev/sdX -p 1 -L "Ubuntu #2" -l '\EFI\ubuntu\grubx64.efi'
Теперь перезагрузка системы должна вернуть ее в нормальное состояние (устройства RAID все еще могут синхронизироваться)!
Почему сценарий сна?
Сообщество предположило, что добавление сценария сна может быть ненужным и может быть заменено с помощью GRUB_CMDLINE_LINUX="rootdelay=30"
in и /etc/default/grub
затем sudo update-grub
. Это предложение, безусловно, более чистое и работает в случае сбоя / замены диска. Тем не менее, есть одна оговорка ...
Я отключил свой второй SSD и обнаружил, что с помощью rootdelay=30
и т. Д. Вместо сценария сна:
1) Система загружается в деградированном режиме без «сбойного» диска.
2) При не ухудшенной загрузке (присутствуют оба диска) время загрузки сокращается. Задержка заметна только при отсутствии второго привода.
1) и 2) звучало великолепно, пока я не добавил свой второй диск. При загрузке RAID-массив не удалось собрать и оставил меня в initramfs
приглашении, не зная, что делать. Возможно, можно было спасти ситуацию путем: а) загрузки с Ubuntu Live USB-флешки, б) установки mdadm
и в) повторной сборки массива вручную, но ... я где-то напутал. Вместо этого, когда я вновь этот тест с сценарием сна (да, я действительно начать HOWTO с вершины на п - й раз ...), система сделала загрузку. Массивы были в ухудшенном режиме, и я мог вручную добавить /dev/sdb[23]
разделы без какой-либо дополнительной флешки. Я не знаю, почему скрипт сна работает, тогда как rootdelay
нет. Возможно mdadm
, меня смущают два немного не синхронизированных компонента, но я подумалmdadm
был разработан, чтобы справиться с этим. В любом случае, поскольку скрипт сна работает, я придерживаюсь его.
Можно утверждать, что удаление совершенно исправного устройства с компонентом RAID, перезагрузка RAID в ухудшенный режим, а затем повторное добавление устройства с компонентами - это нереальный сценарий: реалистичный сценарий скорее состоит в том, что одно устройство выходит из строя и заменяется новым. оставляя меньше возможностей для mdadm
запутывания. Я согласен с этим аргументом. Тем не менее, я не знаю, как проверить, как система переносит аппаратные сбои, кроме как на самом деле отключить некоторое оборудование! И после тестирования я хочу вернуться к избыточной, работающей системе. (Хорошо, я мог бы подключить свой второй SSD к другому компьютеру и провести его, прежде чем я снова добавлю его, но это невозможно).
Подводя итоги: насколько мне известно, rootdelay
решение является чистым, более быстрым, чем сценарий спящего режима для не ухудшенных загрузок, и должно работать для сценария реального сбоя / замены диска. Однако я не знаю подходящего способа проверить это. Итак, пока я буду придерживаться ужасного сценария сна.