Κυλλήνη

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.