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