[Hibernate] avec zfs zroot rootfs = zroot zfs

Reconnaissance et configuration du matériel / kernel linux
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

[Hibernate] avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

Bonjour

Je souhaite informer ArcheLinux d'un problème avec Hibernate sous zfs avec comme système rootfs zroot zfs.

2 points :

1) Hibernate sous ext4 (UEFI) aucun problème à signaler tout marche.

2) Par contre Hibernate sous zfs zroot il y a un problème au niveau du résume en passage de paramètre au kernel. exemple dans le grub : [ GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet zfs=zroot resume=UUID=f009ca16-96ff-4db4-8759-56cfbbcd5712" ]

Le resume=UUID=UUID de mon SWAP.

Le SWAP n'est pas dans ZFS zroot, mais bien construit dans une partition gpt linux-swap.

Erreur que je constate, le UUID n'est pas reconnu, c'est à dire que le résume démarre avant que le rootfs ne soit démarré. Comme le rootfs de zfs zroot n'a pas démarré avant que le résume fonctionne. la raçine /dev du rootfs n'est pas accessible, ni pour le UUID, et ni pour le device sda, etc...dont du coup le résume de hibernate est perdu.

Voilà pourquoi ça marche sous ext4 et pas en zfs natif zroot en rootfs.

Si vous avez des solutions Je serais heureux de les essayer.

Cordialement
D.Castellacci
laurent85
Elfe
Messages : 960
Inscription : mar. 16 oct. 2018, 21:05

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par laurent85 »

Bonjour,
J'ai fait un test ça marche pour moi. Il doit te manquer quelque chose. Par contre attention avec l'hibernation zfs, il n'y a pas de mécanisme de protection efficace d'un dataset en état d'hibernation. Il faut être très rigoureux, un resume sur un dataset ré importé depuis la précédente hibernation et adieu les données !
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

Bonjour Laurent85

Peux tu me décrire ta configuration
c est a dire si tu as fait
declarer un resume ds le hook mkinitcpio.conf
declarer un resume uuid ds le grub cmd default
creer un swap partition linux swap
declarer ds le fstab le point de montages swap
je n ai pas de dataset
j ai just créé le pool zroot et mis tout mon system racine de dans

Merci de m avoir repondu
Cordialement
D.Castellacci
laurent85
Elfe
Messages : 960
Inscription : mar. 16 oct. 2018, 21:05

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par laurent85 »

J'ai testé l'hibernation avec Arch Linux installé sur un disque usb ssd, ce qui ne devrait pas changer la donne par rapport à un disque interne. J'ai booté dessus et fait un test d'hibernation ainsi qu'un test d'hibernation hybride à partir du menu de déconnexion de l'environnment de bureau Xfce. Les 2 fonctionnent.

Code : Tout sélectionner

% zpool list
NAME        SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot_akx   508G  2.64G   505G        -         -     0%     0%  1.00x    ONLINE  -

% zfs list         
NAME                     USED  AVAIL  REFER  MOUNTPOINT
zroot_akx               2.64G   490G    96K  none
zroot_akx/ROOT          2.54G   490G    96K  none
zroot_akx/ROOT/default  2.54G   490G  2.54G  /
zroot_akx/data          99.9M   490G    96K  none
zroot_akx/data/home     99.3M   490G  99.3M  /home
zroot_akx/data/root      556K   490G   556K  /root

% grep '^HOOK' /etc/mkinitcpio.conf
HOOKS=(base udev microcode autodetect modconf kms keyboard keymap consolefont block zfs resume filesystems)

% cat /etc/fstab         
LABEL=ESP_akx   /boot   vfat   rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro   0   2
UUID=dd4ce6f8-61ed-4a5f-8ed6-b3e029df98c3   none   swap   defaults   0   0

% sudo fdisk -l /dev/sda
Disque /dev/sda : 931,51 GiB, 1000204886016 octets, 1953525168 secteurs
Modèle de disque : PSSD T7 Shield  
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 33553920 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 99C4175B-15CB-439D-B088-A1324CE763C2

Périphérique      Début        Fin   Secteurs Taille Type
/dev/sda1          2048   12584959   12582912     6G Données de base Microsoft
/dev/sda2      12584960 1082132479 1069547520   510G Racine Solaris
/dev/sda3    1082132480 1116948479   34816000  16,6G Partition d'échange Linux

% blkid | grep '^/dev/sda'
/dev/sda2: LABEL="zroot_akx" UUID="16729064511829640028" UUID_SUB="15665764287788905496" BLOCK_SIZE="4096" TYPE="zfs_member" PARTUUID="8719b71d-8acb-4512-a4d3-d87154b10bd1"
/dev/sda3: UUID="dd4ce6f8-61ed-4a5f-8ed6-b3e029df98c3" TYPE="swap" PARTUUID="0a8444ed-f80a-4551-9e54-787dcbf781b9"
/dev/sda1: LABEL_FATBOOT="ESP_akx" LABEL="ESP_akx" UUID="E330-DCC6" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="9a92c6e9-7f04-4290-9858-75de06cff9e7"

% free -h
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:            14Gi       2,7Gi        12Gi        39Mi       353Mi        12Gi
Échange:        16Gi          0B        16Gi
J'utilise systemd-boot par défaut comme boot loader, j'ai essayé avec grub ça fonctionne également.

Code : Tout sélectionner

% cat /boot/loader/entries/archiso-aui-0-x86_64-linux.conf 
title   Archuseriso Xfce (x86_64, UEFI)
sort-key 01
linux   /vmlinuz-linux
initrd  /initramfs-linux-fallback.img
options zfs=zroot_akx/ROOT/default zfs_import_dir=/dev/disk/by-partuuid/8719b71d-8acb-4512-a4d3-d87154b10bd1 zfs_force=1 zfs_boot_only=1 rw resume=UUID=dd4ce6f8-61ed-4a5f-8ed6-b3e029df98c3

% cat /boot/grub/grub.cfg                                 
# Enable serial console
insmod serial
insmod usbserial_common
insmod usbserial_ftdi
insmod usbserial_pl2303
insmod usbserial_usbdebug
if serial --unit=0 --speed=115200; then
    terminal_input --append serial
    terminal_output --append serial
fi

# Get a human readable platform identifier
if [ "${grub_platform}" == 'efi' ]; then
    archiso_platform='UEFI'
    if [ "${grub_cpu}" == 'x86_64' ]; then
        archiso_platform="x64 ${archiso_platform}"
    elif [ "${grub_cpu}" == 'i386' ]; then
        archiso_platform="IA32 ${archiso_platform}"
    else
        archiso_platform="${grub_cpu} ${archiso_platform}"
    fi
elif [ "${grub_platform}" == 'pc' ]; then
    archiso_platform='BIOS'
else
    archiso_platform="${grub_cpu} ${grub_platform}"
fi

# Set default menu entry
default=desktop
timeout=15
timeout_style=menu

# Menu entries

menuentry "Archuseriso Xfce (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'desktop' {
    set gfxpayload=keep
    search --no-floppy --set=root --label ESP_akx
    linux /vmlinuz-linux zfs=zroot_akx/ROOT/default zfs_import_dir=/dev/disk/by-partuuid/8719b71d-8acb-4512-a4d3-d87154b10bd1 zfs_force=1 zfs_boot_only=1 rw resume=UUID=dd4ce6f8-61ed-4a5f-8ed6-b3e029df98c3
    initrd /initramfs-linux-fallback.img
}

if [ "${grub_platform}" == "efi" ]; then
    if [ "${grub_cpu}" == "x86_64" ]; then
        menuentry "Run Memtest86+ (RAM test)" --class memtest86 --class memtest --class gnu --class tool {
            set gfxpayload=800x600,1024x768
            search --fs-uuid --no-floppy --set=root --label ESP_akx
            linux /memtest86+/memtest.efi
        }
        menuentry "UEFI Shell" --class efi {
            search --no-floppy --set=root --label ESP_akx
            chainloader /shellx64.efi
        }
    elif [ "${grub_cpu}" == "i386" ]; then
        menuentry "UEFI Shell" --class efi {
            search --no-floppy --set=root --label ESP_akx
            chainloader /shellia32.efi
        }
    fi

    menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' {
        fwsetup
    }
fi

menuentry "System shutdown" --class shutdown --class poweroff {
    echo "System shutting down..."
    halt
}

menuentry "System restart" --class reboot --class restart {
    echo "System rebooting..."
    reboot
}
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

reBonjour Laurent85

J ai essaye zfs=zroot zfs_force=1 zfs_boot_only=1
Le message d erreur au boot "no pool available to import" n apparait plus

J ai essaye zfs_import_dir= ça ne marche pas chez moi car je n ai pas de dataset.

Peux tu faire un cat de /etc/default/grub
Pour voir les parameters envoye

Merci a toi
Cordialement
D.Castellacci
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

ReBonjour Laurent85


J ai essaye plusieurs fois
J ai essaye zfs_import_dir et la bonne nouvelle
Ça marche

C est grace a zfs_import_dir ça force la lecture en rootfs

Merci Laurent
Cordialement
laurent85
Elfe
Messages : 960
Inscription : mar. 16 oct. 2018, 21:05

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par laurent85 »

Ok 👍
zfs_import_dir permet d'indiquer au hook zfs sur quelle partition se situe le pool zfs à importer.
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

Re: [Hibernate] avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

Sujet Résolu
dcastellacci
Hankyu
Messages : 19
Inscription : mer. 26 janv. 2022, 19:29

[Résolu] Hibernate avec zfs zroot rootfs = zroot zfs

Message par dcastellacci »

Merci a tous
Répondre