Linux
  • << DEBIAN >>
  •   < Debian 9 >
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   < Debian 11 >
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   < Debian 12 >
  •     Първоначални настройки
  •     DNS Сървър
  •     DNS Практика
  •     Инсталиране и настройка на Apache
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Първо надграждане на MAIL сървъра
  •     Инсталиране и настройка на пощенски сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •     WEB сървър с Nginx
  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Сървър за отдалечен достъп - RustDESK
  • < UBUNTU >
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  •   Ubuntu BUDGIE
  •     Инсталиране Ubuntu BUDGIE
  •     Първоначални настройки на Ubuntu BUDGIE
  •     Ubuntu BUDGIE като MAC OS
  •     Приложения за Ubuntu BUDGIE
  • GNOME работна среда
  •   Ubuntu GNOME
  •     Инсталиране на Ubuntu 21.04 GNOME
  •     Ubuntu 21.04 GNOME като MacOS
  • XFCE работна среда
  •   Debian - Install XFCE
  •     Debian XFCE - допълнение
  •     Debian XFCE като MacOS
  •   Ubuntu - Install XFCE
  •     Ubuntu XFCE - допълнение
  •     Ubuntu XFCE като MacOS
  • МАТЕ работна среда
  •   Debian - Install MATE
  •     Настройка на Debian MATE
  • PROGRAMS
  •   Conky
  •   Sublime Text
  • Инсталиране на Debian 11 с BIOS вариант 2

    Започваме от мястото където направихме втората снимка на виртуалната машина ПРАВИМ НОВА СНИМКА НА ВИРТУАЛНАТА МАШИНА - Installed ZFS

    Оразмеряване на първия диск за прехвъляне на Debian11 от втория

    Имаме поддръжка на файловата система ZFS. Не забравяйте, че това още не е работната система. Трябва да се прехвърли на първия диск. Да проверим какви дискове имаме:

    ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Jan 24 21:05 /dev/sda brw-rw---- 1 root disk 8, 16 Jan 24 21:05 /dev/sdb brw-rw---- 1 root disk 8, 17 Jan 24 21:05 /dev/sdb1

    Налични са два диска. Вторият е оразмерен, защото на него инсталирахме временно Debian. За да оразмерим първия диск ще трябва да инсталираме Parted.

    apt install parted -y


    После оразмеряваме първия диск.

    /usr/sbin/parted /dev/sda GNU Parted 3.4 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. # Мерната ни единица ще е мегабайт (parted) unit mib # Създаваме таблица за раздели. (parted) mklabel gpt # Да проверим: (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags # Всичко е праилно. Създаваме и първия раздел EFI (parted) mkpart Partition name? []? bios_grub File system type? [ext2]? Натискаме Enter Start? 1 End? 2 # Раздела ще се казва bios_grub, ще започва от 1MB и ще завършва на 2MB, на практика ще е 1MB голям. Проверяваме: (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub # Всичко е праилно. Да вдигнем и флага на раздела. (parted) set 1 bios_grub on (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub # Всичко е правилно. Създаваме втория раздел. Той трябва да за /boot (parted) mkpart Partition name? []? zpb File system type? [ext2]? Натискаме просто Enter Start? 2 End? 2050 (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub 2 2.00MiB 2050MiB 2048MiB ext2 zpb # Големината на дяла е 2GB. Да създадем и трети дял. Той ще е за файловата система ZFS. (parted) mkpart Partition name? []? zp0 File system type? [ext2]? Просто натискаме Enter Start? 2050 End? -1 (-1 означава до края на диска) (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sda: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub 2 2.00MiB 2050MiB 2048MiB ext2 zpb 3 2050MiB 33791MiB 31741MiB ext2 zp0 # Всичко е праилно. Излизаме (parted) q Information: You may need to update /etc/fstab.

    Напомня ни да оправим файла с таблиците /etc/fstab. За сега това не е нужно, обаче ще поясня какво направихме и защо. Първо създадохме дял bios_grub с размер 1МВ за да може да инсталираме GRUB. Създадохме втори раздел boot. Той ще отговаря за зареждането, там ще бъде всичко което е в /boot (ядро, initramfs и целия grub) Създадохме раздел zp0. Тук ще създадем z пула zp0. Преди да започнем създаването на пуловете трябва да определим ID-тата на /dev/sda2, /dev/sda3

    ls -l /dev/disk/by-id/ | grep sda2 lrwxrwxrwx 1 root root 10 Jan 27 16:36 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Jan 27 16:36 wwn-0x5000c29cd0c51229-part2 -> ../../sda2 ls -l /dev/disk/by-id/ | grep sda3 lrwxrwxrwx 1 root root 10 Jan 27 16:36 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 Jan 27 16:36 wwn-0x5000c29cd0c51229-part3 -> ../../sda3

    Това го направихме защото когато изграждаме пуловете ще трябва да укажем къде да се изградят. Примерно zpb на /dev/sda2. Това ще работи но примерно правим ремонт и включваме хардуерно първия диск не на SATA1, а примерно на SATA4. Тогава в системата този диск ще бъде sdd. Затова указваме диска не с /dev/sda2, а чрез /dev/disk/by-id/c3d557d4-dea6-414e-a9e6-1ef240a8939e. С първата част на задачата сме готови. Сега трябва да създадем папка където пула да го монтираме. За пояснение: Пула има болокова структура както твърдите дискове, или дяловете на твърдите дискове. Ние не боравим примерно с /dev/sda2, а монтираме /dev/sda2 в /boot и работим с папката /boot. С пуловете логиката е същата. Затова създаваме папка където да монтираме първия пул. Ако трябва да съм точен при създаването на пул той автоматично си създава и място където да се монтира. В случая обаче ние ще кажем къде точно да се монтира, а не той да определя.

    mkdir /mnt/zpool


    Готови сме да създаваме Z пулове. Ще започнем с zp0

    zpool create -o ashift=9 -o altroot=/mnt/zpool -O relatime=off -O atime=off -O canmount=off -O compression=lz4 -O xattr=sa -O normalization=formD -O acltype=posixacl -m none -f zp0 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3

    Тук ще се наложи да обясня какво направих: zpool create - начало на създаване на пул -o ashift=9 - отговаря за фическите сектори на диска. С parted когато разделяхме диска получихме Sector size (logical/physical): 512B/512B. 2 на степен 9 e 512. Ако обаче физическия сектор беше 4096 (4КВ) то тогава вместо 9 ще сложим 12. Ако пък не знаете колко Ви е физическия сектор, слагайте 12. -o altroot=/mnt/zpool - указва относително изместване на корена на файловата система (/). Така това което изместим вече ще е корен на файловата система. -O relatime=off, -O atime=off - намалят времето за запис върху твърдия диск -O canmount=off - указва, че коренения датасет не ни трябва да се монтира засега -O compression=lz4 - указваме метод на компресия на данните, в случая е lz4, много добър и бърз -O normalization=formD - указваме поддръжката на UTF-8 файловия формат да е в formD стандарт. -m none - указва, че не е необходимо да се монтира коренния датасет, защото указахме canmount=off zp0 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 - даваме име на пула (zp0) и указваме къде ще се намира. Една забележка: вместо /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 можеше просто да кажем /dev/sda3 но това е лоша практика. И да проверим какво създадохме:

    zpool list NAME SIZE ALLOC FREЕ CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zp0 30.5G 133K 30.5G - - 0% 0% 1.00x ONLINE /mnt/zpool

    Забележете точката на монтиране на пула. Много важен момент за напред. Казахме преди, че със създаване на пула автоматично се създава и датасет. Да проверим.

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 158K 29.5G 24K none

    Правилно със създаването на пула zp0 се създаде и датасет zp0. Забележете датасета не е монтиран, защото при създаване на пула използвахме ключ -m none. Това добре, но все пак трябва да създадем пул за корена на файловата система.

    /usr/sbin/zfs create -o mountpoint=/ zp0/debian

    Създадохме дата сет с точка на монтиране / (корена) и намиращ се в zp0/debian Да видим какво сме направили:

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 178K 29.5G 24K none zp0/debian 24K 29.5G 24K /mnt/zpool

    Имаме коренен датасет zp0/debian с точка на монтиране /mnt/zpool. Ще поясня. Когато решим да прехвърляме инсталирания Debian от втория диск на ZFS датасета, то физически ще прехвърлим всички папки (целия каталог) в /mnt/zpool. Малко е объркващо. Ще се постарая да го обясня все едно е стандартна инсталация. Когато инсталираме Debian създаваме отделни дялове на диска и в тези дялове монтираме дадени каталози (папки). Пример: Съдаваме дял от диска примерно /dev/sda3 и казваме, че там ще се монтира корена на каталога / (root). Създаваме дял boot на /dev/sda2 и го монтираме в каталога /boot Създаваме дял home на /dev/sda4 и него монтираме в каталога /home По тази логика на нас коренния дял ни е /dev/sda3, a /dev/sda2 и /dev/sda4 са потдялове, защото основния каталог е /, а каталозите /boot, /home са подкаталози на коренния каталог /. Така е и при ZFS. Имаме коренен датасет zp0/debian. Ще има и други датасетове примерно за home които ще ползват коренния датасет, а физически за корен на новата операзионна система която ще прехвърляме ще е /mnt/zpool. До тук имаме датасет zp0 който се появи при създаването на zpool zp0. Но той няма точка на монтиране, защото така създадохме пула. Този датасет няма да го използваме. Имаме втори датасет zp0/debian. Това ще е корена на системата и точката на монтиране му е /mnt/zpool. Изместваме точката на монтиране за да може след като направим снапшота там да прехвърлим системата. Ако се пробвахме да я прехвърлим направо в zp0/debian нямаше да се получи. Първия пул го създадохме и към него и първия датасет. От тук започва разликата с предния случай. Преди създавахме втори zpool за boot, тук няма да е така. Създадохме втори дял на първия диск в който ще се разположи /boot. Единственото нещо което ще направим с втория дял е да го форматираме в Ext4, но на по-късен етап. Продължаваме с zpool zp0. Да проверим какво имаме до тук:

    df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 394M 604K 393M 1% /run /dev/mapper/vg0-root 32G 1.9G 29G 7% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 394M 0 394M 0% /run/user/1000 zp0/debian 30G 128K 30G 1% /mnt/zpool

    Създадохме място където ще бъде монтиран корена на новата операционна система. Не знам дали се сещате, но създавахме таблица където да прехвърлим новата операционна система. Текущото състояние е: / - корен на ОС /home - домашен каталог /boot - каталог за GRUB и ядро в същата логика трябва да създадем за прехвърляне на системата в /mnt /mnt/zpool - корен на новата ОС /mnt/zpool/home - домашен каталог на новата ОС /mnt/zpool/boot - каталог за GRUB и ядро на новата ОС Важното тук е в тези папки какво ще монтираме. За сега сме определили корена zp0/debian. Да създадем датасет за home.

    /usr/sbin/zfs create -o setuid=off -o mountpoint=/home zp0/debian/home

    Оново няколко пояснения. Точката на монтиране на датасета zp0/debian/home ще е /home o setuid=off - повишава безопасността. На тази директория флага set uid не може да се вдига. По този начин под чуждо име в директорията не може да се изпълняват програми, без да се негова собственост. Още една забележка, не създадохме папка home в /mnt/zpool. Това е така защото когато създадохме датасета за home, казахме, че ще е в корена zp0/debian, а на zp0/debian точката на монтиране е /mnt/zpool. Така на практика създадохме датасет zp0/debian/home и точката му на монтиране стана /mnt/zpool/home и тази папка автоматично се създаде със създаването на датасета. Може да проверим

    ls -l /mnt/zpool/ total 1 drwxr-xr-x 2 root root 2 Jan 27 20:18 home

    Както обясних горе. Да проверим и датасетовете.

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 272K 29.5G 24K none zp0/debian 49K 29.5G 25K /mnt/zpool zp0/debian/home 24K 29.5G 24K /mnt/zpool/home

    Всичко е точно както го говорехме по-нагоре. По същата логика да създадем дата сет за var

    /usr/sbin/zfs create -o setuid=off -o exec=off -o mountpoint=/var zp0/debian/var

    Тук разликата спрямо home e exec=off - ако създадем файл с права x, могат да се стартират, то той няма да може да се изпълни, защото с фючера exec=off забраняваме изпълнението на файла. По същата логика може да изнесем на отделен датасет /var/log. Можете примерно на този датасет да кажете да не може да препълва датасета и т.н. в зависимост какви неща искате да направите. Имате пълното право и свобода на действие в зависимост от ситуацията. Да видим какво до тук се получи.

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 322K 29.5G 24K none zp0/debian 73K 29.5G 25K /mnt/zpool zp0/debian/home 24K 29.5G 24K /mnt/zpool/home zp0/debian/var 24K 29.5G 24K /mnt/zpool/var ls -l /mnt/zpool/ total 1 drwxr-xr-x 2 root root 2 Jan 27 20:18 home drwxr-xr-x 2 root root 2 Jan 27 20:38 var


    И отново обяснявам на разбираем език. Имаме създадена структура на каталозите за новата операционна система. Имаме за /home за /var за /, но нямаме за /boot. Тук е тънкия момент. Ще монтираме /boot след като направим снапшота и след като влезем с chroot. Продължаваме. Казахме, че имаме изградена структура на новия каталог в /mnt/zpool, но в папките няма нищо. Там трябва да прехвърлим текущото състояние на ОС. Помним, че първоначално инсталирахме Debian на LVM. Това ни позволява да направим snapshot на текущото състояния чрез LVM. След това от snapshot-a ще прехвърлим данните в /mnt/zpool. Правим snapshoot на текущото състояние на ОС и прехвърляме системата.

    Прехвърляне на системата от втория диск на първия

    Като цяло сме готови да прехвърлим текущата операционна система от втория диск на първия с ZFS.Ако тръгнем с копиране на папки и файлове от оригинала към новата система, няма да стане. Защото голяма част от файловете и папките са заети и не могат да се достъпят. Решението е да направим снапшот (временна снимка) на текущата система в някаква папка. Така всички файлове и папки от снапшота ще бъдат досъпни и ще може да ги прехвърлим в новата система. За начало да направим папка където да се създадат файловете от снапшота.

    mkdir /mnt/root

    Примерно пак в /mnt създадохме папка за поместването на снапшота. Леко ще се върна назад. Ако се сещате когато създавахме LVM отделихме едно място от порядъка на 500МВ. Казахме, че това място ще го ползваме за снапшот. Да проверим колко е това свободно място:

    vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <33.00 GiB PE Size 4.00 MiB Total PE 8447 Alloc PE / Size 7867 / 30.73 GiB Free PE / Size 580 / <2.27 GiB VG UUID XXIpEB-jDmJ-ZAwb-DOae-nfwA-Tvaz-CRKQOt

    Имаме заето място за VG 30.73GB и свободно място <2.27GB. За да направим снапшот на цялата система достатъчни са 256МВ. Може да се презастраховаме и да ползваме цялото свободно място от 412МВ, но на практика не е нужно. Да се заемем със спаншота, използвайки прелестите на LVM.

    /usr/sbin/lvcreate -s -n root_snap -L512M /dev/vg0/root Logical volume "root_snap" created.

    Снапшота е направен. Създаваме снапшот (-s), с име (-n) root_snap, с големина на блока -L400M байта на тома /dev/vg0/root. Големина на блока от 256MB също е достатъчно да прехвърлим цялата ОС. Създадохме вече блоково устройство и то може да се монтира за прехвърляне. Ако се сещате по-горе създадохме точка за монтиране на снапшота /mnt/root. Да монтираме снапшота.

    mount /dev/vg0/root_snap /mnt/root/


    И да проверим какво може вече да прехвърляме към новата система:

    ls -l /mnt/root total 76 lrwxrwxrwx 1 root root 7 Jan 24 18:20 bin -> usr/bin drwxr-xr-x 3 root root 4096 Jan 24 21:35 boot drwxr-xr-x 4 root root 4096 Jan 24 18:21 dev drwxr-xr-x 73 root root 4096 Jan 24 23:56 etc drwxr-xr-x 3 root root 4096 Jan 24 18:27 home lrwxrwxrwx 1 root root 31 Jan 24 18:23 initrd.img -> boot/initrd.img-5.10.0-21-amd64 lrwxrwxrwx 1 root root 31 Jan 24 18:21 initrd.img.old -> boot/initrd.img-5.10.0-20-amd64 lrwxrwxrwx 1 root root 7 Jan 24 18:20 lib -> usr/lib lrwxrwxrwx 1 root root 9 Jan 24 18:20 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 Jan 24 18:20 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 Jan 24 18:20 libx32 -> usr/libx32 drwx------ 2 root root 16384 Jan 24 18:20 lost+found drwxr-xr-x 3 root root 4096 Jan 24 18:20 media drwxr-xr-x 4 root root 4096 Jan 24 23:44 mnt drwxr-xr-x 2 root root 4096 Jan 24 18:21 opt drwxr-xr-x 2 root root 4096 Dec 9 21:15 proc drwx------ 3 root root 4096 Jan 24 21:20 root drwxr-xr-x 2 root root 4096 Jan 24 18:28 run lrwxrwxrwx 1 root root 8 Jan 24 18:20 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Jan 24 18:21 srv drwxr-xr-x 2 root root 4096 Dec 9 21:15 sys drwxrwxrwt 10 root root 4096 Jan 25 00:00 tmp drwxr-xr-x 14 root root 4096 Jan 24 18:21 usr drwxr-xr-x 11 root root 4096 Jan 24 18:21 var lrwxrwxrwx 1 root root 28 Jan 24 18:23 vmlinuz -> boot/vmlinuz-5.10.0-21-amd64 lrwxrwxrwx 1 root root 28 Jan 24 18:21 vmlinuz.old -> boot/vmlinuz-5.10.0-20-amd64

    Цялата операционна система с дървовидната и структура. Да проверим обаче състоянието на каталога (папката) /mnt/zpool

    ls -l /mnt/zpool/ total 1 drwxr-xr-x 2 root root 2 Feb 4 00:08 home drwxr-xr-x 2 root root 2 Feb 4 00:08 var

    Липсва в структурата boot. За целта бяхме заделили дял от първия диск. Да го монтираме тук:

    mount /dev/sda2 /mnt/zpool/boot/ mount: /mnt/zpool/boot: wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error.

    Това е така защото когато създадохме дяла го дефинирахме като ext2 а трябва да е във формат ext4. Да го форматираме:

    mkfs.ext4 /dev/sda2 mke2fs 1.46.2 (28-Feb-2021) Creating filesystem with 524288 4k blocks and 131072 inodes Filesystem UUID: e848f373-5dd3-4800-8ff6-2eb6a59221f1 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done


    Да пробваме наново да го монтираме:

    mount /dev/sda2 /mnt/zpool/boot mount: /mnt/zpool/boot: mount point does not exist.

    Отново не може, защото няма папка /mnt/zpool/boot. Да я създадем и да пробваме наново да монтираме дяла.

    mkdir /mnt/zpool/boot mount /dev/sda2 /mnt/zpool/boot

    Монтирахме дяла. Да проверим дали сме готови за прехвърляне:

    df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 394M 640K 393M 1% /run /dev/mapper/vg0-root 32G 1.9G 29G 7% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 394M 0 394M 0% /run/user/0 tmpfs 394M 0 394M 0% /run/user/1000 zp0/debian 30G 128K 30G 1% /mnt/zpool zp0/debian/home 30G 128K 30G 1% /mnt/zpool/home zp0/debian/var 30G 128K 30G 1% /mnt/zpool/var /dev/mapper/vg0-root_snap 32G 1.9G 29G 7% /mnt/root /dev/sda2 2.0G 24K 1.8G 1% /mnt/zpool/boot

    Готови сме. Имаме снимка, имаме и папки където да се прехвърли системата. Да я прехвърлим на новия диск. За целта ще ползваме програмата rsync

    /usr/bin/rsync -avPX /mnt/root/* /mnt/zpool/ sent 1,832,293,977 bytes received 1,040,264 bytes 24,943,323.01 bytes/sec total size is 1,828,220,246 speedup is 1.00

    Ще вземе известно време за да се прехвърли цялата операционна система. И да видим какво се е прехвърлило.

    zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zp0 30.5G 806M 29.7G - - 0% 2% 1.00x ONLINE /mnt/zpool

    Прехвърлили са се 806MB и са останали свободни 29.7GB. Сега да проверим кои папки файлове са се прехвърлили:

    ls -l /mnt/zpool/ total 36 lrwxrwxrwx 1 root root 7 Jan 24 18:20 bin -> usr/bin drwxr-xr-x 3 root root 4096 Jan 24 21:35 boot drwxr-xr-x 4 root root 16 Jan 24 18:21 dev drwxr-xr-x 73 root root 156 Jan 24 23:56 etc drwxr-xr-x 3 root root 3 Jan 24 18:27 home lrwxrwxrwx 1 root root 31 Jan 24 18:23 initrd.img -> boot/initrd.img-5.10.0-21-amd64 lrwxrwxrwx 1 root root 31 Jan 24 18:21 initrd.img.old -> boot/initrd.img-5.10.0-20-amd64 lrwxrwxrwx 1 root root 7 Jan 24 18:20 lib -> usr/lib lrwxrwxrwx 1 root root 9 Jan 24 18:20 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 Jan 24 18:20 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 Jan 24 18:20 libx32 -> usr/libx32 drwx------ 2 root root 2 Jan 24 18:20 lost+found drwxr-xr-x 3 root root 4 Jan 24 18:20 media drwxr-xr-x 4 root root 4 Jan 24 23:44 mnt drwxr-xr-x 2 root root 2 Jan 24 18:21 opt drwxr-xr-x 2 root root 2 Dec 9 21:15 proc drwx------ 3 root root 6 Jan 24 21:20 root drwxr-xr-x 2 root root 2 Jan 24 18:28 run lrwxrwxrwx 1 root root 8 Jan 24 18:20 sbin -> usr/sbin drwxr-xr-x 2 root root 2 Jan 24 18:21 srv drwxr-xr-x 2 root root 2 Dec 9 21:15 sys drwxrwxrwt 10 root root 10 Jan 25 00:00 tmp drwxr-xr-x 14 root root 14 Jan 24 18:21 usr drwxr-xr-x 11 root root 13 Jan 24 18:21 var lrwxrwxrwx 1 root root 28 Jan 24 18:23 vmlinuz -> boot/vmlinuz-5.10.0-21-amd64 lrwxrwxrwx 1 root root 28 Jan 24 18:21 vmlinuz.old -> boot/vmlinuz-5.10.0-20-amd64

    Всички файлове и папки с дървовидната си структура са прехвърлени. Да проверим и boot:

    ls -l /mnt/zpool/boot/ total 86548 -rw-r--r-- 1 root root 236452 Dec 13 22:46 config-5.10.0-20-amd64 -rw-r--r-- 1 root root 236452 Jan 21 16:35 config-5.10.0-21-amd64 drwxr-xr-x 5 root root 4096 Jan 27 21:29 grub -rw-r--r-- 1 root root 31954543 Jan 27 21:23 initrd.img-5.10.0-20-amd64 -rw-r--r-- 1 root root 42129637 Jan 27 22:40 initrd.img-5.10.0-21-amd64 drwx------ 2 root root 16384 Feb 4 00:15 lost+found -rw-r--r-- 1 root root 83 Dec 13 22:46 System.map-5.10.0-20-amd64 -rw-r--r-- 1 root root 83 Jan 21 16:35 System.map-5.10.0-21-amd64 -rw-r--r-- 1 root root 7008928 Dec 13 22:46 vmlinuz-5.10.0-20-amd64 -rw-r--r-- 1 root root 7019136 Jan 21 16:35 vmlinuz-5.10.0-21-amd64

    Ядрото и GRUB също са прехвърлени на /dev/sda2. ПРАВИМ НОВА СНИМКА - RSync Снапшота вече не ни е нужен. За да го изтрием трябва първо да размонтираме самия снапшот.

    umount /mnt/root/


    И да го изтрием:

    lvremove /dev/vg0/root_snap Do you really want to remove active origin logical volume vg0/root with 1 snapshot(s)? [y/n]: y Logical volume "root_snap" successfully removed

    Изтрихме снапшота. Сега трябва да настроим новата операционна система която пренесохме. При преноса създадохме папка /mnt/zpool/run/. Там трябва да се отразяват процесите които са активни. За целта текущите ще ги монтираме там. Първо създаваме папка монтиране на udev.

    mkdir /mnt/zpool/run/udev


    Монтираме и процесите:

    mount -t proc none /mnt/zpool/proc mount --rbind /sys /mnt/zpool/sys mount --rbind /dev /mnt/zpool/dev mount --rbind /run/udev /mnt/zpool/run/udev


    Време е да се прехвърлим на новата система.

    chroot /mnt/zpool/ /bin/bash


    Да проверим какво имаме в новата система

    df -h Filesystem Size Used Avail Use% Mounted on zp0/debian 30G 693M 29G 3% / zp0/debian/home 29G 128K 29G 1% /home zp0/debian/var 29G 114M 29G 1% /var /dev/sda2 2.0G 96M 1.7G 6% /boot udev 1.9G 0 1.9G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 394M 628K 393M 1% /run/udev

    Имаме корен, имаме /home, /var, всичко което ни трябва. Да проверим и /boot:

    ls -l /boot total 86548 -rw-r--r-- 1 root root 236452 Dec 13 22:46 config-5.10.0-20-amd64 -rw-r--r-- 1 root root 236452 Jan 21 16:35 config-5.10.0-21-amd64 drwxr-xr-x 5 root root 4096 Jan 27 21:29 grub -rw-r--r-- 1 root root 31954543 Jan 27 21:23 initrd.img-5.10.0-20-amd64 -rw-r--r-- 1 root root 42129637 Jan 27 22:40 initrd.img-5.10.0-21-amd64 drwx------ 2 root root 16384 Feb 4 00:15 lost+found -rw-r--r-- 1 root root 83 Dec 13 22:46 System.map-5.10.0-20-amd64 -rw-r--r-- 1 root root 83 Jan 21 16:35 System.map-5.10.0-21-amd64 -rw-r--r-- 1 root root 7008928 Dec 13 22:46 vmlinuz-5.10.0-20-amd64 -rw-r--r-- 1 root root 7019136 Jan 21 16:35 vmlinuz-5.10.0-21-amd64

    Ядро GRUB, всичко е тук. Разбира се GRUB не е точен. Няма го в MBR. Да проверим все пак:

    cat /boot/grub/grub.cfg | grep root= set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' linux /boot/vmlinuz-5.10.0-21-amd64 root=/dev/mapper/vg0-root ro quiet set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' linux /boot/vmlinuz-5.10.0-21-amd64 root=/dev/mapper/vg0-root ro quiet set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' linux /boot/vmlinuz-5.10.0-21-amd64 root=/dev/mapper/vg0-root ro single set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' linux /boot/vmlinuz-5.10.0-20-amd64 root=/dev/mapper/vg0-root ro quiet set root='lvmid/9JJWyX-8ttM-y8LP-zVJ1-ewNT-5Sjl-YP4ZMV/fSLdVY-3eFk-u2Sv-39Xf-yMYn-cjKx-74hFTL' linux /boot/vmlinuz-5.10.0-20-amd64 root=/dev/mapper/vg0-root ro single

    Вижда се че пътя за зареждане е още стария път. Няколко неща обаче трябва да се оправят преди това. Първото нещо е да укажем в /etc/fstab, /dev/sda2. И пак ще ползваме ID на дяла. Да го определим:

    /usr/sbin/blkid /dev/sda2 /dev/sda2: UUID="d74a82b6-120c-4cad-9d5c-dce55217f280" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="zpb" PARTUUID="e06cceb2-176a-4cdf-a279-85306e1b7906"


    На нас ни трябва обаче само частта с UUID. Да я отделим

    /usr/sbin/blkid /dev/sda2 | cut -d ' ' -f 2 UUID="d74a82b6-120c-4cad-9d5c-dce55217f280"


    И сега тази част да я запишем в /etc/fstab.

    /usr/sbin/blkid /dev/sda2 | cut -d ' ' -f 2 >> /etc/fstab nano /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # systemd generates mount units based on this file, see systemd.mount(5). # Please run 'systemctl daemon-reload' after making changes here. # #/dev/mapper/vg0-root / ext4 errors=remount-ro 0 1 #/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 UUID=d74a82b6-120c-4cad-9d5c-dce55217f280 /boot ext4 defaults 0 1

    Казахме на системата след рестарт, че /boot ще се намира в /dev/disk/by-uuid/UUID=d74a82b6-120c-4cad-9d5c-dce55217f280 което е равносилно на /dev/sda2 Следва да инсталираме GRUB в първия диск.

    grub-install /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001 Installing for i386-pc platform. Installation finished. No error reported.

    До тук с тази команда инсталирахме GRUB в /dev/sda2. Забележете, че използвах за /dev/sda2 ID на диска. Това се прави с цел когато разменяте местата на дисковете (примерно от SATA_0 на SATA_1) да не разменяте /dev/sda на /dev/sdb а един път записано като ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001 на което и SATA да се сложи винаги ще е ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001. На практика в /boot (dev/sda2) се създаде папка /boot/grub и в нея се преконфигурира файла grub.cfg Но това не е края. Трябва да се обнови INITFSRAM и GRUB.

    update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-5.10.0-21-amd64 update-initramfs: Generating /boot/initrd.img-5.10.0-20-amd64 update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.10.0-21-amd64 Found initrd image: /boot/initrd.img-5.10.0-21-amd64 Found linux image: /boot/vmlinuz-5.10.0-20-amd64 Found initrd image: /boot/initrd.img-5.10.0-20-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. Found Debian GNU/Linux 11 (bullseye) on /dev/mapper/vg0-root

    Готови сме с прехвърлянето на системата. Излизаме от временната ОС и се рестартираме.

    exit reboot


    Всичко зареди Не забравяйте след рестарта да заредите от ПЪРВИЯ ДИСК Да проверим какво се получи

    df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 394M 600K 393M 1% /run zp0/debian 30G 693M 29G 3% / zp0/debian/home 29G 128K 29G 1% /home zp0/debian/var 29G 114M 29G 1% /var tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 103M 1.7G 6% /boot tmpfs 394M 0 394M 0% /run/user/1000

    Системата почти няма забележки. Проблема е, че нямаме swap Ако се сещате, когато инсталирахме Debian на втория диск не създадохме swap. Сега ще го направим с една особенност. Това няма да бъде датасет (блокова структура като на дисковете), а ще бъде със структура на Volum (файл).

    zfs create -V 4G -b 8192 -o logbias=throughput -o sync=always -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false -o compression=zle zp0/debian/swap0

    Отново пояснения: -V 4G - ще бъде volum и с размер 4GB, изчислете си колко ви трябва и толкова слагайте. Като правило вземете минимум да е 2GB. -b 8192 - размер на блока -o logbias=throughput, -o sync=always, -o primarycache=metadata, -o secondarycache=none -o com.sun:auto-snapshot=false - отговарят за кеширане на данните -o compression=zle - компресираме датасета с бърз компресиращ алгоритъм zp0/debian/swap0 - даваме име на ZFS волюма. Ако по някаква причина не Ви стига Swap-a, то правите нов (втори) и също го описвате в /etc/fstab. Отново проверяваме какво постигнахме до тук.

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 4.91G 24.6G 24K none zp0/debian 4.91G 24.6G 693M / zp0/debian/home 32K 24.6G 32K /home zp0/debian/swap0 4.13G 28.8G 12K - zp0/debian/var 114M 24.6G 114M /var

    Датасета swap няма точка на монтиране. Тка трябва и да бъде. Да проверим дали имаме активен swap.

    swapon -s

    Нищо няма активно. Да го създадем и укажем къде да се намира.

    /usr/sbin/mkswap /dev/zvol/zp0/debian/swap0 Setting up swapspace version 1, size = 4 GiB (4294963200 bytes) no label, UUID=10bdeb89-a263-4eba-9e4e-380607aeaebd

    Имаме създаден swap но след рестарта за да съществува трябва да се опише в /etc/fstab Да го опишем.

    nano /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # systemd generates mount units based on this file, see systemd.mount(5). # Please run 'systemctl daemon-reload' after making changes here. # #/dev/mapper/vg0-root / ext4 errors=remount-ro 0 1 #/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 UUID=d74a82b6-120c-4cad-9d5c-dce55217f280 /boot ext4 defaults 0 1 /dev/zvol/zp0/debian/swap0 none swap sw 0 0

    Но swap-a ще се зареди след рестарта. За да се зареди сега:

    swapon -a

    На практика тази команда зареди от /etc/fstab указанията за swap дяла. Да проверим:

    swapon -s Filename Type Size Used Priority /dev/zd0 partition 4194300 0 -2

    Вече всичко е точно. swap-a е активен. По този начин може да се добавя още място за swap със създаването на нови zfs dataset за swap. Примерно swap1 и т.н. СНИМКА - Debian ZFS BIOS

    Изграждане на ZBOOT MIRROR

    И след като се справихме с този проблем да се върнем на втория диск с инсталирания Debian на LVM върху него. Идеята е този диск да се ползва за втори диск на ZFS и да бъде в RAID1 с първия диск. Хубавото на цялата ситуация, че в RAID1 ще бъдат само zpool zp0. /boot дяла ще си е отделен, и ще покажа на по-късен етап как да го настроим и него. За начало да разрушим LVM на втория диск за да може да го подготвим за ZFS RAID1. Тръгваме отзад напред. Разрушаваме логическия дял.

    lvremove /dev/vg0/root Do you really want to remove active origin logical volume vg0/root with 1 snapshot(s)? [y/n]: y Logical volume "root_snap" successfully removed Logical volume "root" successfully removed


    Трием логическата група:

    vgremove vg0 Volume group "vg0" successfully removed


    Накрая трием логическото устройство:

    pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped.

    Готово имаме чист втори диск. Сега трябва да разделим втория диск точно както първия:

    /usr/sbin/parted /dev/sdb GNU Parted 3.4 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. # Мерната ни единица ще е мегабайт (parted) unit mib # Създаваме таблица за раздели. (parted) mklabel gpt # Да проверим: (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sdb: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags # Всичко е праилно. Създаваме и първия раздел EFI (parted) mkpart Partition name? []? bios_grub File system type? [ext2]? Натискаме Enter Start? 1 End? 2 # Раздела ще се казва bios_grub, ще започва от 1MB и ще завършва на 2MB, на практика ще е 1MB голям. Проверяваме: (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sdb: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub # Всичко е праилно. Да вдигнем и флага на раздела. (parted) set 1 bios_grub on (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sdb: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub # Всичко е правилно. Създаваме втория раздел. Той трябва да за /boot (parted) mkpart Partition name? []? zpb File system type? [ext2]? Натискаме просто Enter Start? 2 End? 2050 (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sdb: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub 2 2.00MiB 2050MiB 2048MiB ext2 zpb # Големината на дяла е 2GB. Да създадем и трети дял. Той ще е за файловата система ZFS. (parted) mkpart Partition name? []? zp0 File system type? [ext2]? Просто натискаме Enter Start? 2050 End? -1 (-1 означава до края на диска) (parted) p Model: ATA VMware Virtual S (scsi) Disk /dev/sdb: 33792MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1.00MiB 2.00MiB 1.00MiB ext2 bios_grub bios_grub 2 2.00MiB 2050MiB 2048MiB ext2 zpb 3 2050MiB 33791MiB 31741MiB ext2 zp0 # Всичко е праилно. Излизаме (parted) q Information: You may need to update /etc/fstab.

    Готово, диска е разделен както първия. Да започнем изграждането на zpool mirror аналог на RAID1. За начало да видим статуса на текущия zpool.

    zpool status pool: zp0 state: ONLINE config: NAME STATE READ WRITE CKSUM zp0 ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 ONLINE 0 0 0 errors: No known data errors

    Имаме два zpool zp0. Zpool-a има един физически дял. За изграждането на z-mirror (RAID1) е необходимо в пуловете да има още по един физически дял. Да създадем miroor (RAID1) за текущия пул:

    zpool attach zp0 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part3

    Mirror-a е изграден. Да го проверим:

    zpool status pool: zp0 state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sun Jan 29 16:28:55 2023 826M scanned at 413M/s, 197M issued at 98.3M/s, 826M total 200M resilvered, 23.81% done, 00:00:06 to go config: NAME STATE READ WRITE CKSUM zp0 ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part3 ONLINE 0 0 0 (resilvering) errors: No known data errors

    Готово. Пула е създаден тип mirror и двата диска се синхронизират. Да проверим какво е състоянието на останалите два дяла от втория диск:

    lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT NAME FSTYPE SIZE MOUNTPOINT sda 33G ├─sda1 1M ├─sda2 ext4 2G /boot └─sda3 zfs_member 31G sdb 33G ├─sdb1 1M ├─sdb2 ext4 2G └─sdb3 31G sr0 1024M zd0 swap 4G [SWAP]

    На първия диск втория дял е създаден за /boot. Файловата му система е Ext4. На втория диск втория дял също е форматиран в Ext4, но нямаме точка на монтиране. Забележете обаче третия дял на втория диск. Няма дефинирана файлова система а както видяхме по-горе участва в miroor с третия дял на първия диск. Заемаме се с втория дял на втория диск. Използвайки технологията на rsync ще уеднаквим двата дяла. За целта да монтираме втория дял на втория диск.

    mount /dev/sdb2 /mnt/root/ mount: /mnt/root: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error.

    Грешен формат на файловата система на /dev/sdb2. Независимо, че ги показа като еднакво форматирани явно нещо не е наред. Да форматираме наново /dev/sdb2 във формат ext4.

    mkfs.ext4 /dev/sdb2 mke2fs 1.46.2 (28-Feb-2021) /dev/sdb2 contains a ext4 file system last mounted on / on Fri Feb 3 20:25:58 2023 Proceed anyway? (y,N) y Creating filesystem with 524288 4k blocks and 131072 inodes Filesystem UUID: b4c08e3f-c389-4883-9552-5614dd43e64b Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done


    И наново да монтираме дяла:

    mount /dev/sdb2 /mnt/root/

    Вече всичко е точно. Монтира се дяла. Сега да направим дублиране на /des/sda2 върху /dev/sdb2 използвайки rsync.

    /usr/bin/rsync -avPX /boot/* /mnt/root/ ls -l /mnt/root/ total 93696 -rw-r--r-- 1 root root 236452 Dec 13 22:46 config-5.10.0-20-amd64 -rw-r--r-- 1 root root 236452 Jan 21 16:35 config-5.10.0-21-amd64 drwxr-xr-x 5 root root 4096 Feb 4 12:15 grub -rw-r--r-- 1 root root 39664983 Feb 4 12:15 initrd.img-5.10.0-20-amd64 -rw-r--r-- 1 root root 41738476 Feb 4 12:15 initrd.img-5.10.0-21-amd64 drwx------ 2 root root 16384 Feb 4 12:11 lost+found -rw-r--r-- 1 root root 83 Dec 13 22:46 System.map-5.10.0-20-amd64 -rw-r--r-- 1 root root 83 Jan 21 16:35 System.map-5.10.0-21-amd64 -rw-r--r-- 1 root root 7008928 Dec 13 22:46 vmlinuz-5.10.0-20-amd64 -rw-r--r-- 1 root root 7019136 Jan 21 16:35 vmlinuz-5.10.0-21-amd64

    Всичко е точно. Ядрата се копираха в /dev/sdb2. За да е заменяем втория диск на първия (примерно при изгаряне на първия) трябва диска да стане зареждащ се. Трябва да му се инсталира GRUB. Така ще бъде инсталиран в MBR и във втория дял в папка /boot/grub. За начало да изтрием на втория диск във втория дял в /mnt/root папката grub

    rm -r /mnt/root/grub/

    Така дефинирания GRUB от предния диск тук няма да го има. И да инсталираме GRUB на втория диск.

    grub-install --boot-directory=/mnt/root /dev/sdb Installing for i386-pc platform. Installation finished. No error reported.


    Да проверим какво се инсталира:

    ls -l /mnt/root/ total 93696 -rw-r--r-- 1 root root 236452 Dec 13 22:46 config-5.10.0-20-amd64 -rw-r--r-- 1 root root 236452 Jan 21 16:35 config-5.10.0-21-amd64 drwxr-xr-x 5 root root 4096 Feb 4 13:15 grub -rw-r--r-- 1 root root 39664983 Feb 4 12:15 initrd.img-5.10.0-20-amd64 -rw-r--r-- 1 root root 41738476 Feb 4 12:15 initrd.img-5.10.0-21-amd64 drwx------ 2 root root 16384 Feb 4 12:11 lost+found -rw-r--r-- 1 root root 83 Dec 13 22:46 System.map-5.10.0-20-amd64 -rw-r--r-- 1 root root 83 Jan 21 16:35 System.map-5.10.0-21-amd64 -rw-r--r-- 1 root root 7008928 Dec 13 22:46 vmlinuz-5.10.0-20-amd64 -rw-r--r-- 1 root root 7019136 Jan 21 16:35 vmlinuz-5.10.0-21-amd64

    Имаме наново създадена директория grub Да проверим нейното съдържание:

    ls -l /mnt/root/grub/ total 24 drwxr-xr-x 2 root root 4096 Feb 4 13:15 fonts -rw-r--r-- 1 root root 1024 Feb 4 13:15 grubenv drwxr-xr-x 2 root root 12288 Feb 4 13:15 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 13:15 locale

    Папката не е празна. Да продължим с GRUB.

    update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-5.10.0-21-amd64 update-initramfs: Generating /boot/initrd.img-5.10.0-20-amd64


    Остана да обновим GRUB.

    update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.10.0-21-amd64 Found initrd image: /boot/initrd.img-5.10.0-21-amd64 Found linux image: /boot/vmlinuz-5.10.0-20-amd64 Found initrd image: /boot/initrd.img-5.10.0-20-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

    Готово, имаме GRUB и на втория диск. Така ако изгори първия няма да се счупи системата, а ще зареди от втория. СНИМКА - Debian 11 ZFS BIOS Mirror Да се рестартираме първоначално да видим дали всичко работи правилно. След това наново се рестартираме и зареждаме от ВТОРИЯ ДИСК. Имаме проблем при зареждане на системата:

    grub> grub> ls (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) # указваме къде се намира /boot. На първия диск втория дял. set root=(hd0,gpt2) # Зареждаме ядрото, като указваме къде се намира корена на системата. (папки /etc, /dev и т.н.) grub> linux /vmlinuz-5.10.0-21-amd64 root=/dev/sda3 grub> initrd /initrd.img-5.10.0-21-amd64 # Стартираме зареждане на системата grub> boot mount: mounting /dev/sda3 on /root failed: No such device Failed to mount /dev/sda3 as root file system.

    Системата се рестартира но се появи следващата грешка (initramfs). Не е заредено ядрото защото не се разпозна дяла /dev/sda3. Това е така защото дяла е с файлова система ZFS. Да заредим дяла във файловата система ZFS.

    (initramfs) zpool import -N zp0 -f The ZFS modules are not loaded. Try running '/sbin/modprobe zfs' as root to load them. (initramfs) /sbin/modprobe zfs

    Модулите се заредиха. Да се пробваме наново да импортнем zpool

    (initramfs) zpool import -N zp0 -f

    Всичко премина упешно. Сега трябва да се пробваме да излезем от INITRAMFS, за да продължим със зареждането на системата.

    (initramfs) exit

    Отново проблем. Да постъпим както предлага:

    run-init -c /dev/sda3

    И отново проблем. Стига съм Ви мъчил. Нарочно показах всички стъпки за решаване на проблема, ако ОС беше инсталирана на стандартна файлова система примерно Ext4. Проблема е, че ползваме ZFS файлова система. И по-този начин има решение но е много сложен и трябва много добре да познавате материята. Показах само няколко стъпки и човек започва да губи конците за началото. Дори и аз много често се бъркам. Извода е: Ползвайте този начин на ремонт на GRUB при стандартни файлови системи.

    Правилен ремонт на GRUB

    За нестандартни като ZFS файлови системи, ползвайте следната технология: - Трябва да знаете как сте инсталирали сървъра си (версия на ядрото, версия на ZFS). - Вземате LiveCD с налично ядро ПО-ВИСОКО ОТ ВАШЕТО и версия на ZFS ПО-ВИСОКА ОТ ВАШАТА. - Зареждате системата от LiveCD (Примерно Ubuntu 22.04 идеално подхожда за ремонт на Debian 11). - Не инсталирате Ubuntu, a го стартирате за проба (Try Ubuntu). След като се стартира LiveCD в демо режим, отваряме терминален прозорец и правим следното:

    df -h Filesystem Size Used Avail Use% Mounted on tmpfs 393M 1.7M 391M 1% /run /dev/sr0 3.6G 3.6G 0 100% /cdrom /cow 2.0G 147M 1.8G 8% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /tmp tmpfs 393M 144K 393M 1% /run/user/999

    Показва текущата система от LiveCD. За да инсталираме GRUB на /dev/sdb ще се наложи този диск да го монтираме в /mnt. Проблема е, че /dev/sdb3 е с файлова система ZFS. Да проверим:

    zpool list no pools available zfs list no datasets available

    За изненада няма нищо, а уж създадохме и zpool (zp0) и dataset. Това е така, просто не са импортирани.

    sudo zpool import pool: zp0 id: 13080312810463377289 state: ONLINE status: The pool was last accessed by another system. action: The pool can be imported using its name or numeric identifier and the '-f' flag. see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY config: zp0 ONLINE mirror-0 ONLINE ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part3 ONLINE ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part3 ONLINE

    От горната команда разбираме, че имаме наличен zpool (zp0), съдържащ в себе си два физически дяла в mirror. Пула обаче принадлежи на друга ОС и за да се импортира трябва да се използва флага -f (force). С една дума насила го импортираме в LiveCD. Да го направим:

    sudo zpool import -R /mnt zp0 cannot import 'zp0': pool was previously in use from another system. Last accessed by (none) (hostid=2c06ea2d) at Sat Feb 4 12:51:56 2023 The pool can be imported, use 'zpool import -f' to import the pool.

    Както споменах горе трябва да се ползва ключа -f Да се поправим:

    sudo zpool import -R /mnt zp0 -f

    Сега всичко е правилно. Да проверим:

    df -h Filesystem Size Used Avail Use% Mounted on tmpfs 393M 1.7M 391M 1% /run /dev/sr0 3.6G 3.6G 0 100% /cdrom /cow 2.0G 147M 1.8G 8% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /tmp tmpfs 393M 144K 393M 1% /run/user/999 zp0/debian 26G 693M 25G 3% /mnt zp0/debian/home 25G 128K 25G 1% /mnt/home zp0/debian/var 25G 114M 25G 1% /mnt/var

    Корена на счупената система е монтиран в /mnt. Липсва само /boot. Да го монтираме и него:

    sudo mount /dev/sdb2 /mnt/boot/ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 393M 1.7M 391M 1% /run /dev/sr0 3.6G 3.6G 0 100% /cdrom /cow 2.0G 147M 1.8G 8% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /tmp tmpfs 393M 144K 393M 1% /run/user/999 zp0/debian 26G 693M 25G 3% /mnt zp0/debian/home 25G 128K 25G 1% /mnt/home zp0/debian/var 25G 114M 25G 1% /mnt/var /dev/sdb2 2.0G 101M 1.7G 6% /mnt/boot

    И /boot е монтиран. На практика може да се прехвърлим на старата система чрез chroot и да я поправим. За начало да монтираме няколко неща предварително.

    sudo mount -t proc none /mnt/proc sudo mount --rbind /sys /mnt/sys sudo mount --rbind /dev /mnt/dev sudo mount --rbind /run/udev /mnt/run/udev sudo chroot /mnt

    Прехвърлихме се от LiveCD в старата система. Да проверим:

    df -h Filesystem Size Used Avail Use% Mounted on zp0/debian 26G 693M 25G 3% / zp0/debian/home 25G 128K 25G 1% /home zp0/debian/var 25G 114M 25G 1% /var /dev/sdb2 2.0G 101M 1.7G 6% /boot udev 1.9G 0 1.9G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 393M 1.7M 391M 1% /run/udev

    Корена на файловата ни система / се намира в zp0/debian. /boot е монтиран на /dev/sdb2. Всичко е готово да ремонтираме GRUB. Да проверим първо какво имаме в /boot/grub.

    ls -l /boot/grub/ total 24 drwxr-xr-x 2 root root 4096 Feb 4 13:15 fonts -rw-r--r-- 1 root root 1024 Feb 4 13:15 grubenv drwxr-xr-x 2 root root 12288 Feb 4 13:15 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 13:15 locale

    Непълен GRUB, липсва примерно grub.cfg. Да инсталираме наново GRUB. Това наново ще запише първите 512 байта в MBR и ще създаде папката /boot/grub с необходимите файлове.

    grub-install /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001 Installing for i386-pc platform. Installation finished. No error reported.

    Забележете, инсталирахме GRUB на втория диск използвайки неговото ID. Да проверим папката /boot/grub

    ls -l /boot/grub/ total 32 drwxr-xr-x 2 root root 4096 Feb 4 13:15 fonts -rw-r--r-- 1 root root 1024 Feb 4 13:15 grubenv drwxr-xr-x 2 root root 20480 Feb 4 15:34 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 15:34 locale


    За да сме сигурни, че създадохме нова папка /boot/grub сегашната ще я изтрием и ще изпълним командата наново.

    rm -r /boot/grub/ grub-install /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001 Installing for i386-pc platform. Installation finished. No error reported. ls -l /boot/grub/ total 24 drwxr-xr-x 2 root root 4096 Feb 4 15:36 fonts -rw-r--r-- 1 root root 1024 Feb 4 15:36 grubenv drwxr-xr-x 2 root root 12288 Feb 4 15:36 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 15:36 locale

    Имаме гарантирано създадена нова папка /boot/grub с принадлежащите и файлове. Папката обаче не е пълна. Продължаваме с инсталацията на GRUB. За начало ще обновим INITRAMFS за всички ядра.

    update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-5.10.0-21-amd64 update-initramfs: Generating /boot/initrd.img-5.10.0-20-amd64


    Да проверим какво се е променило в /boot/grub.

    ls -l /boot/grub/ total 24 drwxr-xr-x 2 root root 4096 Feb 4 15:36 fonts -rw-r--r-- 1 root root 1024 Feb 4 15:36 grubenv drwxr-xr-x 2 root root 12288 Feb 4 15:36 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 15:36 locale

    До тук видимо нищо. Обаче има една особеност. В /boot/grub/i386-pc и /boot/grub/locale съществуват модули за ядрото които чрез горната команда се обновяват в зависимост от това какво настройвате. В статията "Как зарежда Linux" съм обяснил принципа на GRUB. Последното нещо което трябва да направим да обновим целия GRUB.

    update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.10.0-21-amd64 Found initrd image: /boot/initrd.img-5.10.0-21-amd64 Found linux image: /boot/vmlinuz-5.10.0-20-amd64 Found initrd image: /boot/initrd.img-5.10.0-20-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


    И отново да проверим /boot/grub

    ls -l /boot/grub/ total 32 drwxr-xr-x 2 root root 4096 Feb 4 15:36 fonts -rw-r--r-- 1 root root 7274 Feb 4 15:46 grub.cfg -rw-r--r-- 1 root root 1024 Feb 4 15:36 grubenv drwxr-xr-x 2 root root 12288 Feb 4 15:36 i386-pc drwxr-xr-x 2 root root 4096 Feb 4 15:36 locale

    Вече имаме създаден grub.cfg. Отново важен момент. Дали правилно е създаден файла.

    cat /boot/grub/grub.cfg | grep root=ZFS linux /vmlinuz-5.10.0-21-amd64 root=ZFS=zp0/debian ro quiet linux /vmlinuz-5.10.0-21-amd64 root=ZFS=zp0/debian ro quiet linux /vmlinuz-5.10.0-21-amd64 root=ZFS=zp0/debian ro single linux /vmlinuz-5.10.0-20-amd64 root=ZFS=zp0/debian ro quiet linux /vmlinuz-5.10.0-20-amd64 root=ZFS=zp0/debian ro single

    Всичко е правилно. Няма да се притесняваме, ще се заредим със ZFS. За да работи всичко правилно, ако се сещате ремонтирахме /etc/fstab. Трябва ни първо да определим ID на /dev/sdb2. След това да го запишем в /etc/fstab.

    /usr/sbin/blkid /dev/sdb2 | cut -d ' ' -f 2 UUID="b4c08e3f-c389-4883-9552-5614dd43e64b" /usr/sbin/blkid /dev/sdb2 | cut -d ' ' -f 2 >> /etc/fstab nano /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # systemd generates mount units based on this file, see systemd.mount(5). # Please run 'systemctl daemon-reload' after making changes here. # # #/dev/mapper/vg0-root / ext4 errors=remount-ro 0 1 #/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 #UUID=8bb2a703-2721-4266-9244-1fe19381188c /boot ext4 defaults 0 1 /dev/zvol/zp0/debian/swap0 none swap sw 0 0 UUID=b4c08e3f-c389-4883-9552-5614dd43e64b /boot ext4 defaults 0 1

    Готови сме. Излизаме от chroot и се рестартираме.

    exit sudo reboot


    Не забравяме след рестарта да се заредим от втория диск.


    Сега ако сте внимавали ще видите разликата от първия ремонт и сега. За опитен потребител на Linux се вижда, че във втория случай умело използвахме ZFS файловата система, а при първия ремонт ползвахме файлова система ext4. Тези размишления ги оставих за бонус, за да се убедите, че винаги трябва да се мисли. И да покажа правилното решение.

    1

    Какво ни казва този екран? Всичко е правилно с изключение на файла /boot/grub/grub.cfg. Файла или е грешен или липсва. Да проверим:

    2

    Между другото вместо root=(hd0,gpt2) може да ползвате и синтаксиса root=hd0,2, едно и също е. Забелязахте ли разликата с предния случай? Преди зареждахме ядрото vmlinux и указвахме корена на системата да е root=/dev/sda3. Така карахме ядрото да зареди всички сървиси от /dev/sda3 с файлова система Ext4. Ние обаче ползваме ZFS. Ето ти и проблема. След като заредите успешно не забравяйте да направите:

    grub-install /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001 Installing for i386-pc platform. Installation finished. No error reported. update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.10.0-21-amd64 Found initrd image: /boot/initrd.img-5.10.0-21-amd64 Found linux image: /boot/vmlinuz-5.10.0-20-amd64 Found initrd image: /boot/initrd.img-5.10.0-20-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

    Това е, всичко тръгва нормално след рестарта. Затова казвам, този начин е повече за опитни потребители, забелязващи и най-малките различия. За по-неопитни потребители втория вариант с LiveCD е за предпочитане. Сега ми се иска няколко мисли да споделя. 1. Както споменах, ползването на ZFS върху слаби машини не е за препоръка. 2. Този метод с изнесен физически дял за /boot работи по-стабилно в сравнение ако /boot се намира в zpool. 3. Работейки със ZFS пригответе се за решаване на проблеми от не лек характер. Необходими са не малко знания. Получават се грешки от най-различен характер и трябва да си имате познание по системите Linux. 4. Дали ще ползвате LVM, RAID или ZFS всичко изисква допълнителен хардуерен ресурс. Така, че за слаби машини не ползвайте тези техники. 5. За накрая: Независимо, че споменах за много недостатъци на горните технологии не се предавайте. Този тип системи ще позволи гъвкаво да маневрирате по време на работа без да спирате ОС. ОС това е операционната система.

    ЕВЕНТУАЛНИ ГРЕШКИ

    Ще покажа няколко грешки които могат да се появят по време на работа със ZFS.

    Pic01

    В GRUB съществува меню за операционната система на LVM. Ние я изтрихме. Това си е грешка за поправяне.

    Pic02

    Не се монтира /boot. Трябва да се поправи и обнови GRUB.

    Pic03

    След прехвърляне от втория диск на първия zpool-a не можа да се размонтира. След рестарта този проблем ще изчезне.

    Pic04

    Обърнете внимание на горния екран. Даваме системата да се рестартира, а не може да се размонтира /var. За /var създадохме отделен dataset с определени права. Погледнете защо се получава така. Няма да показвам за сега решенията им, защото статията ще стане много дълга. Ако някой му е интересно може да ми пише на tachko@tachko.com. С това приключвам темата. Следващата ще е " Инсталиране на Debian 11 на UEFI и ZFS".