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

    Започвам една много интересна тема. Ако още не сте се занимавали с файловата система ZFS то сега е момента. Много гъвкава и удобна за работа. За начало малко теория: ZFS работи на две нива - ZFS pool "zpool" (подобно от LVM на "Logical Group"), - ZFS dataset "zfs" (подобно от LVM на "Logical Volume"). zpool (pool/пул) Пула има блоково устройство (дисково устройство). В пула може да участва целия диск, но може и дял от диска (примерно sda или sda2). В пула могат да участват няколко диска и да имитират подобие на RAID. Пула може да се регулира чрез параметри (get/set). В пула не може да се записват данни, защото е логическо обединение на физически устройства. zfs (dataset/датасет) Когато създаваме пул (примерно zp0), автоматично се създава и КОРЕНЕН ДАТАСЕТ (zp0 с коренна директория монтирана в /zp0). В датасета могат да се записват данни от типа файлове, папки и т.н. Датасета не е блоково устройство. Датасета има дървовидна структура (/zp0, /zp0/home, /zp0/boot и т.н). По подразбиране датасета наследява параметрите на датасета на родителя, но могат да се променят с get/set. Датасета може да бъде и VOLUM.

    zfs-overview

    Можете на горната картинка да видите структурата на файловата система ZFS. На основата на физическия твърдия диск (Disk) се правят виртуални устройства (VDEV). Едно или няколко виртуални устройства могат да изградят ZFS Pool (zpool). Върху zpool може да се изгради Z Volume (ZVOL), примерно SWAP-a, или да се разположи файловата система на ZFS. В най-груб вариант се запознахме със ZFS. Вече може да инсталираме Debian 11 на дънна платка с BIOS. Създаваме виртуална машина със следните параметри: - CPU - 4 ядра, - RAM - 4 GB, - HDD - 2 броя с еднакъв размер, - Дънна платка с BIOS. Да започваме:

    Pic01
    Pic02

    Виждаме, че двата твърди диска са с еднаква големина (33GB). На втория диск временно ще инсталираме Debian 11 и после ще го прехвърлим на първия диск. За разлика от BSD системите, тук ZFS не се намира в ядрото и се инсталира отделно. Това налага в последствие да прехвърлим системата от единия диск на другия. Ще попитате, а защо не се направи както при FreeBSD? Отговора е, вида лицензионно споразумение. На по-късен етап ще се види. Едно уточнение: всичко това се прави с цел сървъра да бъде инсталиран на два огледални диска за отказоустойчивост. И така, правим непълна инсталация върху втория диск с размер 33GB. В случая на /dev/sdb. Самата инсталация ще я покажа само в картинки до момента когато трябва да се оразмери диска.

    Pic1
    Pic2
    Pic3
    Pic4
    Pic5
    Pic6
    Pic7
    Pic8
    Pic9
    Pic10
    Pic11
    Pic12
    Pic13
    Pic14
    Pic15
    Pic16
    Pic17

    От тук започва интересния момент. Ще оразмеряваме диска ръчно. Ще го правим на логически дялове, без swap.


    Pic18

    Избираме втория диск и натискаме Enter върху него.


    Pic19

    Предлага ни да създадем нова празна таблица. Съгласяваме се. Това ще създаде таблица на диска във формата MSDOS, защото размера на диска е по-малък от 2.2TB, а дъното е с BIOS. Инсталатора проверява това и ако дъното е с BIOS прави логика за размера на дисковете. Ако диска е по-малък то 2.2ТВ го прави във формат MSDOS, ако диска е по-голям от 2.2ТВ го прави във формат GPT. Ако пък дъното е с UEFI не гледа размера на диска и веднага го прави във формат GPT.


    Pic20

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


    Pic21

    Създаваме нов дял.


    Pic22

    Върху целия диск.


    Pic23

    Дяла ще е първичен.


    Pic24

    Ще го използваме като:


    Pic25

    За изграждане на логически дялове.


    Pic26

    Дяла ще е зареждащ се.


    Pic27

    Дефинирамхме дяла и го завършваме.


    Pic28

    Казахме дяла ще е логически. Да го настроим.


    Pic29

    Предлага ни първо да запишем дяловете които създадохме. Съгласяваме се.


    Pic30

    При работа с LVM първо да създадем логическа група.


    Pic31

    Даваме и име vg0.


    Pic32

    Групата я създаваме върху втория диск първия дял. Между другото диска има само един дял. Трябва ни проста, чиста инсталация.


    Pic33

    Създаваме вече логически том.


    Pic34

    Върху логическата група vg0.


    Pic35

    Даваме име на тома root.


    Pic36

    Важен момент: Мястото което заделяме не е цялото. Остават още няколко МВ, те на по-късен етап ще се използват за снапшот. Обърнете внимание също и на размера. Описахме да е 33GB, а уж казахме дисковете да са по 33GB. Така се получава, защото създадохме диска 33 гига байта, а тук се работи с гига бити и се равнява приблизително на 35.4GBit.


    Pic37

    Завършваме със създаването на логическите томове.


    Pic38

    Сега ще дефинираме и самия логически том.


    Pic39

    Тома ще го ползваме като:


    Pic40

    Ext4 файлова система.


    Pic41

    Тома ще го монтираме в:


    Pic42

    / root (корена на файловата система.


    Pic43

    Завършваме с дефиниране на тома. Простичка инсталация, всичко в един том. Забележете не сме дефинирали swap. На първо време той не е нужен.


    Pic44

    Завършваме и с настройката на диска за инсталация.


    Pic45

    Предупреждава ни, че нямаме swap и предлага да се върнем да поправим тази грешка. Ние знаем и не се съгласяваме.


    Pic46

    Записваме промените които направихме на диска. Иска ми се малко да уточня някои подробности. - 1. Инсталираме цялата система на LVM структура защото чрез нея ще може да направим временна снимка на системата. - 2. Инсталираме я на един дял, без swap за да може да направим само една снимка, която на по-късен етап ще прехвърлим на първия диск. - 3. Нямаме SWAP защото после ще покажа как ще ги изградим върху ZFS файловата система.


    Pic47

    Пита ни дали ще използваме дрги носители на инсталационния пакет Debian. Казваме, че нямаме други носители.


    Pic48

    Предлага да дефинираме огледален сървър с архив на Debian пакети. Избираме огледалния сървър да се намира в България.


    Pic49

    Дефинираме и кой точно да е сървъра в България.


    Pic50

    Не използваме прокси за достигане до огледалния сървър.


    Pic51

    Предлага анонимно да пращаме информация до хората създаващи Debian. Тук който както реши. В повечето случаи не искам да изпращам информация. Обаче ако искате производителите да знаят примерно, че използвате ZFS и да и обърнат внимание, то използвайте YES. В случая е демонстративен сървъра и затова избирам NO.


    Pic52

    Предлага кои пакети да инсталираме от огледалния сървър. Трябва ни само SSH за да може отдалечено да управляваме сървъра и стандартните програми. Няма да инсталираме никаква графика.


    Pic53

    Отново важен момент. Предлага да инсталираме GRUB на диск /dev/sdb. Забележете, използва ID на диска. Тук ще има проблем защото сме на виртуална машина и тя не разпознава ID на виртуалните дискове.


    Pic54

    Поради бъга който споменах, вижте къде иска да запише GRUB, /dev/mappe, а ние казахме да е в /dev/sdb. Продължаваме


    Pic55

    Казва, че не може да го инсталира. Пак продължаваме.


    Pic56

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


    Pic57
    Този път ръчно ще укажем къде точно да го инсталира.
    Pic58

    Той си знае неговата и отново ни предлага /dev/mapper.


    Pic59

    Ние обаче указваме този път твърдо /dev/sdb. Не с ID на диска а твърдо /dev/sdb. Тъй като тази система не е важна то указваме /dev/sdb, но правилния начин на работещата система е /dev/disk/by-id/.... и номера на диска. На по-късен етап това ще го направим.


    Pic60

    Инсталацията завърши. Вадим инсталационния носител и рестартираме системата.


    Pic61

    Не забравяме да укажем в BIOS, че системата ще се зареди от втория диск.


    Pic62

    Влизаме като root


    Pic63

    ПРАВИМ ПЪРВАТА СНИМКА - Installed LVM


    Готово всичко работи. Обаче искам отново да се върна на технологията на инсталиране на ZFS на сървъри. Самата файлова система я няма в ядрото заради лицензионните споразумения и затова се налага да се правят разни въртележки. Ще покажа на грубо стъпките за инсталация. Инсталираме ZFS на временния Linux. - указваме репозиторите от където се взема ZFS - инсталираме помощни пакети - инсталираме самия ZFS - ако модулите не са включени ги включваме Разделяме първия диск за да прехвърлим системата от втория с току що инсталираните модули на ZFS bios_grub - 1MB/bootable zfb - 2GB за раздела boot zfs - всичко останало Създаваме пул "zp0" Автиматично се създава датасет "zp0" с определени параметри (без точка на монтиране) в първи диск, третия дял Сиздаваме датасет КОРЕН "zp0/debian" с точка на монтиране "/" Създаваме датасет за домашната папка "zp0/debian/home" с точка на монтиране "/home". Датасета се създава с параметър "setuid=off" за не може да се установява флага set uid върху файловете в този датасет. Съдваваме датасет за SWAP. Този датасет трябва да се създаде с параметър "V" (volum) защото после да може да се създаде и самия SWAP. Без този параметър swap не може да се създаде (специфика на swap). Всички тези датасети се намират в пула zp0 Създаваме втори пул zpb. Той ще отговаря за папката /boot Този начин има и недостатъци. Ще ги обясня накрая на статията и ще покажа инсталация с друго разпределение на диска. Правим snapshot (временна снимка) на работещата система на втория диск. Пренасяме snapshot-a в ZFS. Донастройваме системата чрез "chroot" - swap - fstab - grub Рестарт на системата Проверяваме за грешки при старта с "journalctl -xb" Вкарваме втория диск в ZFS - трием първо логическите дялове "lvremove" - трием логическата група "vgremove" - трием физическата отметка на LVM "pvremove" Обновяваме grub С parted разделяме втория диск огледално на първия bios_grub - 1MB/bootable zfb - за boot zfs - всичко останало Инсталираме GRUB на втория диск Вмъкваме втория дял на втория диск в пула zp0 Чакаме да се синхронизират дисковете Проблеми: GRUB в ZFS не работи много коректно. А именно, при активация на някои от параметрите на пула зареждането се чупи. Това налага да извадим функцията зареждане от основния пул (zp0) в отделен пул за зареждане zpb. Така може да си регулираме както си искаме там където работим (zp0), но не пипаме пула от който зареждаме (zpb). Вариантите са следните: - /boot да се извади на отделно блоково устройство (отделен диск или USB фалшка или отделен дял от диска) - да се направи отделен zfs пул, специално за /boot. Лично аз предпочитам този вариант. Диска трябва да е във вида: bios_grub - 1MB/bootable zpb - 2GB пул, отговаря за зареждането, там ще бъде всичко което е в /boot (ядро, initramfs и целия grub) zfs - всичко останало в пул (/, /home, /var и т.н.) или във вида: bios_grub - 1MB/bootable boot - 2GB дял, отговаря за зареждането, там ще бъде всичко което е в /boot (ядро, initramfs и целия grub) zfs - всичко останало Да се върнем на инсталирания Debian. До тук имаме инсталиран Debina 11 на един LVM виртуален дял на втория твърд диск. Преди да започнем инсталацията на ZFS на втория диск, да оправим шела. ROOT има непълни пътища в шела. Вариант 1, пишем в шела:

    export PATH=/sbin:$PATH


    Или чрез:

    nano /root/.bashrc PATH=$PATH:/usr/sbin


    Инсталиране на ZFS

    ПЪРВА СНИМКА НА СИСТЕМАТА - Instaled LVM Да се заемем и със самата инсталация. Да видим правилно ли сме заредили системата:

    df -h Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 394M 596K 393M 1% /run /dev/mapper/vg0-root 33G 1.4G 30G 5% / 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

    ОС е инсталирана на структура LVM, а корена на системата се намира в логическата група vg0. Всичко е правилно. Да проверим дали са налични модулите за инсталация:

    apt search zfs-initramfs Sorting... Done Full Text Search... Done

    Няма ги, защото не са дефинирани в репозиторите. Да оправим този проблем.

    echo "deb http://deb.debian.org/debian bullseye-backports main contrib" >> /etc/apt/sources.list.d/backports.list echo "deb-src http://deb.debian.org/debian bullseye-backports main contrib" >> /etc/apt/sources.list.d/backports.list echo "Package: src:zfs-linux" >> /etc/apt/preferences.d/90_zfs echo "Pin: release n=bullseye-backports" >> /etc/apt/preferences.d/90_zfs echo "Pin-Priority: 990" >> /etc/apt/preferences.d/90_zfs apt update


    Или по другия начин:

    nano /etc/apt/sources.list.d/backports.list deb http://deb.debian.org/debian bullseye-backports main contrib deb-src http://deb.debian.org/debian bullseye-backports main contrib nano /etc/apt/preferences.d/90_zfs Package: src:zfs-linux Pin: release n=bullseye-backports Pin-Priority: 990 apt update


    И отново проверяваме:

    apt search zfs-initramfs Sorting... Done Full Text Search... Done zfs-initramfs/bullseye-backports 2.1.7-1~bpo11+1 all OpenZFS root filesystem capabilities for Linux - initramfs

    Наличен е може да се инсталира. За начало ще инсталираме някои помощни пакети.

    apt install linux-headers-$(uname -r) linux-image-amd64 dkms parted rsync -y


    Сега да инсталираме и самия ZFS.

    apt install zfs-dkms zfs-initramfs zfs-zed zfsutils-linux -y

    Pic64

    Заради това лицензионно споразумение ZFS не може да се вгради в ядрото на Linux. Инсталацията не протича много бързо, необходимо е доза търпение. Да проверим дали всичко е инсталирано:

    lsmod | grep zfs zfs 3960832 6 zunicode 335872 1 zfs zzstd 577536 1 zfs zlua 184320 1 zfs zavl 16384 1 zfs icp 319488 1 zfs zcommon 106496 2 zfs,icp znvpair 114688 2 zfs,zcommon spl 114688 6 zfs,icp,zzstd,znvpair,zcommon,zavl

    Всичко е точно.

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

    ПРАВИМ НОВА СНИМКА НА ВИРТУАЛНАТА МАШИНА - Installed ZFS Имаме поддръжка на файловата система 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-part2. С първата част на задачата сме готови. Сега трябва да създадем папка където пула да го монтираме. За пояснение: Пула има болокова структура както твърдите дискове, или дяловете на твърдите дискове. Ние не боравим примерно с /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. Това добре, но все пак трябва да създадем dataset за корена на файловата система.

    /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 нямаше да се получи. Първия пул го създадохме и към него и първия датасет. Сега трябва да създадем пула отговарящ за зареждането на системата. Тук искам малко повече да разясня. Можеше да се разминем без този пул, а просто /boot да се намира в първия пул, коренния датасет. Проблема идва от това, че когато почнем да променяме настройките на пула или датасета чрез get/set, зареждането на системата се чупи, а по време на работа винаги се налага да се оптимизира или пула или датасета. По правилния подход е да отделим /boot от този пул и да го сложим в друг, който няма да се променя. И без това в /boot нищо не правим след като настроим системата. Сега ще покажа една таблица, макар и за по-предни версии на ZFS.

    Pic65

    Пояснение по колонките. Първата колонка име на фючера. Втора, трета и четвърта колонка версията на ZFS. Четвъртата колонка ни интересува, тя отговаря за GRUB, за зареждането на системата. + в клетката означава, че фючара за дадената версия съществува. Ако е празна клетката означава, че дадената версия не го поддържа. До версия 0.6 нямаше ограничения, но след това от 0.7 и нагоре версии се появиха. Поглеждайки на колонката grub има клетки с червен цвят. Това са фючери които не трябва да са в състояние activeе за да може успешно да се заредим пула отговарящ за зареждането. И всичко това налага пула отговарящ за зареждането да се отдели от основния пул и да не се пипа. Прочитайки дългото обяснение от горе трябва да създадем пул за зареждане отделно. Да го създадем като първо създаваме папката където да се монтира пула

    mkdir /mnt/zpool/boot


    Създаваме и самия датасет zpb

    zpool create -o ashift=9 -o altroot=/mnt/zpool -d -o feature@async_destroy=enabled -o feature@bookmarks=enabled -o feature@embedded_data=enabled -o feature@empty_bpobj=enabled -o feature@enabled_txg=enabled -o feature@extensible_dataset=enabled -o feature@filesystem_limits=enabled -o feature@hole_birth=enabled -o feature@large_blocks=enabled -o feature@lz4_compress=enabled -o feature@spacemap_histogram=enabled -o feature@userobj_accounting=enabled -o feature@zpool_checkpoint=enabled -o feature@spacemap_v2=enabled -o feature@project_quota=enabled -o feature@resilver_defer=enabled -o feature@allocation_classes=enabled -O acltype=posixacl -O compression=lz4 -O devices=on -O normalization=formD -O relatime=off -O atime=off -O xattr=sa -O mountpoint=/boot -f zpb /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2

    Може би пак трябва по горната команда разяснение. До altroot=/mnt/zpool всичко е както при първия пул който създадохме. -d - означава, че забраняваме всички фючари, след това черз feature@.....=enable разрешаваме само тези които са безопасни за зареждането на системата. mountpoint=/boot - указваме непременно точката на монтиране да е в /boot -f - това е флаг Forst. Принудително казва да се създаде пула, дори да има нещо друго в дяла. zpb /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 - дефинира къде да бъде създаден пула zpb. Обърнете внимание на part2. По просто му казано така на диск /sda избираме /sda2. Да видим състоянието на пуловете.

    zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zp0 30.5G 188K 30.5G - - 0% 0% 1.00x ONLINE /mnt/zpool zpb 1.88G 612K 1.87G - - 0% 0% 1.00x ONLINE /mnt/zpool

    Имаме дефинирани два пула zp0, zpb. До тук всичко е правилно. Да проверим и датасетовете.

    zfs list NAME USED AVAIL REFER MOUNTPOINT zp0 212K 29.5G 24K none zp0/debian 24K 29.5G 24K /mnt/zpool zpb 408K 1.75G 96K /mnt/zpool/boot

    Всичко се нарежда както трябва. Погледнете каталозите. Ако приемем, че /mnt/zpool е корена (/), то на практика в / се намира /boot, както е стандарта в Linux. Обяснихме и защо изнесохме /boot в отделен пул. Продължаваме с проблемните каталози. Следващия е /home. Това е домашен каталог и условието тук е потребител който не е собственик на каталог или файл да не може да го изпълнява. Примерно да не се пусне някой скрипт от чуждо име и да ни хакнат. Домашния каталог се намира в коренния /home. Това означава трябва да създадем отделен датасет за home и той да се монтира в корена в папка home. За целта коренната папка казахме е /mnt/zpool, значи в крайна сметка датасета за home трябва да се монтира в /mnt/zpool/home. Сега да създадем датасет за 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 19:58 boot 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 zpb 408K 1.75G 96K /mnt/zpool/boot

    Всичко е точно както го говорехме по-нагоре. По същата логика да създадем дата сет за 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 zpb 408K 1.75G 96K /mnt/zpool/boot ls -l /mnt/zpool/ total 2 drwxr-xr-x 2 root root 2 Jan 27 19:58 boot drwxr-xr-x 2 root root 2 Jan 27 20:18 home drwxr-xr-x 2 root root 2 Jan 27 20:38 var

    Прекрасно, всичко е правилно Ако се сещате, когато инсталирахме 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.13G 25.4G 24K none zp0/debian 4.13G 25.4G 26K /mnt/zpool zp0/debian/home 24K 25.4G 24K /mnt/zpool/home zp0/debian/swap0 4.13G 29.5G 12K - zp0/debian/var 24K 25.4G 24K /mnt/zpool/var zpb 408K 1.75G 96K /mnt/zpool/boot

    Датасета swap няма точка на монтиране. Тка трябва и да бъде. Корена на системата го оправихме, както и swap-a. /home също дефинирахме. Да проверим какво имаме в корена.

    ls -l /mnt/zpool/ total 2 drwxr-xr-x 2 root root 2 Jan 27 19:58 boot drwxr-xr-x 2 root root 2 Jan 27 20:18 home drwxr-xr-x 2 root root 2 Jan 27 20:38 var

    Супер в корена имаме boot и home. Разбира се папките са празни. Когато направим снапшот то файловете от снапшота ще ги прехвърлим тук, така файловете ще се прехвърлят там където трябва защото сме направили точки на монтирания към местата където трябва да са в оригинал. Знам, че е много объркващо но когато проиграете 2-3 пъти нещата всичко ще се изясни.

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

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

    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 -L400M /dev/vg0/root Logical volume "root_snap" created.

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

    Цялата операционна система с дървовидната и структура. Да я прехвърлим на новия диск. За целта ще ползваме програмата 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

    Всички файлове и папки с дървовидната си структура са прехвърлени. ПРАВИМ НОВА СНИМКА - 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

    chroot /mnt/zpool/ /bin/bash

    Вече се намираме в прехвърлената операционна система. Ако се сещате създадохме ZFS том за swap, без да има точка на монтиране. Дайте да създадем самия swap.

    /usr/sbin/mkswap -f /dev/zvol/zp0/debian/swap0 mkswap: /dev/zvol/zp0/debian/swap0: warning: wiping old swap signature. Setting up swapspace version 1, size = 4 GiB (4294963200 bytes) no label, UUID=a7e112fd-30a5-487d-a0a9-c191d38e6e8a

    Но има един нюанс, ако проверим swap-a:

    swapon -s

    Ше видим, че swap-a не е подключен Да го включим в /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 /dev/zvol/zp0/debian/swap0 none swap sw 0 0

    Забранихме пътя на зареждане от старата операционна система която беше на LVM, забранихме CD/DVD, и активирахме SWAP-a. Това е то красотата на ZFS на BIOS или UEFI с Legacy. Във файла има описан само swap-а, за всичко друго се грижи ZFS. За зареждането, за корена на системата и т.н. Примерно имате изграден RAID1 на ZFS и се счупи единия диск, само с 2 3 команди и системата продължава да работи. При чист UEFI, трябва да стартирате от Live CD, да монтирате старата система, да редактирате fstab като цяло сложнотия. Между другото да видим къде беше преди описан swap-a.

    cat /etc/initramfs-tools/conf.d/resume RESUME=none

    Ако в този файл имаше нещо то трябва задължително да изглежда както горе. С текстов редактор може да го промените. Следващото нещо е да укажем GRUB от къде да се зарежда

    nano /etc/default/grub GRUB_CMDLINE_LINUX="boot=zfs rpool=zpb bootfs=zpb"

    Това значи че, boot=zfs (да зарежда чрез файловата система ZFS), rpool=zpb (коренния пул за зареждане да бъде zpb ), bootfs=zpb (файловата система за зареждане ще се намира в zpb). След рестарта горните промени ще влязат в сила, но сега да оправим zpool-a zpb

    zpool set bootfs=zpb zpb


    Да проверим

    zpool get bootfs zpb NAME PROPERTY VALUE SOURCE zpb bootfs zpb local

    Правилно, всичко е точно. На практика сме готови, да обновим 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

    Обновихме за всички ядра INITRAM. Вече знае, че може да се зарежда от файловата система ZFS Сега да инсталираме GRUB на /dev/sda. По точно на /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001 , без частта -part..

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

    Готово, инсталираха ся нялолко байта в началото на първия диск. Ако диска беше във формат MSDOS то мисля, че бяха 446 байта, а при GPT мисля, че бяха 128МВ. Може и да се лъжа. Да обновим сега 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. grub-probe: error: unknown filesystem. Found Debian GNU/Linux 11 (bullseye) on /dev/mapper/vg0-root done

    Готово, GRUB e обновен. Създаде няколко файла които се разположиха в /boot. Обърнете внимание, GRUB откри и старата ни инсталация. Готови сме. Излизаме от chroot и се рестартираме

    exit rebooot


    Не забравяйте да заредите от първия диск. Променете настройките на BIOS да заредите от първия диск. Не знам дали забелязахте но след рестарта в зареждащото меню на Debian съществуваше и старата инсталация върху LVM. Да проверим от къде заредихме системата:

    df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 394M 628K 393M 1% /run zp0/debian 26G 693M 25G 3% / zp0/debian/home 25G 128K 25G 1% /home zp0/debian/var 25G 113M 25G 1% /var 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

    Правилно сме се заредили през файловата система ZFS. Проверяваме пуловете:

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

    Единия пул не е зареден (импортиран). zpb го няма. Да го импортираме.

    zpool import zpb zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zp0 30.5G 806M 29.7G - - 0% 2% 1.00x ONLINE - zpb 1.88G 99.4M 1.78G - - 0% 5% 1.00x ONLINE -

    Пула е импортиран и наличен. Да проверим:

    ls -l /boot/ total 93445 -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 8 Jan 27 23:53 grub -rw-r--r-- 1 root root 39663621 Jan 27 23:46 initrd.img-5.10.0-20-amd64 -rw-r--r-- 1 root root 41737040 Jan 27 23:46 initrd.img-5.10.0-21-amd64 -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

    Ако не беше се импортирал нямаше да можем да досъпим каталога /boot. Това се изпълнява само след първия рестарт. В следващите рестарти zpb ще е наличен и тази операция няма да се прави.

    reboot

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

    И след като се справихме с този проблем да се върнем на втория диск с инсталирания Debian на LVM върху него. Идеята е този диск да се ползва за втори диск на ZFS и да бъде в RAID1 с първия диск. Хубавото на цялата ситуация, че в RAID1 ще бъдат само zpool zp0 и zpb. За начало да разрушим 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 pool: zpb state: ONLINE status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. config: NAME STATE READ WRITE CKSUM zpb ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 ONLINE 0 0 0 errors: No known data errors

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

    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 zpool attach zpb /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part2 invalid vdev specification use '-f' to override the following errors: /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part2 contains a filesystem of type 'ext4'

    При изграждането на mirror на втория zpool (zpb) се появи грешка. Предупреждава ни, че на физическия дял съществува стара файлова система ext4, а на първия дял е ext2. За да се изпълни командата ще трябва да ползваме ключа -f за да може принудително да се създаде mirror от двата дяла. Да го направим:

    zpool attach zpb /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 /dev/disk/by-id/ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part2 -f

    Готово. Забележете, използвахме zpool attach, а не zpool add. Това е така защото искахме да изградим mirror. При zpool add щеше да се получи RAID0, a ние искаме RAID1. Да проверим

    zpool status pool: zp0 state: ONLINE scan: resilvered 824M in 00:00:13 with 0 errors on Sat Jan 28 16:17:04 2023 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 errors: No known data errors pool: zpb state: ONLINE status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: resilvered 100M in 00:00:01 with 0 errors on Sat Jan 28 16:31:50 2023 config: NAME STATE READ WRITE CKSUM zpb ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_00000000000000000001-part2 ONLINE 0 0 0 ata-VMware_Virtual_SATA_Hard_Drive_01000000000000000001-part2 ONLINE 0 0 0 errors: No known data errors

    Супер и на двата zpool-a, mirror-ите са синхронизирани и работят без грешка. Но това не е края. За да бъде напълно заменяем втория диск на първия трябва да инсталираме GRUB на втория диск:

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


    Трябва да обновим INITRAM за всички налични ядра:

    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 и на втория диск. Така ако изгори първия няма да се счупи системата, а ще зареди от втория. Да се рестартираме първоначално да видим дали всичко работи правилно. Готово всичко работи. Лично моето мнение за така наречените софтуерни RAID-ове. Заслужава си ако имате здрав хардуер. Ако нямате много процесори, много памет ползвайте хардуерни решения. За всичко което показах по-горе, и за предната тема LVM си изисква много здрав процесор и много RAM

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

    Сега ще се постарая да покажа най-честите грешки които се появяват Започваме със "След рестарт не се появява zpb" - Най-често забравяте сървиса systemctl enable zfs-import-cache. Не зареждате кеш файла на ZFS /etc/zfs/zpool.cache. Оправя се: Проверяваме за наличието на сървиса:

    service zfs-import-cache status -l


    Ако го няма зареждаме.

    service zfs-import-chache start


    След това импортираме zpb

    zpool import zpb


    И наново:

    systemctl enable zfs-import-chache

    Сега всичко е ОК. При промяна на фючарите на zpb не може да се зареди GRUB. Отваряте файла /boot/grub/grub.cfg. Вътре търсите всичко където root=ZFS=/root, трябва да изглежда root=ZFS=zp0/root Реално ще имат много грешки но това са основните които се получават след инсталация. Има още един недостатък тази инсталация и това е мъчната поддръжка. Ако нещо стане по-различно с zpool-a zpb то ремонта е много мъчителен. Лично аз предпочитам втория вариант но това ще е в следващата статия. С това приключвам темата, следващата ще е същата но /boot няма да е в zpool, а на отделен дял.