Организация RAID на LVM под Fedora

Гибридный RAID (избыточный массив независимых дисков) 1 (Зеркало) RAM drive & SATA HDD, используя LVM с LUKS на Linux Fedora.

 

1. Вступление

IT-отрасль постоянно балансирует между безопасностью и стабильностью. С таким балансом, производительность обычно затрагивает практичность. В области защиты зашифрованных данных существует 3 фактора, влияющих на производительность, а следовательно и на практичность: жесткий диск, центральный процессор и оперативная память. Из этих факторов жесткий диск всегда является наиболее слабым фактором (даже несмотря на твердотельные накопители SSD).

FreeSoftware предлагает довольно элегантное решение для защиты шифрованных данных, под названием Linux Unified Key Setup (LUKS).

2. Определения и критерии

Fedora 21 использует не более 1 Гб памяти, при этом система позволяет использовать до 16 ГбDDR3, поэтому для запуска Fedora будем использовать 16 Гб RAM, для создания RAM-drive, на котором будем использовать Fedora.

2А. RAID 1

В данной статье ссылка на RAID 1 (зеркало) означает, что RAID 1 реализован через LVM2.

- Addlvcreate/lvchange --[raid]{min|max}recoveryrate для raidLVs.
- Addlvchange --[raid]writemostly/writebehindsupportforRAID1
- Add lvchange --[raid]syncaction for scrubbing of RAID LVs.

2Б. Linux Unified Key Setup (LUKS)

В простейшем случае, LUKS расширяет функциональность Crypt setup, с целью соответствия TKS1. TKS1 использует ключ хэш для выполнения данных де/шифрования через алгоритм шифрования.

2В. образ Fedora для загрузки с флешки

На официальном сайте проекта Fedora можно найти информацию как по созданию образа для сменного носителя (типа флэш), чтобы загружаться непосредственно с него, так и образа сетевого установщика (net-install image). Обычно Fedoda USB media позволяет загрузиться и установить gparted. Как показала практика, современная версия Fedora 21 занимает примерно 2 Гб на флэшке.

2Г. Тестирование CPU (AES-NI), RAM и HDD

Новейшие процессоры Intel включают расширение системы команд AES-NI. Для проверки процессора на наличие данных команд введём следующее:

cat /proc/cpuinfo | grepaes

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

cryptsetup benchmark
Результаты: 
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 386073 iterations per second
PBKDF2-sha256 209380 iterations per second
PBKDF2-sha512 140034 iterations per second
PBKDF2-ripemd160 308404 iterations per second
PBKDF2-whirlpool 164870 iterations per second
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 434.6 MiB/s 1528.2 MiB/s
serpent-cbc 128b 63.3 MiB/s 212.4 MiB/s
twofish-cbc 128b 133.2 MiB/s 250.6 MiB/s
aes-cbc 256b 316.0 MiB/s 1140.8 MiB/s
serpent-cbc 256b 63.7 MiB/s 213.1 MiB/s
twofish-cbc 256b 132.8 MiB/s 250.2 MiB/s
aes-xts 256b 1264.3 MiB/s 1266.8 MiB/s
serpent-xts 256b 218.7 MiB/s 207.4 MiB/s
twofish-xts 256b 241.3 MiB/s 247.5 MiB/s
aes-xts 512b 994.2 MiB/s 986.7 MiB/s
serpent-xts 512b 218.8 MiB/s 208.9 MiB/s
twofish-xts 512b 243.7 MiB/s 247.7 MiB/s

AES-XTS с 256 битным ключом показывает наилучшие результаты. По умолчанию Fedora (через Anaconda) устанавливает AES-XTS 512 битный ключLUKS раздела, используя хэш SHA1.

Для отображения данных о памяти введём следующее:

type# dmidecode --type 17 | less

В нашем случае получим:

Size: 8192 MB
Form Factor: SODIMM
Type: DDR3
Speed: 1600 MHz
Configured Clock Speed: 1600 MHz

Предположим, что у нас достаточно оперативной памяти для создание виртуального диска на 1 Гб для тестирование пропускной способности:

# modprobebrdrd_nr=1 rd_size-1048576 max_part=0

Теперь протестируем скорость чтения:

# hdparm -t /dev/ram0
/dev/ram0:Timing buffered disk reads: 5050 MB in  3.00 seconds = 1683.23
MB/sec

После тестирование виртуальный диск можно удалить:

# rmmodbrd

Для сравнения теперь протестируем жесткий диск:

# hdparm -t /dev/sda3
/dev/sda3
: Timing buffered disk reads: 302 MB in 3.00 seconds = 100.51 MB/sec

При создании зеркала RAID 1, мы пытаемся увеличить пропускную способность шифрования для Fedora(OS) от 100,51МБ / с (скоростьHDD) в 1260Mб/~1321Мб / с размещением шифрования на ЦП.

3. LVM или создание PV, VG&LG

3A. Физический том (pv)

Выберем следующую схему разделов: sda1 /boot/efi 256 MiB, sda2 /boot 512 MiB, sda3LVM2 все остальное пространство(~ 930,76Мб)

pvcreate /dev/sda3

3Б. Группа томов (vg)

При создании группы томов выбреем имя хоста:localhost:

vgcreate fedora_localhost /dev/sda

3В. Логический том

Остальные разделы в системе (/, / OPT, / VAR)

lvcreate -L 16G -nlv_rootfedora_localhost
lvcreate -L 16G -nlv_swapfedora_localhost
lvcreate -L 16G -nlv_optfedora_localhost
lvcreate -L 16G -nlv_varfedora_localhost

При наличии свободного места, его можно использовать под lv_home: lvcreate -l 90% Free -nlv_homefedora_localhost

cryptsetup open --type plain -d /dev/urandom /dev/fedora_localhost/lv_rootto_be_wiped
cat /dev/zero > /dev/mapper/to_be_wiped
cryptsetupclose /dev/fedora_localhost/lv_root

Повторитеэтидействиядляостальныхлогическихтомов, также рекомендуется сохранить / DEV / fedora_ [hostname] / lv_home.

3Г. Величина RAM диска

Создадим виртуальный диск для RAID. Модуль ядра brd использует K, поэтому 1048576K=1Гби, следовательно, 10(для 10Гб) = 10485760.Однакоlv_rootраздел, созданный ранее,был размером 16Гб. Мы собираемся удалить этот раздел в следующем шаге и сократить его до 10Гб, однако лучше увеличить объём lv_root и затем уменьшить его, а не пытаться угадать, сколько еще памяти вам нужно.

Создадим модуль ядра Kernelbrd, размером 10 Гб:

# modprobebrdrd_nr=1 rd_size-10485760 max_part=0

Затем создадим физический том pv вместе с Ram диском:

pvcreate /dev/ram0

Создадим временную группу томов VGдля получения экстентов/dev/ram0

vgcreatetestvg

Далее создадим логический том, используя 100% от RAMдиска:

lvcreate 100%FREE -n lv_testtestvg

Теперь выянимсколько*экстентов*находятся надиске:

vgs -o +vg_free_count,vg_extent_count

На диске RAM находится 2559 экстентов.

Теперь логический том можно удалить:

lvremove /dev/testvg/lv_test

Теперь удалим группутомов:

vgremovetestvg

Последним удалим физический том:

pvremove /dev/ram0

Наконец разгрузим RAM диск:

# rmmodbrd

Обратите внимание, LVMsне ожидает, что RAMдискибудут логическим томом LVиочень чувствительны кневозможностинайти физический том PV, поэтому всегда аккуратно выключайте RAMдиск.

3Д. Удаление и пересоздание lv_rootчерез экстенты

В нашем случае используется 2559 экстента, которые в данный момент соответствуют размеру HDD. Для удаленияlv_root введём следующее:

lvremove /dev/fedora_[hostname]/lv_root

Теперь пересоздадим lv_root указав экстенты, а не Мб:

lvcreate -l2559 -n lv_root fedora_[hostname]

4. LUKSAES шифрование & файловая система Ext4

На данный момент у нас должно быть пятьРНв системе, lv_root~10GiB, lv_opt16GiB, lv_var16Джибе, lv_swap16Джибеиlv_home~768GiB. Исходя из Cryptsetup тестов, AES-XTS обладает самой высокой пропускной способностью, при использовании с 256-битным ключом. Также, вместоSHA1 мы используем sha512, и зададим время 5сек(-i 5000) нахэшитерации. При установке через mapper, Fedora монтирует LUKSшифрованные разделы на /Dev/mapper/luks-[UUID]. Для подключения раздела через mapper вручную, мы должны будем использовать CryptsetupluksUUID[DEV] для полученияUUID.

Для каждого из 5 LV необходимо будет повторить одни и те же операции, в качестве примера рассмотрим 2 LV, что бы наглядно продемонстрировать изменения:

cryptsetupluksFormat -y -c aes-xts-plain -s 256 -h SHA512 -i 5000 --use-urandom
/dev/mapper/fedora_hostname-lv_root
cryptsetupluksUUID /dev/mapper/fedora_hostname-lv_root
cryptsetupluksOpen /dev/mapper/fedora_hostname-lv_rootluks-[UUID]
mkfs.ext4 -m1 -L hostname-root /dev/mapper/luks-[UUID]
lv_home
cryptsetupluksFormat -y -c aes-xts-plain -s 256 -h SHA512 -i 5000 --use-urandom
/dev/mapper/fedora_hostaname-lv_home
cryptsetupluksUUID /dev/mapper/fedora_hostname-lv_home
cryptsetupluksOpen /dev/mapper/fedora_hostname-lv_homeluks-[UUID]
mkfs.ext4 -m1 -L hostname-home /dev/mapper/luks-[UUID]

5. RAMдиск& (LVM) RAID 1

Так как мы установили Fedora 20 через сетевую установку с MATE, корневой раздел выражен размером экстентов (2559 = ~10Гб), RAM диск может легко использоваться RAID.

5A. Создание RAM диска и добавление его вLVMRAID 1

# modprobebrdrd_nr=1 rd_size=10485760 max_part=0
# pvcreate /dev/ram0
# vgextendfedora_localhost /dev/ram0
(Повашемужеланиюможнопосмотретьвашилогическиетома)# lvs -a -o
name,copy_percent,devicesfedora_localhost
# lvconvert--type raid1 -m1 fedora_localhost/lv_root

Посмотрим процент построения зеркала

# lvs -a -o name,copy_percent,devicesfedora_localhost

Наконец изменим HDD наwritemostly, для того, чтобы чтение происходило изRAMдиска:

# lvchange --writemostly /dev/sda3:y fedora_localhost/lv_root

5Б. Удаление RAM диска из LVMRAID 1 (в случае потери мощности системы)

# lvchange --writemostly /dev/sda3:n fedora_localhost/lv_root
# lvconvert -m0 fedora_localhost/lv_root /dev/ram0
# vgreducefedora_localhost /dev/ram0
# rmmod /dev/ram0

6. Systemd Unit file

Теперь дадим возможность systemd управлять созданием/удалением RAM диском &RAID 1. Для этого создадим компонент systemd, под названием 2Ro2L (RAMdiskRAIDonLVM&LUKS) и два скрипта:

# pluma /lib/systemd/system/2Ro2L.service

[Unit]
Description=Enable RAMdisk RAID 1 on LVM & LUKS
After=multi-user.target

[Service]
RemainAfterExit=yes
ExecStart=/usr/sbin/2Ro2Lstart
ExecStop=/usr/sbin/2Ro2Lstop
Type=oneshot
[Install]
WantedBy=multi-user.target
# chmod 644 /lib/systemd/system/2RoRL.service

Теперь создадим, запустим и затем остановим скрипты:

# pluma /usr/sbin/2Ro2Lstart
#!/bin/sh
# создание RAM диска
modprobebrdrd_nr=1 rd_size=10485760 max_part=0
# создание физического томаLVMна созданном RAM диске:
pvcreate /dev/ram0
# Расширение группы томов, включаяpv
vgextend fedora_localhost /dev/ram0
# Конвертирование логического тома в конфигурацию RAID 1
lvconvert--type raid1 -m1 fedora_localhost/lv_root
# Изменение свойств логического тома RAID
lvchange --writemostly /dev/sda3:y fedora_localhost/lv_root
# pluma /usr/sbin/2Ro2Lstop
#!/bin/sh
# Удаление свойств логического тома RAID
lvchange --writemostly /dev/sda3:n fedora_localhost/lv_root
# УдалениеRAM диска из RAID
lvconvert -m0 fedora_localhost/lv_root /dev/ram0
# УдалениеRAM диска из группы томов
vgreducefedora_localhost /dev/ram0
# Полное удаление RAM диска
rmmodbrd
# chmod 755 /usr/sbin/2Ro2Ls*

Далее необходимо запустить службу, затем остановить службу, и если все пройдет хорошо, включить службу для многопользовательской цели

# systemctl start 2Ro2L.service
# systemctl stop 2Ro2L.service

Если ошибок не появилось, то можно запустить службу:

# systemctl enable 2Ro2L.service
Авторизуйтесь, чтобы получить возможность оставлять комментарии

Другие материалы в этой категории:

Go to top