Administrator Linux. Professional [homework]

1. Обновить ядро в базовой системе

Воспользовался статьей - https://docs.rockylinux.org/ru/guides/custom-linux-kernel/


Дано - дефолтный Debian 10

root@otus-kernel-upgrade:~# uname -a
Linux otus-kernel-upgrade 4.19.0-22-amd64 #1 SMP Debian 4.19.260-1 (2022-09-29) x86_64 GNU/Linux

Желаемый результат - ядро 6.5.2
Качаем, распаковываем, подкладываем конфиг:

root@otus-kernel-upgrade:~# wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.2.tar.xz

root@otus-kernel-upgrade:~# tar -xf linux-6.5.2.tar.xz

root@otus-kernel-upgrade:~# cd linux-6.5.2
root@otus-kernel-upgrade:~/linux-6.5.2# cp -v /boot/config-$(uname -r) .config
'/boot/config-4.19.0-22-amd64' -> '.config'

Из конфига убрал строки:

CONFIG_SYSTEM_TRUSTED_KEYRING
CONFIG_SYSTEM_TRUSTED_KEYS

Запускаем сборку (8 ядер на тачке сборщике):

root@otus-kernel-upgrade:~/linux-6.5.2# make -j 8

Получилось ядро:

root@otus-kernel-upgrade:~/linux-6.5.2# ls -lh arch/x86/boot/bzImage
-rw-r--r-- 1 root root 7.0M Sep  7 16:36 arch/x86/boot/bzImage

root@otus-kernel-upgrade:~/linux-6.5.2# file arch/x86/boot/bzImage
arch/x86/boot/bzImage: Linux kernel x86 boot executable bzImage, version 6.5.2 (root@otus-kernel-upgrade) #1 SMP PREEMPT_DYNAMIC Thu Sep  7 16:35:36 UTC 2023, RO-rootFS, swap_dev 0x6, Normal VGA

Установка модулей в текущую систему
В /lib/modules/6.5.2/ положатся всякие *.ko - (kernel object) подключаемые модули
Которые сбилдились на предыдущем шаге вместе с ядром:

root@otus-kernel-upgrade:~/linux-6.5.2# make modules_install
...

Копируем ядро в boot:

root@otus-kernel-upgrade:~/linux-6.5.2# cp arch/x86/boot/bzImage /boot/vmlinuz-6.5.2

Копируем таблицу адресов функций (она генерится при сборке, и при разных условиях сборки будет разная таблица):

root@otus-kernel-upgrade:~/linux-6.5.2# cp System.map /boot/System.map-6.5.2

Закопировал обратно конфиг (на всякий случай, не уверен что это надо):

root@otus-kernel-upgrade:~/linux-6.5.2# cp .config /boot/config-6.5.2

Сгенерил initrd.img:

root@otus-kernel-upgrade:~/linux-6.5.2# mkinitramfs -o /boot/initrd.img-6.5.2 6.5.2

Далее финальный шаг
Используем bash-скрипт /usr/bin/kernel-install:

root@otus-kernel-upgrade:~/linux-6.5.2# kernel-install add 6.5.2 /boot/vmlinuz-6.5.2

Задача его в том чтобы положить файлики ядра и образа памяти в "куда-надо":
Вот тут видно в чем суть:

root@otus-kernel-upgrade:/boot# tree -I grub
.
├── 23000007c6dc8f78700314355ac81cc3 # вот сюда положились копии initrd.img-6.5.2 и vmlinuz-6.5.2
│   └── 6.5.2
│       ├── initrd
│       └── linux
├── config-4.19.0-18-amd64
├── config-4.19.0-22-amd64
├── config-4.19.0-25-amd64
├── config-6.5.2
├── initrd.img-4.19.0-18-amd64
├── initrd.img-4.19.0-22-amd64
├── initrd.img-4.19.0-25-amd64
├── initrd.img-6.5.2
├── loader
│   └── entries
│       └── 23000007c6dc8f78700314355ac81cc3-6.5.2.conf
├── System.map-4.19.0-18-amd64
├── System.map-4.19.0-22-amd64
├── System.map-4.19.0-25-amd64
├── System.map-6.5.2
├── vmlinuz-4.19.0-18-amd64
├── vmlinuz-4.19.0-22-amd64
├── vmlinuz-4.19.0-25-amd64
└── vmlinuz-6.5.2

4 directories, 19 files

root@otus-kernel-upgrade:/boot# cat loader/entries/23000007c6dc8f78700314355ac81cc3-6.5.2.conf
title      Debian GNU/Linux 10 (buster)
version    6.5.2
machine-id 23000007c6dc8f78700314355ac81cc3
options    BOOT_IMAGE=/boot/vmlinuz-4.19.0-22-amd64 root=UUID=62f844ed-9ecd-490e-a206-4be11ba0e607 ro net.ifnames=0 net.ifnames=0 biosdevname=0 console=ttyS0
linux      /23000007c6dc8f78700314355ac81cc3/6.5.2/linux # вот тут они тоже
initrd     /23000007c6dc8f78700314355ac81cc3/6.5.2/initrd

Вот так можно убедиться что это просто перекладывание:

root@otus-kernel-upgrade:/boot# md5sum 23000007c6dc8f78700314355ac81cc3/6.5.2/linux
8e5d025fad72c6949eda58f45b7518cb  23000007c6dc8f78700314355ac81cc3/6.5.2/linux
root@otus-kernel-upgrade:/boot# md5sum vmlinuz-6.5.2
8e5d025fad72c6949eda58f45b7518cb  vmlinuz-6.5.2

Апдейтим grub:

root@otus-kernel-upgrade:~/linux-6.5.2# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.5.2
Found initrd image: /boot/initrd.img-6.5.2
Found linux image: /boot/vmlinuz-4.19.0-25-amd64
Found initrd image: /boot/initrd.img-4.19.0-25-amd64
Found linux image: /boot/vmlinuz-4.19.0-22-amd64
Found initrd image: /boot/initrd.img-4.19.0-22-amd64
Found linux image: /boot/vmlinuz-4.19.0-18-amd64
Found initrd image: /boot/initrd.img-4.19.0-18-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done

Проверяем:

root@otus-kernel-upgrade:~/linux-6.5.2# cat /boot/loader/entries/23000007c6dc8f78700314355ac81cc3-6.5.2.conf
title      Debian GNU/Linux 10 (buster)
version    6.5.2
machine-id 23000007c6dc8f78700314355ac81cc3
options    BOOT_IMAGE=/boot/vmlinuz-4.19.0-22-amd64 root=UUID=62f844ed-9ecd-490e-a206-4be11ba0e607 ro net.ifnames=0 net.ifnames=0 biosdevname=0 console=ttyS0
linux      /23000007c6dc8f78700314355ac81cc3/6.5.2/linux
initrd     /23000007c6dc8f78700314355ac81cc3/6.5.2/initrd

Далее ребут машины
И проверяем результат:

root@otus-kernel-upgrade:~# uname -a
Linux otus-kernel-upgrade 6.5.2 #1 SMP PREEMPT_DYNAMIC Thu Sep  7 16:35:36 UTC 2023 x86_64 GNU/Linux

Success!!!

2. Работа с mdadm

Собрать RAID0/5/10

Имеем машину с 4 доп дисками по 20Г

root@fhmoh45jgovcvvojfp9e:~# lshw -c disk -short
H/W path      Device     Class          Description
===================================================
/0/103/0/0    /dev/vda   disk           19GB Virtual I/O device
/0/104/0/0    /dev/vdb   disk           21GB Virtual I/O device
/0/105/0/0    /dev/vdc   disk           21GB Virtual I/O device
/0/106/0/0    /dev/vdd   disk           21GB Virtual I/O device
/0/107/0/0    /dev/vde   disk           21GB Virtual I/O device

Так как я с ними уже эксперементировал, то на них осталась инфа о предыдущих массивах (RAID_superblock_formats)
Поэтому надо ее стереть (можно и не стирать, она перезатрется при создании нового массива, но будут варнинги):

root@fhmoh45jgovcvvojfp9e:~# mdadm --zero-superblock /dev/vdb
root@fhmoh45jgovcvvojfp9e:~# mdadm --zero-superblock /dev/vdc
root@fhmoh45jgovcvvojfp9e:~# mdadm --zero-superblock /dev/vdd
root@fhmoh45jgovcvvojfp9e:~# mdadm --zero-superblock /dev/vde

RAID10

root@fhmoh45jgovcvvojfp9e:~# mdadm --create --verbose /dev/md10 -l 10 -n 4 /dev/vdb /dev/vdc /dev/vdd /dev/vde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.

Идет ресинк:

root@fhmoh45jgovcvvojfp9e:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md10 : active raid10 vde[3] vdd[2] vdc[1] vdb[0]
      41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [=>...................]  resync =  8.5% (3566720/41908224) finish=12.1min speed=52774K/sec

unused devices: <none>

Готово:

root@fhmoh45jgovcvvojfp9e:~# mdadm --detail /dev/md10
/dev/md10:
           Version : 1.2
     Creation Time : Thu Sep 21 10:19:40 2023
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu Sep 21 10:33:17 2023
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : fhmoh45jgovcvvojfp9e:10  (local to host fhmoh45jgovcvvojfp9e)
              UUID : 2f1d5512:cd3be380:0042535a:4bcddb96
            Events : 17

    Number   Major   Minor   RaidDevice State
       0     252       16        0      active sync set-A   /dev/vdb
       1     252       32        1      active sync set-B   /dev/vdc
       2     252       48        2      active sync set-A   /dev/vdd
       3     252       64        3      active sync set-B   /dev/vde

Дальше я рестартанул машину и обнаружил что массив собрался сам
Но непойми как
Например название у него '/dev/md127'

Чтобы mdadm при старте системы собирал обратно все как я задумал, опишу 'mdadm.conf':

root@fhmoh45jgovcvvojfp9e:/etc/mdadm# mdadm -D --scan
ARRAY /dev/md/fhmoh45jgovcvvojfp9e:10 metadata=1.2 name=fhmoh45jgovcvvojfp9e:10 UUID=2f1d5512:cd3be380:0042535a:4bcddb96

Результат команды выше положил в файл так что получилось так:

root@fhmoh45jgovcvvojfp9e:/etc/mdadm# cat mdadm.conf
DEVICE partitions containers
ARRAY /dev/md/raid10 metadata=1.2 name=fhmoh45jgovcvvojfp9e:10 UUID=2f1d5512:cd3be380:0042535a:4bcddb96