- Вопрос или проблема
- В кратце
- В деталях
- 1. Загрузите установщик и загрузитесь в Ubuntu Live
- 1.1 Загрузка
- 1.2 Загрузка Ubuntu Live
- 2. Настройте mdadm и lvm
- 2.0 Установите ssh сервер
- 2.1 Создайте разделы на физических дисках
- 2.2 Установите mdadm и создайте md-устройство
- 2.4 Разделите md-устройство
- 2.3 Создайте LVM-устройства
- 3. Запустите установщик
- 4. Добавьте mdadm в целевую систему
- 4.1 chroot в целевую систему
- 4.2 Обновите целевую систему
- 5. Клонирование раздела EFI
- 6. Вставьте EFI раздел второго диска в цепочку загрузки
- 7. Перезагрузите
- 8. Обновите раздел EFI после обновления grub-efi-amd64
- 8.1 Узнайте источник клонирования, быстрый способ
- 8.2 Узнайте источник клонирования, параноидальный способ
- 8.3 Обновлено: Клонирование с rsync
- 8.4 Оригинально: Клонирование с dd
- 9. Ошибки виртуальной машины
- Ответ или решение
- Предварительная подготовка
- Настройка RAID 1 и LVM
- Установка Ubuntu
- Последующие действия
Вопрос или проблема
У меня есть машина с UEFI BIOS. Я хочу установить Ubuntu 20.04 Desktop с LVM поверх RAID 1, чтобы моя система продолжала работать, даже если один из дисков выйдет из строя. Я не нашел инструкции, как это сделать. Установщик 20.04 desktop поддерживает LVM, но не RAID. Ответ на этот вопрос описывает процесс для 18.04. Однако 20.04 не предоставляет альтернативного серверного установщика. Ответы на этот вопрос и этот вопрос описывают RAID, но не LVM или UEFI. У кого-нибудь есть процесс, который работает для 20.04 с LVM поверх RAID 1 для машины с UEFI?
После нескольких недель экспериментов и с помощью по этой ссылке, я наконец нашел решение, которое работает. Последовательность ниже была выполнена с Ubuntu 20.04.2.0 LTS. Я также успешно выполнил процедуру с 21.04.0 внутри виртуальной машины. (Однако, обратите внимание, что с Ubuntu 21.04 и некоторыми старыми системами UEFI сообщается о проблеме).
В кратце
- Скачайте и загрузитесь в Ubuntu Live для 20.04.
- Настройте mdadm и lvm.
- Запустите установщик Ubuntu, но не перезагружайте компьютер.
- Добавьте mdadm в целевую систему.
- Клонируйте раздел EFI на второй диск.
- Установите второй раздел EFI в цепочку загрузки UEFI.
- Перезагрузитесь
В деталях
1. Загрузите установщик и загрузитесь в Ubuntu Live
1.1 Загрузка
- Скачайте установщик Ubuntu Desktop с https://ubuntu.com/download/desktop и запишите его на загрузочный носитель. (По состоянию на 2021-12-13, образ назывался ubuntu-20.04.3-desktop-amd64.iso.)
1.2 Загрузка Ubuntu Live
- Загрузитесь с носителя из шага 1.1.
- Выберите
Try Ubuntu
. - Откройте терминал, нажав Ctrl-Alt-T. Команды ниже следует вводить в этом терминале.
2. Настройте mdadm и lvm
В примере ниже устройства диска называются /dev/sda
и /dev/sdb
. Если ваши диски называются иначе, например, /dev/nvme0n1
и /dev/sdb
, вам следует соответственно заменить имена дисков. Вы можете использовать sudo lsblk
для нахождения имен ваших дисков.
2.0 Установите ssh сервер
Если вы не хотите вводить все команды вручную, вы можете установить ssh для входа и скопировать-вставить команды.
-
Установите
sudo apt install openssh-server
-
Установите пароль для разрешения внешнего входа
passwd
-
Если вы тестируете это внутри виртуальной машины, вы, вероятно, захотите перенаправить подходящий порт. Выберите
Settings
,Network
,Advanced
,Port forwarding
и нажмите плюс. Введите, например,3022
какHost Port
и22
как Guest Port, и нажмитеOK
. Или из командной строки вашей хост-системы (замените VMNAME на имя вашей виртуальной машины):VBoxManage modifyvm VMNAME --natpf1 "ssh,tcp,,3022,,22" VBoxManage showvminfo VMNAME | grep 'Rule'
Теперь вы можете войти в сессию Ubuntu Live с внешнего компьютера, используя
ssh <hostname> -l ubuntu
или, если вы тестируете на виртуальной машине на localhost
,
ssh localhost -l ubuntu -p 3022
и пароль, который вы установили выше.
2.1 Создайте разделы на физических дисках
-
Обнулите таблицы разделов с помощью
sudo sgdisk -Z /dev/sda sudo sgdisk -Z /dev/sdb
-
Создайте два раздела на каждом диске; один для EFI и один для устройства RAID.
sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sda sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sda sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sdb sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
-
Создайте систему FAT32 для раздела EFI на первом диске. (Позже будет клонированный на второй диск.)
sudo mkfs.fat -F 32 /dev/sda1
2.2 Установите mdadm и создайте md-устройство
Установите mdadm
sudo apt-get update
sudo apt-get install mdadm
Создайте md-устройство. Игнорируйте предупреждение о метаданных, поскольку массив не будет использоваться как загрузочное устройство.
sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 /dev/sdb2
Проверьте статус md-устройства.
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[1] sda2[0]
1047918528 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.0% (1001728/1047918528) finish=69.6min speed=250432K/sec
bitmap: 8/8 pages [32KB], 65536KB chunk
unused devices: <none>
В этом случае устройство синхронизирует диски, что нормально и может продолжаться в фоновом режиме в процессе ниже.
2.4 Разделите md-устройство
sudo sgdisk -Z /dev/md0
sudo sgdisk -n 1:0:0 -t 1:E6D6D379-F507-44C2-A23C-238F2A3DF928 -c 1:"Linux LVM" /dev/md0
Это создает один раздел /dev/md0p1
на устройстве /dev/md0
. Строка UUID определяет раздел как LVM-раздел.
2.3 Создайте LVM-устройства
-
Создайте физический том на md-устройстве
sudo pvcreate /dev/md0p1
-
Создайте группу томов на физическом томе
sudo vgcreate vg0 /dev/md0p1
-
Создайте логические тома (разделы) на новой группе томов. Размеры и названия ниже моя выбор. Вы можете решить иначе.
sudo lvcreate -Z y -L 25GB --name root vg0 sudo lvcreate -Z y -L 10GB --name tmp vg0 sudo lvcreate -Z y -L 5GB --name var vg0 sudo lvcreate -Z y -L 10GB --name varlib vg0 sudo lvcreate -Z y -L 200GB --name home vg0
Теперь разделы готовы для установки Ubuntu.
3. Запустите установщик
- Дважды щелкните на значок
Установить Ubuntu 20.04.2.0 LTS
на рабочем столе нового компьютера. (НЕ запускайте установщик по любой SSH-сессии!) - Ответьте на вопросы о языке и клавиатуре.
- На странице
Тип установки
выберитеЧто-то еще
. (Это важная часть.) Это представит вам список разделов, называемых/dev/mapper/vg0-home
и т.д. - Дважды щелкните на каждом разделе, начиная с
/dev/mapper/vg0-
. ВыберитеИспользовать как:
Ext4
, отметьте полеФорматировать раздел
и выберите соответствующую точку монтирования (/
дляvg0-root
,/home
дляvg0-home
и т.д.,/var/lib
дляvg0-varlib
). - Выберите первое устройство
/dev/sda
для загрузчика. - Нажмите
Установить сейчас
и продолжите установку. - Когда установка завершится, выберите
Продолжить тестирование
.
В терминале выполните lsblk
. Вывод должен быть таким:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sda 8:0 0 1000G 0 disk
├─sda1 8:1 0 512M 0 part
└─sda2 8:2 0 999.5G 0 part
└─md0 9:0 0 999.4G 0 raid1
└─md0p1 259:0 0 999.4G 0 part
├─vg0-root 253:0 0 25G 0 lvm /target
├─vg0-tmp 253:1 0 10G 0 lvm
├─vg0-var 253:2 0 5G 0 lvm
├─vg0-varlib 253:3 0 10G 0 lvm
└─vg0-home 253:4 0 200G 0 lvm
sdb 8:16 0 1000G 0 disk
├─sdb1 8:17 0 512M 0 part
└─sdb2 8:18 0 999.5G 0 part
└─md0 9:0 0 999.4G 0 raid1
└─md0p1 259:0 0 999.4G 0 part
├─vg0-root 253:0 0 25G 0 lvm /target
├─vg0-tmp 253:1 0 10G 0 lvm
├─vg0-var 253:2 0 5G 0 lvm
├─vg0-varlib 253:3 0 10G 0 lvm
└─vg0-home 253:4 0 200G 0 lvm
...
Как вы можете видеть, установщик оставил установленную корневую систему, смонтированную в /target
. Однако остальные разделы не смонтированы. Более важно, что mdadm
еще не является частью установленной системы.
4. Добавьте mdadm в целевую систему
4.1 chroot в целевую систему
Сначала мы должны смонтировать немонтированные разделы:
sudo mount /dev/mapper/vg0-home /target/home
sudo mount /dev/mapper/vg0-tmp /target/tmp
sudo mount /dev/mapper/vg0-var /target/var
sudo mount /dev/mapper/vg0-varlib /target/var/lib
Далее, связываем некоторые устройства для подготовки к chroot
…
cd /target
sudo mount --bind /dev dev
sudo mount --bind /proc proc
sudo mount --bind /sys sys
…и chroot
в целевую систему.
sudo chroot .
4.2 Обновите целевую систему
Теперь мы внутри целевой системы. Установите mdadm
apt install mdadm
Если вы получите ошибку DNS, выполните
echo "nameserver 1.1.1.1" >> /etc/resolv.conf
и повторите
apt install mdadm
Вы можете игнорировать любые предупреждения о утечках труб.
Проверьте конфигурационный файл /etc/mdadm/mdadm.conf
. Он должен содержать строку вблизи конца, подобную этой
ARRAY /dev/md/0 metadata=1.2 UUID=7341825d:4fe47c6e:bc81bccc:3ff016b6 name=ubuntu:0
Удалите часть name=...
чтобы строка выглядела так
ARRAY /dev/md/0 metadata=1.2 UUID=7341825d:4fe47c6e:bc81bccc:3ff016b6
Обновите список модулей, которые ядро должно загружать при загрузке.
echo raid1 >> /etc/modules
Обновите загрузочный образ ramdisk
update-initramfs -u
Наконец, выйдите из chroot
exit
5. Клонирование раздела EFI
Теперь установленная целевая система завершена. Более того, основная часть защищена от отказа одного диска через устройство RAID. Однако раздел загрузки EFI не защищен через RAID. Вместо этого мы его клонируем.
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4096
Запустите
$ sudo blkid /dev/sd[ab]1
/dev/sda1: UUID="108A-114D" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="ccc71b88-a8f5-47a1-9fcb-bfc960a07c16"
/dev/sdb1: UUID="108A-114D" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="fd070974-c089-40fb-8f83-ffafe551666b"
Обратите внимание, что FAT UUIDs идентичны, но GPT PARTUUIDы различаются.
6. Вставьте EFI раздел второго диска в цепочку загрузки
Наконец, мы должны вставить EFI раздел на втором диске в цепочку загрузки. Для этого мы будем использовать efibootmgr
.
sudo apt install efibootmgr
Запустите
sudo efibootmgr -v
и изучите вывод. Должна быть строка, подобная этой
Boot0005* ubuntu HD(1,GPT,ccc71b88-a8f5-47a1-9fcb-bfc960a07c16,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Обратите внимание на путь после File
. Запустите
sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l '\EFI\ubuntu\shimx64.efi'
чтобы создать новую запись загрузки на разделе 1 /dev/sdb
с тем же путем, что и для записи ubuntu
. Снова запустите
sudo efibootmgr -v
и убедитесь, что есть вторая запись под названием ubuntu2
с тем же путем, что и ubuntu
:
Boot0005* ubuntu HD(1,GPT,ccc71b88-a8f5-47a1-9fcb-bfc960a07c16,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0006* ubuntu2 HD(1,GPT,fd070974-c089-40fb-8f83-ffafe551666b,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Кроме того, обратите внимание, что строка UUID каждой записи идентична соответствующей PARTUUID строке выше.
7. Перезагрузите
Теперь мы готовы к перезагрузке. Проверьте, завершен ли процесс синхронизации.
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[1] sda2[0]
1047918528 blocks super 1.2 [2/2] [UU]
bitmap: 1/8 pages [4KB], 65536KB chunk
unused devices: <none>
Если синхронизация еще в процессе, должно быть в порядке сделать перезагрузку. Однако я предлагаю подождать до завершения синхронизации перед перезагрузкой.
После перезагрузки система должна быть готова к использованию! Более того, если один из дисков выйдет из строя, система будет использовать UEFI раздел с исправного диска и загружаться с Ubuntu в режиме degrado для md0
устройства.
8. Обновите раздел EFI после обновления grub-efi-amd64
Когда пакет grub-efi-amd64
обновлен, файлы на разделе EFI (смонтированном в /boot/efi
) могут измениться. В этом случае обновление должно быть клонировано вручную на зеркальный раздел. К счастью, вы получите предупреждение от менеджера обновлений, что grub-efi-amd64
собирается обновиться, так что вам не нужно проверять после каждого обновления.
8.1 Узнайте источник клонирования, быстрый способ
Если вы не перезагружались после обновления, используйте
mount | grep boot
чтобы узнать, какой раздел EFI смонтирован. Этот раздел, обычно /dev/sdb1
, должен быть использован как источник клонирования.
8.2 Узнайте источник клонирования, параноидальный способ
Создайте точки монтирования и смонтируйте оба раздела:
sudo mkdir /tmp/sda1 /tmp/sdb1
sudo mount /dev/sda1 /tmp/sda1
sudo mount /dev/sdb1 /tmp/sdb1
Найдите временную метку самого нового файла в каждом дереве
sudo find /tmp/sda1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sda1
sudo find /tmp/sdb1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sdb1
Сравните временные метки
cat /tmp/newest.sd* | sort | tail -n 1 | perl -ne 'm,/tmp/(sd[ab]1)/, && print "/dev/$1 is newest.\n"'
Должно вывести /dev/sdb1 is newest
(скорее всего) или /dev/sda1 is newest
. Этот раздел должен быть использован как источник клонирования.
Отмонтируйте разделы перед клонированием чтобы избежать несоответствия кэш/раздел.
sudo umount /tmp/sda1 /tmp/sdb1
8.3 Обновлено: Клонирование с rsync
Как отметил Jon Hulka, вы можете использовать rsync вместо dd:
mkdir mnt
sudo mount /dev/sd?1 mnt #какой-либо из sda1 или sdb1, который не смонтирован в /boot/efi
sudo rsync -av --delete /boot/efi/ mnt
sudo umount mnt
8.4 Оригинально: Клонирование с dd
Если /dev/sdb1
был источником клонирования:
sudo dd if=/dev/sdb1 of=/dev/sda1
Если /dev/sda1
был источником клонирования:
sudo dd if=/dev/sda1 of=/dev/sdb1
Готово!
9. Ошибки виртуальной машины
Если вы хотите попробовать это сначала в виртуальной машине, есть некоторые проблемы: По-видимому, NVRAM, который хранит информацию UEFI, запоминается между перезагрузками, но не между циклами выключения-перезапуска. В этом случае вы можете оказаться в консоли UEFI Shell. Следующие команды должны загрузить вас в ваше устройство с /dev/sda1
(используйте FS1:
для /dev/sdb1
):
FS0:
\EFI\ubuntu\grubx64.efi
Первое решение в лучшем ответе в UEFI загрузка в virtualbox – Ubuntu 12.04 может также помочь.
Если вы используете ответ Niclas Börlin здесь, рассмотрите возможность использования rsync вместо dd:
mkdir mnt
sudo mount /dev/sd?1 mnt #какой-либо из sda1 или sdb1, который не смонтирован в /boot/efi
sudo rsync -av --delete /boot/efi/ mnt
sudo umount mnt
Это делает невозможным случайно перезаписать содержимое диска, если вы перепутаете их.
Это отличные подробные инструкции. Я просто хочу добавить, что установщик Desktop для 22.10 и 23.04 не поддерживает RAID или LVM. Он не видит разделы/файловые системы, созданные таким образом. Решение состоит в переключении на серверный установщик. После установки сервера выполните “sudo apt install ubuntu-desktop”, а также установите все дополнительные драйверы (например, nvidia).
Извините. Мой отзыв был, видимо, неясен, так что вот еще раз. Вопрос: “У кого-нибудь есть процесс, который работает для 20.04 с LVM поверх RAID 1 для машины с UEFI?”
Мой “ответ” заключается в том, что инструкции, данные в шагах 1-7, были как точно, так и надлежащими – большое спасибо – но у меня были трудности с 20.04, потому что он не поддерживал встроенную графику XID 641 моей современной материнской платы. Я попробовал с 21.10 desktop и не встретил проблем. Обратите внимание, что я переключил SATA с RAID на AHCI в BIOS заранее и ждал завершения синхронизации на шаге 7, иначе, процедура безболезненная. Целевая машина – Ryzen 9 5950X, материнская плата ASUS Crosshair VIII Hero, 2x8TB дисков.
.
Ответ или решение
Установка Ubuntu 20.04 Desktop с RAID 1 и LVM на машине с UEFI BIOS: Подробная инструкция
Если вы IT-специалист и столкнулись с потребностью установки Ubuntu 20.04 Desktop с использованием LVM поверх RAID 1 на системе с UEFI BIOS, то приготовьтесь к нескольким важным шагам. Встроенные функции инсталлятора Ubuntu Desktop не поддерживают RAID, поэтому потребуются дополнительные манипуляции. Давайте разберемся, как это сделать.
Предварительная подготовка
-
Загрузка образа Ubuntu и подготовка загрузочного носителя:
- Скачайте Ubuntu 20.04 Desktop с официального сайта Ubuntu.
- Создайте загрузочный USB-носитель.
-
Загрузка с медиа и подготовка системы:
- Загрузитесь с подготовленного USB и выберите опцию "Try Ubuntu".
- Откройте терминал с помощью комбинации Ctrl-Alt-T.
Настройка RAID 1 и LVM
-
Конфигурация дисков:
- Проверьте названия ваших дисков с помощью
sudo lsblk
. Например, они могут быть/dev/sda
и/dev/sdb
. - Очистите таблицы разделов:
sudo sgdisk -Z /dev/sda sudo sgdisk -Z /dev/sdb
- Проверьте названия ваших дисков с помощью
-
Создание необходимых разделов:
- Создайте разделы. Один для EFI и один для RAID:
sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sda sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sda sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sdb sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
- Создайте FAT32 файловую систему для EFI:
sudo mkfs.fat -F 32 /dev/sda1
- Создайте разделы. Один для EFI и один для RAID:
-
Установка и настройка mdadm для RAID:
- Установите
mdadm
и создайте RAID 1:sudo apt-get update sudo apt-get install mdadm sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 /dev/sdb2
- Установите
-
Создание физического и логического тома LVM:
- Создайте физический том и группу:
sudo pvcreate /dev/md0p1 sudo vgcreate vg0 /dev/md0p1
- Создайте логические тома:
sudo lvcreate -L 25GB --name root vg0 sudo lvcreate -L 10GB --name tmp vg0 sudo lvcreate -L 5GB --name var vg0 sudo lvcreate -L 10GB --name varlib vg0 sudo lvcreate -L 200GB --name home vg0
- Создайте физический том и группу:
Установка Ubuntu
- Запуск установщика:
- Запустите установку с рабочего стола, выберите "Something else".
- Настройте тома LVM для установки.
- Установите загрузчик на
/dev/sda
.
Последующие действия
-
Настройка системы после установки:
- Добавьте
mdadm
в целевую систему:sudo mount --bind /dev dev sudo mount --bind /proc proc sudo mount --bind /sys sys sudo chroot /target apt install mdadm echo "nameserver 1.1.1.1" >> /etc/resolv.conf
- Добавьте
-
Клонирование EFI раздела:
- Клонируйте EFI на второй диск:
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4096
- Используйте
efibootmgr
для обновления цепочки загрузки:sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l '\EFI\ubuntu\shimx64.efi'
- Клонируйте EFI на второй диск:
-
Завершение и тестирование:
- Отследите окончание синхронизации RAID и перезагрузите:
cat /proc/mdstat
- Отследите окончание синхронизации RAID и перезагрузите:
Теперь ваша система Ubuntu 20.04 установлена и защищена от отказа одного из дисков благодаря конфигурации RAID 1. Убедитесь, что после любой модификации связанные файлы EFI обновляются и отражают изменения на обоих дисках.