Fedora на ZFS.

Установка, настройка, эксплуатация.

Модератор: ROOT

Fedora на ZFS.

Сообщение ROOT » 24 янв 2020, 22:28

Оглавление


Темы
 Подготовка системы к клонированию 
 Настраиваем систему на целевом диске 
 Обновляем образ initramfs 
 Установка Grub2 на целевой диск 
 Замена Grub 2 на systemd-boot 
 Добавляем в bash_completion zfs 
 Автоматизация инсталляции Fedora на ZFS 
Дополнительные материалы
Монтирование файловых систем
XFS: Файловая система
Перенос системы на другой диск (xfs_copy)
Перенос системы на другой диск (rsync)
Convert MBR to GPT
Исправляем нумерацию разделов на диске
Гибернация — режим сна
LUKS: Шифруем данные


Fedora_Root_On_ZFS.md статья на github
Reliably boot Fedora with root on ZFS статья с csparks.com
ZFS на Linux Debian 9.9 Видео на youtube



Нерешенные вопросы
  1. Почему на завершающей стадии не могу экспортировать пул из системы (после выхода из chroot)?
  2. Не устраивает сборка при помощи dkms (требуется выполнение некоторых операций руками). Желательно мигрировать на akmods


Основные команды
Действия с пулом
  • zpool create tank /dev/disk/by-id/… — Создание пула с именем tank на блочном устройстве (диск, раздел) /dev/disk/by-id/… Крайне желательно указывать именно ссылку на устройство из каталога /dev/disk/by-id/
  • zpool import — Выводит список пулов доступных для импорта
  • zpool list — Выводит список импортированных пулов
  • zpool import tank — Импортирует в систему пул с именем tank
  • zpool export tank — После выполнения этой команды пул tank больше не отображается в системе. Перед продолжением предпринимается попытка размонтирования всех смонтированных файловых систем в пуле. Если размонтировать какую-либо из файловых систем не удается, ее можно размонтировать принудительно с помощью параметра
  • zpool add — расширяет пространство пула объёмом добавляемого блочного устройства (stripe)
  • zpool attach — присоединяет блочного устройство к массиву (MIRROR и др)
  • zpool detach — отсоединяет блочное устройство от массива (MIRROR и др)
Действия с файловой системой
  • zfs create tank/ws — Создать dataset ws в пуле tank
  • zfs destroy -r tank/ws — Удаляет все вложенные dataset рекурсивно
  • zfs set … =on/off tank/ws — Установить/отключить параметр для указанного dataset
  • zfs mount — Монтирование определённого dataset
  • zfs unmount — Размонтирование отдельного dataset


 Подготовка системы к клонированию 
Поскольку в дистрибутиве Fedora изначально используется systemd, то для идентификатора машины применяется /etc/machine-id который генерируется командой systemd-machine-id-setup, а файл /etc/hostid не создаётся. Для работы файловой системы ZFS он нужен, и его необходимо создать не взирая на предупреждение об устаревшем методе идентификации. Если genhostid отсутвует, то нужно пустановить пакет initscripts, в который он входит
ZFS использует свой собственный механизм для хранения идентификатора хоста, который называется hostid. hostid хранится в метаданных пула ZFS и используется для идентификации узла, на котором находится пул.
Код: выделить все
genhostid

Проверить существование файла hostid можно примерно так
Код: выделить все
[ -f /etc/hostid ] && echo true

Устанавливаем репозиторий zfsonlinux для Fedora в систему
Код: выделить все
dnf install -y https://zfsonlinux.org/fedora/zfs-release-2-5$(rpm --eval "%{dist}").noarch.rpm

Инсталлируем необходимое программное обеспечение
Код: выделить все
dnf install  gcc make kernel-devel kernel-headers dkms zfs-dracut zfs-dkms zfs grub2-efi-x64-modules

  • dkms - Этот пакет содержит платформу для динамической сборки модулей ядра (DKMS)
  • zfs-dracut - zfs-dracut позволяет dracut создавать образы initramfs с поддержкой ZFS
  • zfs-dkms - Пакет содержит модули ZFS для dkms
  • zfs - Пакет содержит основные утилиты командной строки ZFS.
  • grub2-efi-x64-modules - Этот пакет предоставляет дополнительные модули для сборки вашего собственного grub.efi.
Fedora предоставила пакет zfs-fuse, он уже установлен в системе. Затем следует использовать команду dnf swap для замены существующих пакетов fuse на пакеты ZFS.
Код: выделить все
dnf swap zfs-fuse zfs

Грузим zfs модули
Код: выделить все
modprobe zfs

Проверяем загрузились ли модули ядра zfs
Код: выделить все
lsmod |grep zfs

Пересобираем образ initramfs для загруженного ядра
Код: выделить все
dracut -f

Теперь можно перезапустить систему и снова проверить загрузились ли модули ядра для zfs
Код: выделить все
reboot
lsmod |grep zfs

При успешном запуске zfs можно переходить к разметке диска для новой файловой системы.
Подготовка дискового пространства на новом диске
Теперь подготовим разделы на свободном диске и создаём следующие разделы
  • EFI System Partition - 512 MB
  • ZFS POOL - Всё остальное пространство
Код: выделить все
parted -a optimal -s /dev/sda 'mklabel gpt' 'mkpart primary fat32 1MiB 513MiB' \
   'name 1 "EFI System Partition"' 'set 1 esp on' \
   'mkpart primary 513MiB -1' 'name 2 "ZFS"'

Сделаем теперь на разделе EFI файловую систему FAT
Код: выделить все
mkfs.fat -F32 /dev/sda1



Создаём структуру пулов и набора данных ZFS
Предлагаемая структура улов и набора данных такова:
tank/
tank/boot
tank/home

Создадим пул ZFS и корневую файловую систему с оптимальными параметрами
Код: выделить все
zpool create -d -o feature@allocation_classes=enabled \
    -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@project_quota=enabled \
    -o feature@resilver_defer=enabled \
    -o feature@spacemap_histogram=enabled \
    -o feature@spacemap_v2=enabled \
    -o feature@userobj_accounting=enabled \
    -o feature@zpool_checkpoint=enabled \
    -o ashift=9 -o altroot=/sysroot \
    -O atime=off -O compression=lz4 \
    -O xattr=sa -O normalization=formD \
    -O mountpoint=/ -O acltype=posixacl \
    tank /dev/disk/by-id/ata-VBOX_HARDDISK_VB08f83824-88e6cb2e-part2

??? -o multihost=on
Указываем параметр altroot равным /sysroot чтобы не менять значение перед перезагрузкой.
При создании пула указываются два типа параметров:
  • -o — параметры пула
  • -O — параметры корневого dataset
Теперь разберём значения основных параметров
  • ashift - Размер физ. сектора (9,12) степень двойки 2^9=512 или 2^12=4048=4K
  • altroot - Смещение относительно какого-то каталога точки монтирования
  • atime - Отключение обновления времени доступа к файлу при каждом обращении
  • canmount - Отключаем монтирование корневого dataset
  • compression - Метод сжатия данных для создаваемого dataset
  • xattr - Место хранения расширенных атрибутов, по умолчанию хранятся в виде скрытых файлов (только для Linux), что негативно влияет на производительность
  • -m none - Отключаем точку монтирования для корневого dataset
  • -f - Форсированное создание пула (подавляет предупреждения)
  • tank - Имя пула
  • /dev/... - Раздел или диск под создаваемый пул
  • multihost - осуществляется проверка, что пул уже кем-то импортирован
  • normalization -
Создаём dataset для файловой системы под домашние каталоги пользователей. Долее можно не указывать o mountpoint, точка монтирования значится автоматически исходя из названия dataset
Код: выделить все
zfs create \
    -o compression=on -o exec=off -o setuid=off \
    tank/home

setuid=off — запрещает выполнение программ от имени владельца файла в файловой системе для домашних каталогов пользователей.
-o exec=off — с файловой системы запрещаем выполнять программы.
Создаём dataset для файловой системы boot.
Код: выделить все
zfs create \
    -o compression=on -o atime=off \
    tank/boot

Теперь устанавливаем на параметр bootfs значение для dataset с загрузочной файловой системой
Код: выделить все
zpool set bootfs=tank/boot tank

Пример создания области подкачки swap
В данном случае создаём zfs volume, а не dataset. Том zfs является блочным устройством, а dataset - НЕТ
Код: выделить все
zfs create -V 4G -b $(getconf PAGESIZE) \
    -o logbias=throughput -o sync=always \
    -o primarycache=metadata -o secondarycache=none \
    -o com.sun:auto-snapshot=false -o compression=zle \
    tank/swap

Монтируем EFI раздел в соответствующий каталог вновь созданной структуры ZFS
Код: выделить все
mkdir -p /sysroot/boot/efi && mount /dev/sdb1 /sysroot/boot/efi

Переносим данные на диск с ZFS
Перед переносом данных на целевой диск нужно создать lvm snapshot либо остановить все основные сервисы и выполнить синхронизацию исходного диска с целевым
Код: выделить все
rsync -axHAWXS --numeric-ids --info=progress2  \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found/*","/sysroot"} \
/* /sysroot

Если возникла потребность в перезапуске или в поднятии существующего пула на иной системе, то нужно указывать ALTROOT параметром '-R /sysroot/tank' и тогда вся структура датасетов будет смонтирована по своим местам относительно значения ALTROOT
Код: выделить все
zpool import -R /sysroot tank
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 12:44



 Настраиваем систему на целевом диске 
Меняем корень файловой системы на каталог в который только что скопировали данные с исходного диска
Код: выделить все
mount /dev/sdb1 /sysroot/boot/efi
mount -t proc /proc /sysroot/proc
mount --rbind /sys /sysroot/sys
mount --make-rslave /sysroot/sys
mount --rbind /dev /sysroot/dev
mount --make-rslave /sysroot/dev
mount -t tmpfs tmpfs /sysroot/tmp
chroot /sysroot /bin/bash

После chroot может потребоваться загрузить локальную конфигурацию bash:
Код: выделить все
source /etc/profile &&  source ~/.bashrc

Совет: При желании создайте уникальное приглашение, чтобы иметь возможность различать вашу среду chroot:
Код: выделить все
export PS1="(chroot) $PS1"

Определяем UUID для загрузочного раздела на целевом диске и добавляем его отдельной строкой в fstab
Код: выделить все
blkid /dev/sda1 | cut -d " " -f2 >> /etc/fstab


Вносим изменения в файл fstab
Меняем UUID для EFI раздела и добавляем подключение ZFS-тома для swap
e /etc/fstab
Код: выделить все
UUID=69CB-015C           /boot/efi         vfat        umask=0077,shortname=winnt 0 2
/dev/zvol/swap           none              swap        sw                         0 0



Очередная подстава от systemd, при попытке включить сервис в chroot возникает ошибка:
System has not been booted with systemd as init system (PID 1). Can't operate

Код: выделить все
systemd-chroot --systemd-override

Эта команда запустит systemd-окружение внутри chroot-окружения. После этого можно пробовать активировать нужные нам сервисы
Код: выделить все
systemctl enable zfs-import-cache.service
systemctl enable zfs-import-scan.service
systemctl enable zfs-mount.service
systemctl enable zfs-share.service
systemctl enable zfs-zed.service
systemctl enable zfs.target
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 12:45



 Обновляем образ initramfs 
Добавляем ZFS_MOUNT ZFS_UNMOUNT в /etc/default/zfs
Код: выделить все
grep -q "ZFS_MOUNT" /etc/default/zfs 2> /dev/null || echo "
ZFS_MOUNT=yes
ZFS_UNMOUNT=yes
" | tee -a /etc/default/zfs

обновляем строку add_dracutmodules+ конфигурации в /etc/dracut.conf
Код: выделить все
add_dracutmodules+=" zfs "


???
e /usr/lib/dracut/dracut-init.sh примерная строка 1073
Код: выделить все
После строк
     local _optional="-o"
     local _silent
     local _ret
добавить
   if (($# == 0)); then
      return 0
   fi
 перед строкой
     [[ $no_kernel = yes ]] && return

обновляем initramfs
Код: выделить все
dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 12:46



 Установка Grub2 на целевой диск 
Изменяем параметры загрузчика GRUB в /etc/default/grub
исходные строки
Код: выделить все
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_fs/root ...
GRUB_ENABLE_BLSCFG=true

И добавляем отсутствующие параметры или меняем значения у существующих
Код: выделить все
GRUB_CMDLINE_LINUX="boot=zfs rpool=tank bootfs=tank/boot ...
GRUB_PRELOADED_MODULES="zfs"
GRUB_ENABLE_BLSCFG=false

Устанавливаем Grub2 на клонируемый диск
Код: выделить все
ZPOOL_VDEV_NAME_PATH=YES grub2-install --target=x86_64-efi --efi-directory=/boot/efi --force
Выполняется установка для платформы x86_64-efi.
Установка завершена. Ошибок нет.

Обновление конфигурации Grub2
Код: выделить все
ZPOOL_VDEV_NAME_PATH=YES grub2-mkconfig -o /etc/grub2-efi.cfg

Теперь изменим расположение grub.cfg и пересоздадим символическую ссылку /etc/grub2-efi.cfg
Код: выделить все
mv /boot/efi/EFI/fedora/grub.cfg /boot/grub2/grub.cfg
rm /etc/grub2-efi.cfg
ln -s /boot/grub2/grub.cfg /etc/grub2-efi.cfg



При обновлении конфигурации grub2 может вылезать ошибка
Код: выделить все
grub2-mkconfig -o /etc/grub2-efi.cfg
/usr/sbin/grub2-probe: ошибка: не удалось получить канонический путь "/dev/ata-VBOX_HARDDISK_VBf6a8f669-2de5ab43-part2".

Исправление ошибки Grub2 связанной с именами путей устройств пула
Позже нам нужно будет запустить скрипт с именем grub2-mkconfig. Этот скрипт использует команду zpool status для вывода списка компонентов пула. Но когда эти компоненты не являются простыми именами устройств, скрипт завершается ошибкой. Самое простое решение - добавить системную переменную среды. Нужно определить переменную для тек сеанса и создать файл e /etc/profile.d/grub2_zpool_fix.sh с аналогичной строкой:
Код: выделить все
export ZPOOL_VDEV_NAME_PATH=YES



Подготовка системы к перезапуску.
Завершаем chroot, рекурсивно демонтируем файловые системы в каталоге /sysroot и и экспортируем pool zfs из системы
Код: выделить все
exit
umount -R /sysroot (if you have a legacy boot partition)
zfs umount -a
zpool export tank

-a — размонтировать все доступные файловые системы ZFS. Вызывается автоматически как часть процесса выключения.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 12:47



 Замена Grub 2 на systemd-boot 
Grub 2 имеет существенный недостаток применительно к ZFS. Пул собранный с некоторыми опциями довольно плохо воспринимается ZFS-модулем от Grub. Именно по данной причине и производится замена на systemd-boot
Шаг 1.
Удаляем Grub 2
Код: выделить все
dnf remove grubby grub2\* shim\* memtest86\*
rm -rf /boot/grub2 && rm -rf /boot/loader

Шаг 2.
Настройка точки монтирования. Откроем файл /etc/fstab в текстовом редакторе:
e /etc/fstab
Код: выделить все
UUID=69CB-015C  /boot/efi vfat umask=0077,shortname=winnt 0 2

Убедимся, что точка монтирования ESP раздела задана корректно и UUID совпадает с номером EFI-раздела диска-клона
Здесь 69CB-015C — это UUID, который можно определить при помощи blkid. Добавим параметр монтирования umask=0077 (при отсутствии), т.к. файловая система FAT32 не поддерживает права доступа и любой пользователь может вносить любые изменения, что для нас не приемлемо.
Сохраним изменения в файле.

Шаг 3.
Настройка параметров ядра
В данной конфигурации параметры ядра будут указаны в файле /etc/kernel/cmdline в формате обычной строки, разделённые пробелом:
Код: выделить все
cat /proc/cmdline | cut -d ' ' -f 2- | tee /etc/kernel/cmdline && chmod 644 /etc/kernel/cmdline

В данном примере будут автоматически использованы параметры текущего загруженного ядра из /proc/cmdline.
В результате должен получиться файл /etc/kernel/cmdline с подобным содержимым:
Код: выделить все
root=ZFS=tank ro boot=zfs rpool=tank bootfs=tank rhgb quiet

При необходимости внесём соответствующие правки:
Код: выделить все
e /etc/kernel/cmdline

Удаляем файл zpool.cache перед сборкой микроядра системы. В процессе сборки он (если есть) попадает в микроядро системы и препятствует нормальному запуску
Код: выделить все
rm /etc/zfs/zpool.cache

Шаг 4.
Установка systemd-boot на раздел ESP:
Код: выделить все
bootctl --path=/boot/efi install

Инициируем пересборку initrd ядра, а также сгенерируем новые файлы конфигурации:
Код: выделить все
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

Шаг 5.
Перезагрузка системы. Проверим всё ли сделано верно и перезагрузим систему для применения изменений:
Завершаем chroot, рекурсивно демонтируем файловые системы в каталоге /sysroot и и экспортируем pool zfs из системы
Код: выделить все
exit
umount -R /sysroot (if you have a legacy boot partition)
zfs umount -a
zpool export tank
systemctl reboot

Если всё было сделано верно, Fedora успешно загрузится при помощи EFIStub под управлением systemd-boot. В противном случае следует восстановить резервную копию, либо воспользоваться chroot с LiveUSB для решения возникших проблем.


При обрыве запуска системы нужно единожды выполнить импорт пула, из режима восстановления, с параметром "-f" и перезапустить машину
Код: выделить все
zpool import -R /sysroot -f
reboot



Настройка параметров загрузки
Параметры загрузки допускается изменять в файлах
Код: выделить все
/boot/efi/loader/loader.conf
/boot/efi/loader/entries/*


cat /boot/efi/loader/entries/9ec751ae2d584182b2b2c596917bafea-5.4.13-201.fc31.x86_64.conf
Код: выделить все
title      Fedora 31 (Server Edition)
version    5.4.13-201.fc31.x86_64
machine-id 9ec751ae2d584182b2b2c596917bafea
options    root=ZFS=tank ro boot=zfs rpool=tank bootfs=tank rhgb quiet
linux      /9ec751ae2d584182b2b2c596917bafea/5.4.13-201.fc31.x86_64/linux
initrd     /9ec751ae2d584182b2b2c596917bafea/5.4.13-201.fc31.x86_64/initrd

cat /boot/efi/loader/loader.conf
Код: выделить все
timeout 5
#console-mode keep
default 9ec751ae2d584182b2b2c596917bafea-*



При обновлении ядра в системе может не правильно или несвоевременно собираться модули ядра. Данная проблема решается в одну команду, нужно только пересобрать модули ядра под конкретную версию:
Код: выделить все
dkms autoinstall -k 5.4.14-200.fc31.x86_64

подставив номер только что установленного ядра
А так же инициируем пересборку initrd ядра, и сгенерируем новые файлы конфигурации:
Код: выделить все
kernel-install add 5.4.14-200.fc31.x86_64 /lib/modules/5.4.14-200.fc31.x86_64/vmlinuz

Проверить генерацию минимального ядра можно по дате и времени создания файла
Код: выделить все
ll /boot/efi/9ec751ae2d584182b2b2c596917bafea/5.4.14-200.fc31.x86_64/
итого 38M
-rwx------ 1 root root  28M фев  1 18:19 initrd
-rwx------ 1 root root 9,9M фев  1 18:19 linux
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 12:47



 Добавляем в bash_completion zfs 
Код: выделить все
wget -O /etc/bash_completion.d/zfs https://raw.githubusercontent.com/zfsonlinux/zfs/master/contrib/bash_completion.d/zfs
chmod -R  ugo+x /etc/bash_completion.d/zfs
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 05 авг 2024, 17:56



 Автоматизация инсталляции Fedora на ZFS 
Посетите YouTube: OpenZFS Basics, если вы новичок в ZFS.
На github найден скрипт fedora-on-zfs автоматизирующий процесс установки Fedora на файловую систему ZFS. Для работы этого скрипта требуется как минимум два физических диска. Он создаст зеркальный пул файловых систем ZFS на предоставленных дисках, а затем установит Fedora Linux на новый пул (т.е. root на ZFS).
Можно использовать ZFS с одним диском. Однако при обнаружении ошибки ZFS приостановит все операции ввода-вывода на диск, и ваша система зависнет. При использовании нескольких дисков ZFS "самовосстанавливается", получая данные с других дисков, и продолжает работать нормально. Рассмотрите возможность использования Btrfs, если вам не нужна избыточность нескольких дисков или поддержка загрузки системы при отказе диска.
Скрипт получит свежую копию kickstart сценариев с Fedora с https://pagure.io/fedora-kickstarts/tree/main, если репозиторий fedora-kickstarts еще не был клонирован. Другие сценарии кикстартов fedora-disk-*.ks также должны работать, но их выполнение займет больше времени. Альтернативой использованию стандартного кикстарта Fedora Workstation/KDE/ и другие может быть сначала установка Fedora Linux с корнем на ZFS с помощью минимального кикстарта, а затем использование команды типа
Код: выделить все
dnf group install "KDE Plasma Workspaces"

для обновления до одного из больших окружений рабочего стола. Этот сценарий не обязательно запускать из живого образа, но это может быть самым простым вариантом, поскольку типичный живой образ имеет необходимое программное обеспечение (curl, rpm2cpio, gpg, qemu и т. д.).
Этот скрипт настроит Fedora Linux с загрузчиком systemd-boot по умолчанию. Он также создаст раздел ESP в начале каждого физического диска и установит bootsync для их синхронизации. При такой конфигурации можно будет загрузить систему в случае отказа одного из дисков (независимо от того, какой именно диск вышел из строя).
Если вы выберете кикстарт fedora-disk-minimal.ks, вам будет предложено ответить на вопрос, хотите ли вы зашифровать свой домашний каталог и установить скрипт homelock для автоматизации блокировки и разблокировки домашнего каталога при входе и выходе из системы. Если вы ответите "y", скрипт homelock будет добавлен в стек PAM, и он будет использовать ваши учетные данные для входа в систему, чтобы разблокировать ваш домашний каталог. Когда/если вы измените пароль своей учетной записи, вам нужно будет вручную изменить пароль на файловой системе домашнего каталога ZFS, чтобы он соответствовал. Homelock работает только при входе в систему через консоль, поэтому возможность установки скрипта homelock появляется только при использовании кикстарта fedora-disk-minimal.ks. Если вам нужен скрипт homelock и графический интерфейс, вы можете запустить оконный менеджер Sway с консоли (TTY). Вас спросят, хотите ли вы добавить оконный менеджер Sway с дополнительными сценариями для его автозапуска после входа в систему на TTY1, если вы выберете кикстарт fedora-disk-minimal.ks.
Приведу лиши некоторые из доступных вариантов kickstart сценариев:
  • fedora-disk-kde.ks
  • fedora-disk-minimal.ks
  • fedora-disk-server.ks
  • fedora-disk-workstation.ks
  • fedora-kde-common.ks
  • fedora-minimal-common.ks
  • fedora-repo.ks
  • fedora-server-vm-full.ks
  • fedora-workstation-common.ks
Этот скрипт также настроит установленную систему так, чтобы исключить ZFS и ядро Linux из обычного процесса обновления командой dnf update. Это сделано потому, что нередко в Fedora обновления ZFS не работают, когда новые ядра Linux появляются раньше, чем ZFS становится совместимой с ними. Вместо этого пользователю следует использовать zfs-update для обновления ZFS и ядра Fedora Linux. Эти переопределения и скрипты установлены в каталоге /usr/local/bin. Вы можете удалить эти скрипты, чтобы вернуть поведение к прежнему, если захотите.
Примечание: Этот сценарий установки по умолчанию устанавливает предыдущий релиз Fedora Linux. Это сделано намеренно, поскольку может случиться так, что самый новый выпуск будет поставляться с ядром, которое еще не поддерживается ZFS. Все исправления безопасности перенесены в предыдущий релиз. Если вы хотите попробовать самый новый выпуск, вы можете указать номер версии Fedora Linux, которую вы хотите установить, в качестве первого параметра сценария установки. Однако я рекомендую установить предыдущий релиз, а затем выполнить
Код: выделить все
dnf upgrade --refresh
dnf install dnf-plugin-system-upgrade
dnf system-upgrade download --releasever=$(($(rpm -E %fedora) + 1))
dnf system-upgrade reboot

(И сделайте снимок root/0 перед обновлением, чтобы можно было откатить корневую файловую систему в случае, если это не заработает.
Примечание: В этом сценарии установки по умолчанию настроена загрузка UEFI. Если вам нужна традиционная загрузка BIOS, раскомментируйте строку BIOSBOOT='biosboot.ks' в config/evariables.conf.
Примечание: Из-за особенностей работы живых образов Fedora Linux, а также из-за того, что этот скрипт использует QEMU для запуска другого экземпляра ОС Fedora Linux, для его выполнения требуется большой объем оперативной памяти. Если в вашей системе недостаточно оперативной памяти для выполнения этого сценария, вы можете обойти эту проблему, подключив дополнительный USB-накопитель и используя его для создания дополнительной "виртуальной" памяти (swap). Используйте
Код: выделить все
mkswap --force --label swap /dev/sdZ,
чтобы отформатировать USB-устройство как память подкачки. Затем перезагрузите живой образ Fedora Linux и добавьте параметр ядра systemd.swap-extra=/dev/disk/by-label/swap, чтобы активировать его. (Возможно, вы захотите добавить параметр "3" в список параметров ядра, чтобы избежать загрузки полного графического окружения. Последние живые образы Fedora Linux позволят вам войти в систему с правами root и пустым паролем.) Дополнительная память должна быть видна в выводе команды free -m. (Внимание: Добавление памяти подкачки в качестве обходного пути для недостаточной оперативной памяти сделает установку очень медленной!)


Для работы скрипта требуются следующие пакеты:
  • git
  • edk2-ovmf
  • qemu
Тестирование скрипта fedora-on-zfs проводилось на виртуальной машине VirtualBox со следующими характеристиками
  • CPU — 4 core
  • RAM — 8 GB, было увеличено (с 4 GB) дабы избежать слишком медленной работы (если не полного зависания)
  • DISK — 32 GB X 3
С моей конфигурацией установка заняла чуть больше часа. Скрипт запускал не с LiveCD, как говориться в описании к скрипту, а с отдельного диска с установленной Fedora 40. Именно по этой причине в описанной мной конфигурации указано именно три диска. Я посчитал установка из рабочей системы будет менее проблемной чем с Live носителя.


Подготовка системы и запуск скрипта
Сначала установим недостающие пакеты в транзитную систему. У меня не хватало всего трёх пакетов. (при запуске с LiveCD недостающих пакетов быть не должно)
Код: выделить все
dnf install git edk2-ovmf qemu

Или менее затратный по объёму жёсткого диска вариант которого тоже хватает для обеспечения работоспособности скрипта.
Код: выделить все
dnf install git-core qemu-system-x86-core edk2-ovmf

Затем клонируем скрипт с git-репозитория и пробуем его запустить в надежде что он запустится и отработает как нужно.
Примечание: если вы знаете, что конкретное зеркало в вашем регионе лучше/быстрее, чем то, которое dnf может предложить при помощи автоопределения, вы можете попробовать установить переменную FREP в config/evariables.conf, чтобы она указывала на ВАШЕ зеркало.
Код: выделить все
git clone https://github.com/gregory-lee-bartholomew/fedora-on-zfs.git && cd fedora-on-zfs
./install fedora-disk-minimal.ks /dev/sdX /dev/sdY

Установка конкретной версии релиза (например 40)
Код: выделить все
./install 40 fedora-disk-minimal.ks /dev/sdX /dev/sdY
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 432
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron