Как создать программный RAID 1 массив (зеркало) в Porteus
Posted: 07 May 2017, 19:07
Как создать программный RAID1 массив (зеркало) с помощью mdadm в Porteus
Для создания RAID 1 вам потребуются минимум два пустых (без разделов и таблиц), одинаковых жёстких диска.RAID 1 - Дисковый массив с зеркалированием. Каждый диск представляет собой полную копию другого.
Такой массив позволит вам продолжить работу даже при выходе одного диска из строя.
Предположим, что у вас имеется два одинаковых жестких диска объемом 50 Гб.В данной инструкции рассмотрен пример с таблицей разделов MBR. Таблица разделов GPT не рассмотрена.
Тогда произведем такую разбивку:
- 20 Гб для /dev/md0 (/dev/md0p1), полученный из /dev/sda1 и /dev/sdb1 под ОС Porteus
- 2 Гб для /dev/md1 (/dev/md1p1), полученный из /dev/sda2 и /dev/sdb2 под Swap
Примечание: При создании raid-массива первого уровня (зеркала) с целью повышения отказоустойчивости системы рекомендуется разделы swap также объединять в массив. При использовании swap-разделов вне raid при отказе одного диска может случиться крах системы (если на поломавшийся диск была выгружена часть страниц памяти). При объединении в raid-массив разделов swap такого не произойдет, т.к. выгружаемая страница будет присутствовать на обоих дисках.
Но лучше отказаться от swap на разделах с raid1 и использовать читкод zram=5% в /mnt/sdX/boot/syslinux/porteus.cfg - Остальное пространство для /dev/md2 (/dev/md2p1), полученный из /dev/sda3 и /dev/sdb3 под файловый сервер
Code: Select all
su
toor
fdisk -l | grep /dev/sd
Code: Select all
Диск /dev/sda: 50 GiB, 53687091200 байт, 104857600 секторов
Диск /dev/sdb: 50 GiB, 53687091200 байт, 104857600 секторов
Code: Select all
fdisk /dev/sda
Для справки:Code: Select all
Команда (m для справки): m Справка: DOS (MBR) a переключение флага загрузки b редактирование вложенной метки диска BSD c переключение флага dos-совместимости Общие d удалить раздел F показать свободное неразмеченное пространство l список известных типов разделов n добавление нового раздела p вывести таблицу разделов t изменение типа раздела v проверка таблицы разделов i вывести информацию о разделе Разное m вывод этого меню u изменение единиц измерения экрана/содержимого x дополнительная функциональность (только для экспертов) Сценарий I загрузить разметку из файла сценария sfdisk O записать разметку в файл сценария sfdisk Записать и выйти w запись таблицы разделов на диск и выход q выход без сохранения изменений Создать новую метку g создание новой пустой таблицы разделов GPT G создание новой пустой таблицы разделов SGI (IRIX) o создание новой пустой таблицы разделов DOS s создание новой пустой таблицы разделов Sun
Code: Select all
Тип раздела (введите L для получения списка типов разделов): L 0 Пустой 24 NEC DOS 81 Minix / старый bf Solaris 1 FAT12 27 Скрытый NTFS Wi 82 Linux своп c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux расширен c7 Syrinx 5 Расширенный 41 PPC PReP Boot 86 NTFS набор томо da Данные не ФС 6 FAT16 42 SFS 87 NTFS набор томо db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2-я част 8e Linux LVM df BootIt 9 AIX загрузочный 4f QNX4.x 3-я част 93 Amoeba e1 DOS access a OS/2 Boot-менед 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS фс f W95 расшир. (LB 54 OnTrackDM6 a6 OpenBSD ee GPT 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 11 Скрытый FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC з 12 Compaq диагност 5c Priam Edisk a9 NetBSD f1 SpeedStor 14 Скрытый FAT16 < 61 SpeedStor ab Darwin загрузоч f4 SpeedStor 16 Скрытый FAT16 63 GNU HURD или Sy af HFS / HFS+ f2 DOS вторичный 17 Скрытый HPFS/NT 64 Novell Netware b7 BSDI фс fb VMware VMFS 18 AST SmartSleep 65 Novell Netware b8 BSDI своп fc VMware VMKCORE 1b Скрытый W95 FAT 70 DiskSecure Mult bb Boot Wizard скр fd Автоопределение 1c Скрытый W95 FAT 75 PC/IX bc Acronis FAT32 L fe LANstep 1e Скрытый W95 FAT 80 Old Minix be Solaris загр. ff BBT
Code: Select all
#Диск /dev/sda
fdisk /dev/sda
#Создаем /dev/sda1 на 20 Гб с флагом загрузки и типом - Автоопределение Linux raid
n
p
1
Enter
+20G
t
1
fd
a
w
#Создаем /dev/sda2 на 2 Гб с типом - Linux своп
n
p
2
Enter
+2G
t
2
82
w
#Создаем /dev/sda3 на все оставшееся пространство и типом - Автоопределение Linux raid
n
p
3
Enter
Enter
t
3
fd
p
w
Code: Select all
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 * 2048 41945087 41943040 20G fd Автоопределение Linux raid
/dev/sda2 41945088 46139391 4194304 2G 82 Linux своп
/dev/sda3 46139392 104857599 58718208 28G fd Автоопределение Linux raid
Заметка. Чтобы вручную, приведенными ниже командами, не размечать диск /dev/sdb
можно скопировать таблицу разделов с жесткого диска /dev/sda на жесткий диск /dev/sdb:Code: Select all
sfdisk -d /dev/sda | sfdisk /dev/sdb # Проверяем как скопировались таблицы разделов fdisk /dev/sdb p q
Code: Select all
#Диск /dev/sdb
fdisk /dev/sdb
#Создаем /dev/sdb1 на 20 Гб с флагом загрузки и типом - Автоопределение Linux raid
n
p
1
Enter
+20G
t
1
fd
a
w
#Создаем /dev/sdb2 на 2 Гб с типом - Linux своп
n
p
2
Enter
+2G
t
2
82
w
#Создаем /dev/sdb3 на все оставшееся пространство и типом - Автоопределение Linux raid
n
p
3
Enter
Enter
t
3
fd
p
w
Code: Select all
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sdb1 * 2048 41945087 41943040 20G fd Автоопределение Linux raid
/dev/sdb2 41945088 46139391 4194304 2G 82 Linux своп
/dev/sdb3 46139392 104857599 58718208 28G fd Автоопределение Linux raid
Code: Select all
mdadm --create --verbose /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 /dev/sd[ab]1
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sd[ab]2
mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sd[ab]3
4. Ждем окончания создания RAID 1Заметка. --metadata=0.90 необходим для раздела с загрузчиком.
GRUB и Syslinux мне установить не удалось.
Code: Select all
watch cat /proc/mdstat
#Ctrl+C для выхода
Code: Select all
fdisk /dev/md0
n
p
1
Enter
Enter
a
p
w
fdisk /dev/md1
n
p
1
Enter
Enter
t
82
p
w
fdisk /dev/md2
n
p
1
Enter
Enter
p
w
Code: Select all
mkfs.ext4 /dev/md0p1
mkswap /dev/md1p1
mkfs.ext4 /dev/md2p1
partprobe
swapon -a
free -m
Code: Select all
echo "DEVICE partitions" > /etc/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm.conf
8. Проверяем состояние RAID 1Заметка. Откройте и проверьте правильность заполнения /etc/mdadm.conf
/etc/mdadm.conf может сконфигурироваться неверно, например:в следствии чего необходимо:Code: Select all
DEVICE partitions ARRAY /dev/md/porteus.example.net:0 level=raid1 num-devices=2 metadata=1.2 name=porteus.example.net:0 UUID=b1f03d4b:d14ea2f3:50c1c2df:214f3b47
- размонтировать /mnt/md0p1 (еще может быть /mnt/md127p1) и остановить массив:
Code: Select all
umount /mnt/md0p1 /mnt/md127p1 mdadm -S /dev/md0
- вручную исправить путь массива, поправив /dev/md/porteus.example.net:0 (у Вас может быть и другой путь) на /dev/md0:
Code: Select all
DEVICE partitions ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=porteus.example.net:0 UUID=b1f03d4b:d14ea2f3:50c1c2df:214f3b47
- собрать массив заново:
- Для версии 1.2
Code: Select all
mdadm -A --scan
- Для версии 0.9
Code: Select all
mdadm -A /dev/md0 --update=super-minor /dev/sda1 /dev/sdb1
- проверить, что выдает команда:
Code: Select all
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}'
Code: Select all
cat /proc/mdstat
Code: Select all
Personalities : [raid1]
md2 : active raid1 sdb3[1] sda3[0]
29342720 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
2095104 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
20955136 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Code: Select all
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
Code: Select all
root@porteus:~# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun May 7 10:41:27 2017
Raid Level : raid1
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun May 7 10:58:32 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : porteus:0 (local to host porteus)
UUID : e9e2bcf7:d279d7e1:d042a7fc:dd2025bb
Events : 17
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
root@porteus:~# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Sun May 7 10:42:57 2017
Raid Level : raid1
Array Size : 2095104 (2046.00 MiB 2145.39 MB)
Used Dev Size : 2095104 (2046.00 MiB 2145.39 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun May 7 10:58:32 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : porteus:1 (local to host porteus)
UUID : 61de6efe:4496c7bf:805c090c:43483f3c
Events : 17
Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
root@porteus:~# mdadm --detail /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Sun May 7 10:44:04 2017
Raid Level : raid1
Array Size : 29342720 (27.98 GiB 30.05 GB)
Used Dev Size : 29342720 (27.98 GiB 30.05 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun May 7 10:58:32 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : porteus:2 (local to host porteus)
UUID : 3489cc13:a73f47f4:2a7f8339:9ddb1e6e
Events : 17
Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 8 19 1 active sync /dev/sdb3
root@porteus:~#
Code: Select all
fdisk -l | grep /dev/md
Code: Select all
Диск /dev/md0: 20 GiB, 21458059264 байт, 41910272 секторов
/dev/md0p1 2048 41910271 41908224 20G 83 Linux
Диск /dev/md1: 2 GiB, 2145386496 байт, 4190208 секторов
/dev/md1p1 2048 4190207 4188160 2G 82 Linux своп
Диск /dev/md2: 28 GiB, 30046945280 байт, 58685440 секторов
/dev/md2p1 2048 58685439 58683392 28G 83 Linux
Code: Select all
lsblk -e7 -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Code: Select all
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 50G disk
├─sda1 20G linux_raid_member part
│ └─md0 20G raid1
│ └─md0p1 20G ext4 md /mnt/md0p1
├─sda2 2G linux_raid_member part
│ └─md1 2G raid1
│ └─md1p1 2G swap md [SWAP]
└─sda3 28G linux_raid_member part
└─md2 28G raid1
└─md2p1 28G ext4 md /mnt/md2p1
sdb 50G disk
├─sdb1 20G linux_raid_member part
│ └─md0 20G raid1
│ └─md0p1 20G ext4 md /mnt/md0p1
├─sdb2 2G linux_raid_member part
│ └─md1 2G raid1
│ └─md1p1 2G swap md [SWAP]
└─sdb3 28G linux_raid_member part
└─md2 28G raid1
└─md2p1 28G ext4 md /mnt/md2p1
Code: Select all
chown -R guest:users /mnt/md2p1
Восстановление RAID 1 в Porteus
Имеется два диска /dev/sda и /dev/sdb в RAID 1 (см. начало статьи):
Code: Select all
/dev/sda1, /dev/sdb1 = /dev/md0
/dev/sda2, /dev/sdb2 = /dev/md1
/dev/sda3, /dev/sdb3 = /dev/md2
Code: Select all
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
Необходимо извлечь сбойный диск sda из массива, помечаем его сбойным для всех массивов:
Code: Select all
mdadm --manage /dev/md0 --fail /dev/sda1
mdadm --manage /dev/md1 --fail /dev/sda2
mdadm --manage /dev/md2 --fail /dev/sda3
Code: Select all
mdadm --manage /dev/md0 --remove /dev/sda1
mdadm --manage /dev/md1 --remove /dev/sda2
mdadm --manage /dev/md2 --remove /dev/sda3
После подключения нового диска, нужно на нем создать такую же разметку, как и на соседнем диске, копируем разметку командой:
Code: Select all
sfdisk -d /dev/sdb | sfdisk --force /dev/sda
Code: Select all
fdisk -l | grep dev
Code: Select all
mdadm --manage /dev/md0 --add /dev/sda1
mdadm --manage /dev/md1 --add /dev/sda2
mdadm --manage /dev/md2 --add /dev/sda3
Code: Select all
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
Удаление RAID массивов
Останавливаем массивы
Code: Select all
mdadm -S /dev/md0
mdadm -S /dev/md1
mdadm -S /dev/md2
Code: Select all
mdadm --zero-superblock /dev/sd[a-b]1
mdadm --zero-superblock /dev/sd[a-b]2
mdadm --zero-superblock /dev/sd[a-b]3