Gentoo + GPT + LVM + RAID5. Brain dump
Установка Gentoo на систему без EFI, с программным RAID5, возможностью расширять хранилище до гигантских размеров с помощью разметки дисков с GPT и настройки LVM поверх рейда. Для загрузки используется Grub2.
Размечаем все диски одинаково с помощью gdisk или parted:
Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02 bios_grub
2 4096 2101247 1024.0 MiB 8300 boot
3 2101248 976773134 464.8 GiB FD00 raid
Создаём зеркальный RAID-1 из разделов для будущего /boot и пятый рейд из разделов под LVM:
sysresccd ~ # mdadm --create /dev/md2 -e 0 --level=1 --raid-disks=3 /dev/sd[abc]2
sysresccd ~ # mdadm --create /dev/md3 --level=5 --raid-disks=3 /dev/sd[abc]3
Ждём когда массивы перестроятся:
sysresccd ~ # cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md3 : active raid5 sdc3[3] sdb3[1] sda3[0]
974668800 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 1.2% (5884148/487334400) finish=83.4min speed=96124K/sec
md2 : active raid1 sdc2[2] sdb2[1] sda2[0]
1048512 blocks [3/3] [UUU]
unused devices: <none>
--- SNIP ---
sysresccd ~ # cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md3 : active raid5 sdc3[3] sdb3[1] sda3[0]
974668800 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
md2 : active raid1 sdc2[2] sdb2[1] sda2[0]
1048512 blocks [3/3] [UUU]
unused devices: </none><none>
</none>
Массивы собраны, можно настраивать LVM:
sysresccd ~ # pvcreate /dev/md3
sysresccd ~ # vgcreate lvm_over_raid /dev/md3
sysresccd ~ # lvcreate -L 920G -n root lvm_over_raid
sysresccd ~ # lvdisplay
--- Logical volume ---
LV Name /dev/lvm_over_raid/root
VG Name lvm_over_raid
LV UUID Ycjt9p-mo96-XguO-H2Tj-brhB-TEof-9jeZrK
LV Write Access read/write
LV Status available
# open 0
LV Size 920.00 GiB
Current LE 235520
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 4096
Block device 253:0
sysresccd ~ # lvcreate -L 20G -n root lvm_over_raid
sysresccd ~ # lvcreate -L 20G -n home lvm_over_raid
sysresccd ~ # lvcreate -L 50G -n opt lvm_over_raid
sysresccd ~ # lvcreate -L 100G -n usr lvm_over_raid
sysresccd ~ # lvcreate -L 350G -n var lvm_over_raid
Теперь файловые системы:
sysresccd ~ # mkfs.ext4 -L root -O dir_index /dev/lvm_over_raid/root
sysresccd ~ # mkfs.ext4 -L home -O dir_index /dev/lvm_over_raid/home
sysresccd ~ # mkfs.ext4 -L opt -O dir_index /dev/lvm_over_raid/opt
sysresccd ~ # mkfs.ext4 -L usr -O dir_index /dev/lvm_over_raid/usr
sysresccd ~ # mkfs.ext4 -L usr -O dir_index /dev/lvm_over_raid/var
sysresccd ~ # mkfs.ext3 -L boot /dev/md2
sysresccd ~ # mount /dev/lvm_over_raid/root /mnt/gentoo/
sysresccd ~ # mkdir /mnt/gentoo/home
sysresccd ~ # mkdir /mnt/gentoo/opt
sysresccd ~ # mkdir /mnt/gentoo/usr
sysresccd ~ # mkdir /mnt/gentoo/boot
sysresccd ~ # mkdir /mnt/gentoo/var
sysresccd ~ # mount /dev/md2 /mnt/gentoo/boot/
sysresccd ~ # mount /dev/lvm_over_raid/opt /mnt/gentoo/opt/
sysresccd ~ # mount /dev/lvm_over_raid/usr /mnt/gentoo/usr/
sysresccd ~ # mount /dev/lvm_over_raid/var /mnt/gentoo/var/
sysresccd ~ # mount /dev/lvm_over_raid/home /mnt/gentoo/home/
sysresccd ~ # mount
rootfs on / type rootfs (rw)
udev on /dev type tmpfs (rw,relatime,size=10240k,mode=755)
tmpfs on /livemnt/boot type tmpfs (rw,relatime,size=524288k)
/dev/loop0 on /livemnt/squashfs type squashfs (ro,relatime)
tmpfs on /livemnt/memory type tmpfs (rw,relatime)
none on / type aufs (rw,noatime,si=1b137fb93a44187)
tmpfs on /livemnt/tftpmem type tmpfs (rw,relatime,size=524288k)
none on /tftpboot type aufs (rw,relatime,si=1b137fb93b8e187)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
rc-svcdir on /lib/rc/init.d type tmpfs (rw,nosuid,nodev,noexec,relatime,size=1024k,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
usbfs on /proc/bus/usb type usbfs (rw,noexec,nosuid,devmode=0664,devgid=85)
tmpfs on /tmp type tmpfs (rw)
/dev/mapper/lvm_over_raid-root on /mnt/gentoo type ext4 (rw)
/dev/md2 on /mnt/gentoo/boot type ext3 (rw)
/dev/mapper/lvm_over_raid-opt on /mnt/gentoo/opt type ext4 (rw)
/dev/mapper/lvm_over_raid-usr on /mnt/gentoo/usr type ext4 (rw)
/dev/mapper/lvm_over_raid-var on /mnt/gentoo/var type ext4 (rw)
/dev/mapper/lvm_over_raid-home on /mnt/gentoo/home type ext4 (rw)
Дальше установка Gentoo как обычно по хендбуку… Важно не забыть вкомпилить в ядро поддержку RAID-массивов, LVM, Device mapper, необходимых файловых систем и т.д.
Доходим до fstab и /etc/mdadm.conf. Смотрим UUID’ы девайсов:
sysresccd ~ # blkid
--- SNIP ---
/dev/md2: LABEL="boot" UUID="6a07375d-a99b-4a83-ab29-0052a80691d0" SEC_TYPE="ext2" TYPE="ext3"
/dev/md3: UUID="QhFiW9-5yAN-4O9C-Xu0A-InJD-QXZY-x7Y2ns" TYPE="LVM2_member"
/dev/mapper/lvm_over_raid-root: LABEL="root" UUID="432340d4-9ba2-4786-9e43-1722458de0e0" TYPE="ext4"
/dev/mapper/lvm_over_raid-home: LABEL="home" UUID="12d53371-1e62-46fb-9457-f668bf51337f" TYPE="ext4"
/dev/mapper/lvm_over_raid-opt: LABEL="opt" UUID="9d4475e1-f50a-4eb5-b046-216e05285269" TYPE="ext4"
/dev/mapper/lvm_over_raid-usr: LABEL="usr" UUID="0451621d-9222-4a6c-82c3-21eabc971ea3" TYPE="ext4"
/dev/mapper/lvm_over_raid-var: LABEL="var" UUID="d5dec19b-6cdb-4ce2-a2e5-762c3e98dddf" TYPE="ext4"
/dev/mapper/crypt-swap: LABEL="swap" UUID="1237ff2d-561b-48a2-a723-6ae888c9d00a" TYPE="swap"
sysresccd ~ # cat /mnt/gentoo/etc/fstab
# /etc/fstab: static file system information.
# <fs> <mountpoint> <type> <opts> <dump /pass>
UUID=6a07375d-a99b-4a83-ab29-0052a80691d0 /boot ext3 noauto,noatime 1 2
UUID=432340d4-9ba2-4786-9e43-1722458de0e0 / ext4 noatime 0 1
UUID=0451621d-9222-4a6c-82c3-21eabc971ea3 /usr ext4 noatime,nodev 0 2
UUID=d5dec19b-6cdb-4ce2-a2e5-762c3e98dddf /var ext4 noatime,nodev 0 2
UUID=9d4475e1-f50a-4eb5-b046-216e05285269 /opt ext4 noatime,nodev 0 2
UUID=12d53371-1e62-46fb-9457-f668bf51337f /home ext4 noatime,nodev 0 2
/dev/mapper/crypt-swap none swap sw,loop 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
tmpfs /var/tmp/portage tmpfs size=2G 0 0
</dump></opts></type></mountpoint></fs>
Содержимое mdadm.conf
DEVICE /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sda3 /dev/sdb3 /dev/sdc3
ARRAY /dev/md2 level=raid1 num-devices=3 metadata=0.90 UUID=fa6d7332:f4c3d963:c44c77eb:7ee19756
devices=/dev/sda2,/dev/sdb2,/dev/sdc2
ARRAY /dev/md3 level=raid5 num-devices=3 metadata=1.2 name=sysresccd:3 UUID=7af15fd5:247a2e2d:15d3dbee:a8f808fe
devices=/dev/sda3,/dev/sdb3,/dev/sdc3
sysresccd ~ # rc-update add mdadm boot
В конфиг genkernel добавляем/меняем опции:
LVM="yes"
MDADM="yes"
MDADM_CONFIG="/etc/mdadm.conf"
DISKLABEL="yes"
REAL_ROOT="UUID=432340d4-9ba2-4786-9e43-1722458de0e0"
Устанавливаем grub2 на все диски на случай отказа. Конфиги и stage 1.5 поидее должны установиться в наш /boot, который в зеркальном массиве. При этом grub2 вполне может с них грузиться.
sysresccd ~ # for i in sda sdb sdc; do grub2-install --recheck --modules="raid mdraid1x ext2 part_msdos" --no-floppy /dev/$i; done
sysresccd ~ # grub2-mkconfig -o /boot/grub2/grub.cfg
Вся прелесть метода в том, что можно постепенно добавлять в конфигурацию диски почти неограниченного размера, в т.ч. заменять ими старые, после чего перестраивать RAID-массивы, гибко изменять размеры партиций за счёт LVM. Теоретически, всё это возможно делать прямо на живой системе без перезагрузок и потери данных. При желании и достаточном количестве дисков можно «апгрейдить» RAID5 до RAID6.