Narzędzia użytkownika

Narzędzia witryny


wiki:centos_root_raid

Root na raid w CentOS

Scenariusz:

  • serwer z IP 192.168.1.100 z dwoma 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: <none>

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 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 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
wiki/centos_root_raid.txt · ostatnio zmienione: 2021/04/19 07:18 przez lukasz