Установка Linux под ProxMox/KVM, часть 3
Третий из четырёх чисто технических постов про установку Linux. Далее — оптимизация дисковой подсистемы.
- Если у вас используется "честный" RAID-контроллер либо SATA-диски с реально работающей поддержкой NCQ, то имеет смысл отключить встроенный в ядро элеватор IO-операций, дабы не мешал железкам нормально работать. Для этого в /etc/default/grub добавляем параметр загрузки ядра "elevator=noop".
Должно получиться как-то так:
GRUB_CMDLINE_LINUX="elevator=noop"
После чего говорим "update-grub". - Если у вас старенький HP SmartArray P400, то при желании можно заменить его драйвер "cciss" на более новый "hpsa". Для этого в /etc/modprobe.d/hpsa.conf пишем
options hpsa hpsa_allow_any=1
blacklist cciss
после чего произносим
update-initramfs -u
и перезагрузка. - Оптимизируем уже имеющиеся файловые системы на работу с RAID-массивом (если оный имеется). Новые файловые системы также создаем с учетом данных требований.
Сперва нам потребуется рассчитать параметры "stride" и "stripe-width".
Stride - это количество блоков файловой системы (в штуках), которое умещаются в одном chunk-е RAID-массива. Так, например, если у HP-шных RAID-контроллеров дефолтный размер chunk-а равен 128 килобайт, а размер блока у ext3/4 по умолчанию равен 4 килобайта, то Stride получается 128/4=32 (штуки).
Stripe-Width - это количество блоков файловой системы (в штуках), которое умещается в одном страйпе RAID-массива. На практике это число обычно равно размеру Stride, помноженному на количество дисков с уникальными данными (для Raid1 и Raid1+0 это "количество дисков пополам", для Raid0 равно общему количеству дисков, для raid5 - количеству дисков минус один и т.п.). Если у нас Raid1+0 из 8-ми физических дисков, то StripeWidth=Stride*4=32*4=128.
Эти параметры файловой системы можно менять "на лету" при помощи tune2fs.
tune2fs -E stride=32,stripe_width=128 /dev/sda4 - Далее идёт немного спорная настройка. Некоторые советуют увеличивать значение read-ahead (количество пред-читаемых блоков с блочного устройства), утверждая, что это ведет к заметному росту производительности систем на базе HP-шных SmartArray-ев. Конечно, в каждом конкретном случае нужно проверять самостоятельно. Если решите последовать этому совету, то в /etc/rc.local нужно будет дописать
/sbin/blockdev --setra 8192 /dev/sda
exit 0 - Конкретно ProxMox для своей работы требует наличия LVM и отдельного логического тома, куда он будет складывать образы виртуальных машин. Итак.
apt-get install lvm2
Размечаем пространство под физический том для LVM, например, при помощи parted. Создаем на этом разделе физический том для LVM.
pvcreate -M2 --dataalignment 128K /dev/sda5
"M2" означает вторую версию метаданных, dataaligment - как выравнивать данные. Я в качестве множителя беру chunk физического RAID-массива.
Создаем группу томов:
vgcreate -M 2 -s 16M main /dev/sda5
"M" - версия метаданных, "s" - размер chunk-а применительно к логическому тому, "main" - имя группы томов (придумываем сами). Почему 16 мегабайт? А не знаю, просто мне так захотелось.
Создаем логический том для хранения виртуалок. Важно: занимаем не всё свободное место. Немного оставляем для lvm snapshots и прочих непредвиденных расходов. Помните, что добавить еще дискового пространства к логическому тому можно без проблем, а вот наоборот...
lvcreate -L 3T -n vz main
Аргументы команды: объем, имя логического тома, имя группы томов. - Создаём файловую систему на логическом томе (не забыли про stride и stripe-width?). Еще имеет смысл вручную задать количество inod-ов, ибо на больших разделах под таблицы инодов утилита с настройками по умолчанию зарезервирует неоправданно много места (подробнее здесь).
mkfs.ext3 -b 4096 -I 128 -m 0 -L vzfs -E stride=32,stripe-width=128 -O sparse_super,large_file -N 786432 /dev/mapper/main-vz
Также я обычно отключаю автоматическую проверку этой файловой системы, поскольку проверяться она может о-о-о-о-очень долго.
tune2fs -c 0 -i 0 /dev/mapper/main-vz - Примонтируем только что созданную систему. Для этого узнаем ее UUID.
blkid /dev/mapper/main-vz
И вписываем его в /etc/fstab, предварительно создав директорию "/var/lib/vz".
UUID=67f250eb-d8e2-4016-aa68-f5f6724ed160 /var/lib/vz ext4 noatime,barrier=0 0 0 - Проверяем, что смонтировалось. Перезагружаемся и приступаем к установке ProxMox-а.