Записки криворукого админа
  • Записки криворукого админа
  • SaltStack
    • State
      • Name active interface
      • watch, require, *_in
    • Salt-api
      • tokens
    • ERROR
      • No module named tornado.stack_context
      • Got a bad pillar from master
  • Jinja
    • Last comma
  • Python
    • проверка версии модуля
  • Gitlab
    • Example values CI
    • gitlab multi pipeline
  • Linux
    • qemu/kvm
    • Cron all user
    • OpenVPN GUI
    • Group Linux
    • passwd
    • Systemctl
    • chmod для взрослых ;)
    • Comand0s
      • disck
      • grep
      • link
      • mkdir
    • Supervisor
    • Изменение hostname
    • WiFi - broadcom
    • cockpit
    • Viber
    • Время в терминале
    • Chmod
    • Docker ?
    • Тмух
    • Количество ядер
  • Utility
    • scp
      • zsh: no matches found
    • rsyslog
      • stop not work
    • Vi/Vim
      • Hotkeys
    • parted
      • Create over 2TB partition
    • lsyncd
    • mdadm
      • /boot on RAID1
  • MySQL
    • Типы таблиц (ENGINE)
    • Доступ для пользователя
    • Xtrabackup
    • WSREP - help
    • Примитивы
  • NetWork
    • OpenVPN
    • Установка Pure-FTP
  • Ansiblya
    • unmanaged files
  • Restore
    • Safest way to clean up boot partition
  • Редис
    • High Performance Redis
  • SSL
    • API cloudflare
    • bundel
  • Apache
    • Nginx, Apache, REMOTE_ADDR 127.0.0.1
  • Openresty/Nginx
    • default, Not $host
    • NGINX+Lua=parser_ip
    • NGINX+Lua=Size_img
  • Mong0
  • Mac
    • VirtualBox
  • Hobby
    • 🖖XMage
Powered by GitBook
On this page
  • Setup KVM
  • Установка Ubuntu 18.04
  • Install GRUB
  • Тесты
  • Переключение на загрузку со второго диска
  • Второй диск вышел из строя
  • Восстанавливаемся:
  • Добавление 3-го диска
  1. Utility
  2. mdadm

/boot on RAID1

Ubuntu 18.04

PreviousmdadmNextMySQL

Last updated 4 years ago

Setup KVM

Все действия происходят в QUME/KVM. В системе должно быть смонтирована 2 диска до начала установки

Рассмотрим шаги про добавление 2-го диска.

На последнем шаге обязательно ставим галочку:

Customize configuration before install

в следующем шаге в Add Hardware добавляем второй диск:

только после этого запускаем установку.

Установка Ubuntu 18.04

Рассмотрим часть про создание разделов:

Далее создаем на обеих дисках разметку без указания файловой системы:

Делаем разбивку каждого диска на 2-е части (1Gb и остаток от диска), в Вашем случае размеры могут быть другими.

Указав пустое поле Size, будет задействован весь оставшийся размер диска.

в итоге у нас получится:

Приводим второй диск к такому же состоянию:

У вас в USED DEVICES появился bios_grub, оставляем его нетронутым, в дальнейшем (уже после установки системы) мы создадим на втором диске раздел под GRUB

Теперь мы можем создать RAID1 - 2 штука:

Выбираем partition одинакового размера:

В итоге у нас должно получится в AVAILABLE DEVICES два устройства:

Приступаем к созданию partition на устройствах md0 и md1:

В моем случае md0 (он меньшего размера) идет под /boot:

А md1 идет под корень системы:

В итоге у нас должна получится такая разметка:

Далее Done и в следующем окне Continue :

Вся информация будет удалена, диски будут отформатированы

Далее следуем по меню чтобы завершить установку системы:

Reboot

Install GRUB

все последующие действия в системы выполняются от root

Смотрим информацию по дискам:

lsblk
root@test:~# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdb         252:16   0   15G  0 disk  
├─vdb1      252:17   0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vdb2      252:18   0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /

В output интересуют имена дисков (vda и vdb), далее сам процес установки grub:

grub-install /dev/vda
root@test:~# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# 
grub-install /dev/vdb
root@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.
root@test:~# 

Ошибка при выполнении grub-install на vdb ожидаемая, так как там нету раздела по него.

Создаем раздел:

parted /dev/vdb set 1 bios_grub on
root@test:~# parted /dev/vdb set 1 bios_grub on
Information: You may need to update /etc/fstab.

root@test:~# 
parted /dev/vdb print
root@test:~# parted /dev/vdb print                                        
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 16.1GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  1075MB  1074MB                     bios_grub
 2      1075MB  16.1GB  15.0GB

root@test:~# 

Все прошло успешно, повторяем попытку grub-install:

grub-install /dev/vdb
root@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# 

Мы получили систему которая может грузиться с любого из /boot в случае выхода какого то из дисков. Далее мы протестируем как это работает и возможные применения такой схемы на практике.

Тесты

Переключение на загрузку со второго диска

Проверяем что с рейдами все ОК!

cat /proc/mdstat
root@test:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb1[1] vda2[0]
      1046528 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 vdb2[1] vda3[0]
      14667776 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
root@test:~# 

[UU] - нам говорит о том что рейдах участвует по два диска, в нашем случае partition.

Выключаем систему, меняем загрузочный диск:

shutdown now

Запускаем систему. Система загрузилась с VirtIO Disk 2.

VirtIO Disk 1 мы можем безболезненно отключить от системы, и система у нас останется в рабочем состоянии.

Второй диск вышел из строя

Представим ситуацию что какой-то из дисков, в нашем случае будет VirtlO Disk2, вышел из строя. Для имитации поломки, мы его удалим из системы.

P.S. Да у нас авария за аварией!

cat /proc/mdstat
root@test:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb1[1] vda2[0]
      1046528 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 vdb2[1] vda3[0]
      14667776 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
root@test:~# 
cd && echo text in file >> test.file && cat test.file && ll 
root@test:~# cd && echo text in file >> test.file && cat test.file && ll
text in file
total 28
drwx------  3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw-------  1 root root  408 May 29 15:32 .bash_history
-rw-r--r--  1 root root 3106 Apr  9  2018 .bashrc
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
drwx------  2 root root 4096 May 29 14:41 .ssh/
-rw-r--r--  1 root root   13 May 29 15:58 test.file
root@test:~# 

Выключаем машину, удаляем диск из системы, а загрузочным ставим VirtlO Disk1

В системе остался один диск:

Запускаем систему и проверяем состояние дисков, рейдов, файлов

lsblk
root@test:/home/test# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
root@test:/home/test# 
cat /proc/mdstat
root@test:/home/test# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vda2[0]
      1046528 blocks super 1.2 [2/1] [U_]
      
md1 : active raid1 vda3[0]
      14667776 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>
root@test:/home/test# 

[U_] - у нас в md0/md1 не хватает по одному диску.

cd && cat test.file && ll
root@test:~# cd && cat test.file && ll
text in file
total 28
drwx------  3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw-------  1 root root  871 May 29 16:03 .bash_history
-rw-r--r--  1 root root 3106 Apr  9  2018 .bashrc
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
drwx------  2 root root 4096 May 29 14:41 .ssh/
-rw-r--r--  1 root root   13 May 29 15:58 test.file
root@test:~# 

Но система продолжает быть в рабочем состоянии.

Восстанавливаемся:

Создаем чистый не размеченный диск, подключаем его к системе, такого же размера как оставшийся диск в системе, предварительно выключив систему.

Запускаем систему, проверяем диски, рейд

lsblk
root@test:/home/test# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdb         252:16   0   15G  0 disk  
root@test:/home/test# 
cat /proc/mdstat
root@test:/home/test# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vda2[0]
      1046528 blocks super 1.2 [2/1] [U_]
      
md1 : active raid1 vda3[0]
      14667776 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>
root@test:/home/test# 

Размечаем диск vdb по partition как у vda, для более корректного отображения в дереве, разметку делаем в том же порядке:

более детальную информацию по команде fdisk можно посмотреть в man fdisk

fdisk /dev/vdb
root@test:/home/test# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9bc6d9da.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-31457279, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-31457279, default 31457279): +1M

Created a new partition 1 of type 'Linux' and of size 1 MiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (4096-31457279, default 4096): 
Last sector, +sectors or +size{K,M,G,T,P} (4096-31457279, default 31457279): +1G

Created a new partition 2 of type 'Linux' and of size 1 GiB.

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (3,4, default 3): 
First sector (2101248-31457279, default 2101248): 
Last sector, +sectors or +size{K,M,G,T,P} (2101248-31457279, default 31457279): 

Created a new partition 3 of type 'Linux' and of size 14 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@test:/home/test# 

смотрим что у нас получилось по дискам:

lsblk
root@test:/home/test# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdb         252:16   0   15G  0 disk  
├─vdb1      252:17   0    1M  0 part  
├─vdb2      252:18   0    1G  0 part  
└─vdb3      252:19   0   14G  0 part  
root@test:/home/test# 

Теперь можем восстановить "первый" RAID1 (md0):

mdadm /dev/md0 --add /dev/vdb2

К сожалению вывода у команды нет, но если запустить в отдельном окне:

watch cat /proc/mdstat

можно увидеть как идет восстановление md0 :

Восстанавливаем "второй" RAID1 (md1):

mdadm /dev/md1 --add /dev/vdb3

Дожидаемся конца восстановления.

Проверяем состояние:

cat /proc/mdstat
root@test:/home/test# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 vdb2[2] vda2[0]
      1046528 blocks super 1.2 [2/2] [UU]
      
md1 : active raid1 vdb3[2] vda3[0]
      14667776 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
root@test:/home/test# 
lsblk
root@test:/home/test# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdb         252:16   0   15G  0 disk  
├─vdb1      252:17   0    1M  0 part  
├─vdb2      252:18   0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vdb3      252:19   0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
root@test:/home/test# 
cd && cat test.file && ll
root@test:/home/test# cd && cat test.file && ll
text in file
total 28
drwx------  3 root root 4096 May 29 15:58 ./
drwxr-xr-x 24 root root 4096 May 29 13:39 ../
-rw-------  1 root root  959 May 29 16:21 .bash_history
-rw-r--r--  1 root root 3106 Apr  9  2018 .bashrc
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
drwx------  2 root root 4096 May 29 14:41 .ssh/
-rw-r--r--  1 root root   13 May 29 15:58 test.file
root@test:~# 

RAID1(md0/md1) в порядке, мы обратно вернули разметку дискам, файлы на месте, с теми же данными что были созданы на отключенном (удаленном) диске.

Устанавливаем grub на новый диск и пробуем с него запустить систему.

grub-install /dev/vdb
root@test:~# grub-install /dev/vdb
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:~# 

Выключаем систему, переключаем диск для загрузки

Запускаем систему, система загрузилась с VirtIO Disc 2.

Добавление 3-го диска

Создаем и добавляем в систему 3-й диск

Запускаем систему, смотрим имя диска, и розмечаем его как при востановлении:

lsblk
root@test:/home/test# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0         7:0    0 93.9M  1 loop  /snap/core/9066
loop1         7:1    0 89.1M  1 loop  /snap/core/8268
sr0          11:0    1 1024M  0 rom   
vda         252:0    0   15G  0 disk  
├─vda1      252:1    0    1M  0 part  
├─vda2      252:2    0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vda3      252:3    0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdb         252:16   0   15G  0 disk  
├─vdb1      252:17   0    1M  0 part  
├─vdb2      252:18   0    1G  0 part  
│ └─md0       9:0    0 1022M  0 raid1 
│   └─md0p1 259:0    0 1018M  0 md    /boot
└─vdb3      252:19   0   14G  0 part  
  └─md1       9:1    0   14G  0 raid1 
    └─md1p1 259:1    0   14G  0 md    /
vdc         252:32   0   15G  0 disk  
root@test:/home/test# 
fdisk /dev/vdc
root@test:/home/test# fdisk /dev/vdc

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x395de8c7.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-31457279, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-31457279, default 31457279): +1M

Created a new partition 1 of type 'Linux' and of size 1 MiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (4096-31457279, default 4096): 
Last sector, +sectors or +size{K,M,G,T,P} (4096-31457279, default 31457279): +1G

Created a new partition 2 of type 'Linux' and of size 1 GiB.

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (3,4, default 3): 
First sector (2101248-31457279, default 2101248): 
Last sector, +sectors or +size{K,M,G,T,P} (2101248-31457279, default 31457279): 

Created a new partition 3 of type 'Linux' and of size 14 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@test:/home/test#

Добавляем новые разделы в md0/md1:

mdadm /dev/md0 --add /dev/vdc2
root@test:/home/test# mdadm /dev/md0 --add /dev/vdc2
mdadm: added /dev/vdc2
root@test:/home/test#
mdadm /dev/md1 --add /dev/vdc3
root@test:/home/test# mdadm /dev/md1 --add /dev/vdc3
mdadm: added /dev/vdc3
root@test:/home/test#

Расширяем рейды с 2-х дисков до 3-ч.

mdadm -G /dev/md0 --raid-devices=3
mdadm -G /dev/md1 --raid-devices=3

Опция --raid-devices указывает новое количество дисков используемое в массиве. Например, было 2 диска, а теперь расширяем до 3-х - указываем 3.

Устанавливаем на него grub

grub-install /dev/vdc
root@test:/home/test# grub-install /dev/vdc
Installing for i386-pc platform.
Installation finished. No error reported.
root@test:/home/test# 

Теперь в системе 3 диска в RAID1 и с любого из них можно произвести загрузку системы.

До начала эксперимента проверяем что у нас все ок, и создадим в папке root файл, чтоб проверить синхронизацию с новым диском при отключении VirtlO Disk1 .

😁
выбираем Manual
1G
Создание "первого" RAID1
Создание "второго" RAID1
Система грузится с VirtIO Disk 1
Удаляем его из системы -> Remove