====== Root na raid w CentOS ====== Scenariusz: * serwer z IP 192.168.1.100 z dwoma [[wiki:zerowanie|wyzerowanymi dyskami]], * potrzebny jest CentOS 8 z partycją root na programowym raid 1. == Przygotowanie hosta == Należy uruchomić hosta używając Linux Rescue CD i przygotować macierz: # mdadm --create /dev/md0 --metadata=0.9 --level=1 --raid-devices=2 /dev/sda /dev/sdb Postępy w budowie macierzy można obejrzeć w pliku mdstat: # cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb[1] sda[0] 244198464 blocks [2/2] [UU] [>....................] resync = 1.9% (4682944/244198464) finish=52.2min speed=76356K/sec bitmap: 2/2 pages [8KB], 65536KB chunk unused devices: Dane o macierzy i jej ID są dostępne przez: # mdadm --detail --scan --verbose ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=fef2f68b:1a462c80:c44c77eb:7ee19756 devices=/dev/sda,/dev/sdb # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 819.5M 1 loop /run/archiso/sfs/airootfs sda 8:0 0 232.9G 0 disk └─md0 9:0 0 232.9G 0 raid1 sdb 8:16 0 232.9G 0 disk └─md0 9:0 0 232.9G 0 raid1 sr0 11:0 1 871M 0 rom Dalej utworzenie partycji: # fdisk /dev/md0 Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x64998720. Command (m for help): o Created a new DOS disklabel with disk identifier 0xfe784f57. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-488396927, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-488396927, default 488396927): +220G Created a new partition 1 of type 'Linux' and of size 220 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): First sector (461375488-488396927, default 461375488): Last sector, +/-sectors or +/-size{K,M,G,T,P} (461375488-488396927, default 488396927): +4G Created a new partition 2 of type 'Linux' and of size 4 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 819.5M 1 loop /run/archiso/sfs/airootfs sda 8:0 0 232.9G 0 disk └─md0 9:0 0 232.9G 0 raid1 ├─md0p1 259:0 0 220G 0 part └─md0p2 259:1 0 4G 0 part sdb 8:16 0 232.9G 0 disk └─md0 9:0 0 232.9G 0 raid1 ├─md0p1 259:0 0 220G 0 part └─md0p2 259:1 0 4G 0 part sr0 11:0 1 871M 0 rom # mkfs -t ext4 /dev/md0p1 mke2fs 1.44.5 (15-Dec-2018) Creating filesystem with 57671680 4k blocks and 14417920 inodes Filesystem UUID: 511d0d07-4d55-4b6c-939e-d23ae2da1ce0 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done # mkswap /dev/md0p2 Setting up swapspace version 1, size = 4 GiB (4294963200 bytes) no label, UUID=5667d007-0d3e-4b54-8a72-6ade52609adc Należy zamontować przyszłą partycję root w katalogu (na przykład) /mnt/centos8: # mkdir /mnt/centos8 # mount -t ext4 /dev/md0p1 /mnt/centos8 Potem należy utworzyć hasło roota na Rescue CD: # passwd [wpisać] [i potwierdzić] == Instalacja CentOSa == Należy zainstalować CentOSa używając wyłącznie partycji root (bez /boot, /var, /home i podobnych) na wirtualce używając VirtualBoxa, lub podobnego oprogramowania. Serwer oraz wirtualka muszą się "widzieć" w sieci, na przykład będąc w tej samej sieci 192.168.1.0. Po instalacji CentOSa należy go zaktualizować oraz zainstalować dwa programy: dnf update dnf install rsync mdadm Następnie należy [[wiki:slowniczek_rsync|skopiować]] zawartość partycji / na serwer: # rsync -vaxAXHSz --delete / 192.168.1.100:/mnt/centos8/ The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. ECDSA key fingerprint is SHA256:HukswAQlarthYqbpVHIHm80JaWHKX12AxgOn8UuKQxk. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.1.100' (ECDSA) to the list of known hosts. root@192.168.1.100's password: [wpisać hasło roota ustawione w Rescue CD] sending incremental file list ./ bin -> usr/bin lib -> usr/lib lib64 -> usr/lib64 sbin -> usr/sbin [dużo różnych plików...] var/yp/ sent 694,980,592 bytes received 745,802 bytes 1,795,422.95 bytes/sec total size is 1,558,934,091 speedup is 2.24 Wirtualkę można w tym momencie wyłączyć. == Konfiguracja CentOSa na serwerze. == Zachrootować się do CentOSa: # mount --types proc /proc /mnt/centos8/proc # mount --rbind /sys /mnt/centos8/sys # mount --make-rslave /mnt/centos8/sys # mount --rbind /dev /mnt/centos8/dev # mount --make-rslave /mnt/centos8/dev # chroot /mnt/centos8 /usr/bin/bash # source /etc/profile Konfiguracja mdadm: # mdadm --detail --scan --verbose ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=fef2f68b:1a462c80:c44c77eb:7ee19756 devices=/dev/sda,/dev/sdb # mdadm --detail --scan --verbose > /etc/mdadm.conf Linijka z partycją root w /etc/fstab (nie jest najważniejsza, ponieważ zajmie się tym initramfs, ale dla porządku): /dev/md0p1 / ext4 defaults 1 1 Konfiguracja gruba w /etc/default/grub z ID /dev/md0 skopiowanym z /etc/mdadm.conf GRUB_TIMEOUT=8 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.md.uuid=611ab623:8961aa27:c44c77eb:7ee19756" GRUB_DISABLE_RECOVERY="true" GRUB_ENABLE_BLSCFG=true Generowanie konfiguracji gruba w /boot oraz instalacja bootloadera na dyskach: grub2-mkconfig -o /boot/grub2/grub.cfg grub2-install /dev/sda grub2-install /dev/sdb Generowanie initramfs dla najnowszego dostępnego kernela: # ls -al /boot/initramfs* -rw-------. 1 root root 65603975 Nov 8 10:14 /boot/initramfs-0-rescue-fb59150a25934cfc8ccc2719ecb47222.img -rw-------. 1 root root 28012365 Nov 18 15:21 /boot/initramfs-4.18.0-193.28.1.el8_2.x86_64.img -rw-------. 1 root root 24421489 Nov 8 10:37 /boot/initramfs-4.18.0-193.el8.x86_64.img # dracut -f /boot/initramfs-4.18.0-193.28.1.el8_2.x86_64.img 4.18.0-193.28.1.el8_2.x86_64 Rescue CD nie rozumie SeLinuksa, więc pliki po rsyncu na serwerze nie mają odpowiednich "labelów". Należy go [[wiki:wlaczanie_selinux|tymczasowo wyłączyć]] w pliku /etc/sysconfig/selinux, gdyż w innym wypadku po uruchomieniu systemu partycja root będzie tylko do odczytu: SELINUX=disabled Wyjść z chroota, zrestartować serwer (pamiętać o wyjęciu nośnika z Rescue CD). Po ponownym uruchomieniu serwera należy zamienić nazwę pliku w /etc/sysconfig/network-scripts oraz nazwy interefejsu w nim skonfigurowanego, żeby odpowiadały nazwie interfejsu podanego przez: # ip a oraz zrestartować NetworkManagera: # systemctl restart NetworkManager