OmniCube: Migration à partir de VMware

OmniCube: Migration à partir de VMware

EFit-partners

Mars 2026

Chapter 1
Conversion de VMs VMware vers des zones OmniOS

1.1  Introduction

La migration prend place sur le node hébergeant le zpool migration, soit dia-hc-01 pour le moment. Elle est gérée en grande partie par le script /migration/vmware2omnicube.sh qui doit être exécuté avec les permissions root.
~# /migration/vmware2omnicube.sh -h

Tranfer VMs from VMWARE to /migration/vm_share and/or convert them for OmniCube.

The VM information is retrieved from /migration/vm_info.txt which contains the absolute path of each VM folder
Example
/vmfs/volumes/60784f15-386a5f9e-8fc3-f0921c0c9578/w10jadoma

    /migration/vmware2omnicube.sh -p [NUM_OF_PARALLEL_PROC] -t  # Copy VM VMDKs from vmware
    /migration/vmware2omnicube.sh -p [NUM_OF_PARALLEL_PROC] -c  # Convert VM VMDKs to Omnicube

Comme mentionné dans l'aide du script, l'information de conversion provient du fichier /migration/vm_info.txt dont la structure est la suivante:
| Path de la VM sur le serveur ESX                             | OS   | Port VNC | STATUT |
| ------------------------------------------------------------ | ---- | -------- | ------ |
| /vmfs/volumes/66274c7a-e15629b5-2cc1-5c6f69f89c80/chhpfp     | 2k19 | 6107     | WAIT   |
| /vmfs/volumes/60866e8b-72926fdd-61bb-f0921c0c89a0/chhpftpext | 2k12 | 6119     | -      |
| /vmfs/volumes/6078500b-f17379c4-44dc-f0921c0c9578/chhpflowr  | lnx  | 6108     | DONE   |
| /vmfs/volumes/6079579f-51bd66bb-764e-f0921c0c9578/chhproche  | 2k22 | 6133     | DONE   |
| /vmfs/volumes/67ee48ec-c4e84d09-a408-5c6f69f856f0/chhpxeleris | 2k22 | 6134     | DONE   |

OS:
Le type et la version d'OS provient des informations fournies par les VMware tools.
En cours de conversion, il s'est avéré que cette information ne s'est pas révélée très pertinente, raison pour laquelle, cette information est maintenant retirée pendant le processus de conversion. L'OS ne sert donc plus dans les faits que pour savoir si on migre un Unix (lnx) ou une version quelconque de Windows.
Port VNC:
Le port VNC est défini de manière séquentielle basée sur les ports libres. Un moyen facile, quoique pas entièrement rigoureux, permet de détecter sur chaque node le port libre. Il suffira de prendre le plus élevé.
~$ echo $(($(ps -eaf | perl -nle 'print $1 if /socat\s+TCP-LISTEN:(\d+)/' | sort -r | head -1)+1))
6135

WAIT:
Permet de préparer le fichier sans que l'entrée ne soit traitée par vmware2omnicube.sh
DONE:
La conversion des disques de la VM VMware vers Omnicube est complète
-:
Doit être traitée par le script vmware2omnicube.sh

1.2  Copie des VMDK

VMware limite la bande passante des connexions SSH rendant le passage par ce protocole plutôt inefficace. Il est donc préférable de passer par un partage NFS défini côté Omnicube et monté sur les nodes ESXi. C'est ce qui a été défini sur /migration/vm_share (zpool migration/vm_share).
~$ zfs get mountpoint,primarycache,sharenfs migration/vm_share
NAME                PROPERTY      VALUE                SOURCE
migration/vm_share  mountpoint    /migration/vm_share  default
migration/vm_share  primarycache  none                 local
migration/vm_share  sharenfs      sec=sys,rw           local

vm_share étant utilisé comme un transit, il est important de mettre la propriété primarycache à none pour éviter de polluer l'arc size zfs.
En tête du script vmware2omnicube.sh se trouvent les paramètres qu'il faudra peut-être changer en fonction des besoins
ROOT_DIR:
Répertoire contenant les VMs VMware à migrer (Valeur par défaut: /migration/vm_share)
ROOT_NFS_DIR:
NFS mountpoint du répertoire précédent sur les serveurs ESXi (Valeur par défaut: /vmfs/volumes/NFSDIAHC01)
LOG_FILE:
Log file des copies et conversions (Valeur par défaut: /var/log/migration.log)
TRANSFER_SUFFIX_START:
Nom du répertoire de lock dans le répertoire de la VM VMware quand une copie est lancée (Valeur par défaut: TRANSFER_START)
TRANSFER_SUFFIX_END:
Nom du répertoire de lock dans le répertoire de la VM VMware quand une copie est terminée (Valeur par défaut: TRANSFER_END)
CONVERT_SUFFIX_START:
Nom du répertoire de lock dans le répertoire de la VM VMware quand une conversion est lancée. Il est important de noter que le répertore de la VM VMware dans /migration/vm_share est effacé après la conversion des VMDKs. (Valeur par défaut: CONVERT_START)
VM_INFO_FILE:
Information des VMs à migrer (Cf. Ci-dessus) (Valeur par défaut: /migration/vm_info.txt)
VM_INITIAL_SNAPSHOT:
Nom du snapshot initial créé juste après la conversion des VMDKs (Valeur par défaut: INIT)
ESX_SERVER:
Serveur ESXi sur lequel une connexion SSH sera initialisée pour lancer le processus de copie. Le user utilisé est efit. (Valeur par défaut: mt-esxi-07.chrh.local)
Pour définir préalablement sur ESXi le path absolu de la VM à migrer, le plus facile est de suivre la procédure suivante avec le user root:
~# export SSHPASS=$(cat /root/.sshpass)
~# /opt/omnicube/bin/sshpass -e ssh efitadm@mt-esxi-07.chrh.local
esxi:~#: for vm in [VMWARE_VM_NAME]
do
  VM=${vm}
  for dir in $(ls -lrth /vmfs/volumes/ | awk '/^d/ {print $9}')
  do
    ls -l /vmfs/volumes/${dir} | grep -i ${VM}'$' > /dev/null
    [ $? -eq 0 ] && vm_dir=$(find /vmfs/volumes/${dir} -type d -a -name "*${VM}*") && du -sh ${vm_dir} && break
  done
done 

Pour lancer la copie, ouvrez un screen sous root et éxécutez la commande de copie:
~# screen -d -R
~# /migration/vmware2omnicube.sh -t -p 4

En dehors du screen, le statut de la copie peut être monitoré dans /var/log/migration.log
Si la connexion SSH devait être non fonctionnelle, il faut alors cloner la VM à partir de ESX sur le share NFS ROOT_NFS_DIR défini ci-dessus. Il est important de noter que la phase de conversion des VMDKs s'attend à un nom de VM identique à celui défini sur Omnicube. Si le nom diffère, comme contenant "_clone", ou autre, il faudra alors faire la conversion manuellement.
Déroulé logique de la copie:
  1. Connexion SSH au serveur ESXi
  2. Création du répertoire de la VM VMware sur /migration/vm_share et création dans ce répertoire du lock TRANSFER_SUFFIX_START
  3. Utilisation de l'outil vmkfstools pour cloner la VM VMware sur le share NFS ROOT_NFS_DIR
  4. Création dans ce répertoire du lock TRANSFER_SUFFIX_END

1.3  Conversion

1.3.1  Windows

Le zpool de la zone Omnicube doit être monté sur le serveur qui héberge la migration et la zone doit avoir le statut installed. Le répertoire root/raw doit aussi exister dans la path de la zone. Au besoin, il faudra fixer le recordsize avant la conversion.
~$ pfexec zfs set recordsize=4k zonevm01/zones/zonevm01

Si le processus de copie de l'étape deux s'est terminé correctement, il suffit de d'ouvrir un screen et de lancer la conversion.
~# screen -d -R
~# /migration/vmware2omnicube.sh -t -p 4

Pour rappel, le répertoire de la VM est effacé de /migration/vm_share après la conversion.
S'il faut passer en mode manuel, le processus est le suivant:
Une fois la zone démarrée, il faut s'y connecter pour convertir le bootdisk en UEFI et y ajouter des drivers virtio. Par convention le premier disque (disk0.raw) est le disque de boot. Si sur VMware, un autre disque constitue le disque de boot, il faudra mettre à jour la configuration de la zone sur Omnicube.
~# zlogin -e '#' -C zonevm01

Dans la console SAC, ouvrir un prompt qui donne accès à la console WinPE dans laquelle il faut lancer un powershell:
SAC> cmd
SAC> ch -sn Cmd0001
PS> powershell

Lancer diskpart pour confirmer que le disque doit bien être converti en UEFI. Si une partition FAT32 est visible et qu'il y a une partition nommée System, le disque est déjà converti en UEFI
PS> diskpart
 list disk
 select disk 0
 list part
 exit

Lancer la conversion. En cas d'échec, reportez-vous à la section Issues
PS> mbr2gpt /validate /disk:0
PS> mbr2gpt /convert /disk:0 /allowFullOS

Vérifier que la conversion s'est bien déroulée et lister les volumes accessibles.
PS> diskpart
 list disk
 select disk 0
 list part
 list vol
 exit

Si la partition contenant Windows n'a pas de lettre, il faut l'assigner avec diskpart
PS> diskpart
 list disk
 select disk 0
 list part
 select part 2
 assign letter=D
 exit

Si Windows se trouve sur le volume D, c'est ici qu'on trouve quelle version de Windows est installée
PS> $sys_letter = 'D'
PS> reg load HKLM\OFFLINE_SOFT "${sys_letter}:\Windows\System32\config\SOFTWARE"
PS> reg query "HKLM\OFFLINE_SOFT\Microsoft\Windows NT\CurrentVersion" /v ProductName
PS> reg unload HKLM\OFFLINE_SOFT

Une fois la version identifiée, il faut spécifier win_vers à partir des codes suivants:
2k12:
Windows Server 2012
2k12R2:
Windows Server 2012 Release 2
2k16:
Windows Server 2016
2k19:
Windows Server 2019
2k22:
Windows Server 2022
2k25:
Windows Server 2025
2k3:
Windows Server 2003
2k8:
Windows Server 2008
2k8R2:
Windows Server 2008 Release 2
w10:
Windows 10
w11:
Windows 11
w7:
Windows 7
w8:
Windows 8
w8.1:
Windows 8.1
xp:
Windows XP
PS> $win_vers = 'XXX'

Pour toute version de Windows Server supérieure à 2012r2, utilisez la procédure suivante pour l'injection des drivers virtio:
PS> $drv_letter = 'X'
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\Drivers\viostor\${win_vers}\amd64\viostor.inf
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\Drivers\vioscsi\${win_vers}\amd64\vioscsi.inf
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\Drivers\NetKVM\${win_vers}\amd64\netkvm.inf

Pour Windows 2012 ou 2012R2, utilisez la procédure suivante pour l'injection des drivers virtio:
PS> $drv_letter = 'G' # Lettre du volume contenant les virtio-win-0.1.215
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\viostor\${win_vers}\amd64\viostor.inf
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\vioscsi\${win_vers}\amd64\vioscsi.inf
PS> dism /image:${sys_letter}:\ /add-driver:${drv_letter}:\NetKVM\${win_vers}\amd64\netkvm.inf

Activation de la Special Administration Console (SAC) de Windows:
PS> bcdedit /enum OSLOADER

Configuration du SAC
PS> bcdedit /ems '{default}' on
PS> bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200

Shutdown de la VM sous WinPE
PS> wpeutil shutdown

Quitter la console de la zone OmniOS et retirer le CDROM de la configuration de la zone:
~# zonecfg -z zonevm01 remove attr name=cdrom1 # Uniquement pout Windows 2012(R2)
~# zonecfg -z zonevm01 remove attr name=cdrom0
~# zonecfg -z zonevm01 remove attr name=bootorder

Redémarrer la zone ou la migrer vers une autre node (Cf migration de zone dans manuel d'opérations)

En cas d'échec de la conversion UEFI

PS X:\Windows\System32> mbr2gpt /validate /disk:0
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
Cannot find OS partition(s) for disk 0

La solution consiste à appliquer la procédure suivante:
DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E   DVD_ROM      UDF    CD-ROM       616 MB  Healthy
  Volume 1     C   System Rese  NTFS   Partition    100 MB  Healthy
  Volume 2     D                NTFS   Partition    149 GB  Healthy

DISKPART> exit

Leaving DiskPart...
PS X:\Windows\System32> .\chkdsk.exe D: /f /x
PS D:\Windows\System32> .\Defrag.exe D: /u /v
PS X:\Windows\System32> diskpart
DISKPART> select disk 0
DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Primary            100 MB  1024 KB
  Partition 2    Primary            149 GB   101 MB
DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E   DVD_ROM      UDF    CD-ROM       616 MB  Healthy
  Volume 1     C   System Rese  NTFS   Partition    100 MB  Healthy
  Volume 2     D                NTFS   Partition    149 GB  Healthy

DISKPART> select vol 2

Volume 2 is the selected volume.

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Primary            100 MB  1024 KB
* Partition 2    Primary            149 GB   101 MB
DISKPART> shrink desired=1024

DiskPart successfully shrunk the volume by: 1024 MB

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    Primary            100 MB  1024 KB
* Partition 2    Primary            148 GB   101 MB

DISKPART> create partition primary

DiskPart succeeded in creating the specified partition.

DISKPART> sel par 3

Partition 3 is now the selected partition.

DISKPART> active

DiskPart marked the current partition as active.

DISKPART> format fs=ntfs quick

DISKPART> assign letter=F

DISKPART> exit

PS X:\Windows\System32> .\bcdboot.exe D:\Windows /f all /s F:\
Boot files successfully created.

PS X:\Windows\System32> mbr2gpt /validate /disk:0
MBR2GPT: Attempting to validate disk 0
MBR2GPT: Retrieving layout of disk
MBR2GPT: Validating layout, disk sector size is: 512 bytes
MBR2GPT: Validation completed successfully

1.3.2  Linux

Le zpool de la zone Omnicube doit être monté sur le serveur qui héberge la migration et la zone doit avoir le statut installed. Le répertoire root/raw doit aussi exister dans la path de la ZONE/VM.
Si le processus de copie de l'étape 2 s'est terminé correctement, il suffit de d'ouvrir un screen et de lancer la conversion.
~# screen -d -R
~# /migration/vmware2omnicube.sh -t -p 4

Pour rappel, le répertoire de la VM est effacé de /migration/vm_share après la conversion
S'il faut passer en mode manuel, voilà le processus à suivre:
La migration des zones Linux se déroule grâce à la VM helper linux-mig dont le bootdisk contient tous les outils nécessaires à la migration. Elle utilise une carte réseau physique lui permettant d'avoir accès à Internet, car pour chaque VM convertie, il faudra la plupart du temps télécharger les versions de grub supportant l'UEFI.
Voici un descriptif du helper en question
~$ zoneadm -z linux-mig list -v
ID NAME             STATUS     PATH                           BRAND    IP
 - linux-mig        installed  /zones/linux-mig               bhyve    excl
~$ zonecfg -z linux-mig export 
create -b
set zonepath=/zones/linux-mig
set brand=bhyve
set autoboot=false
set ip-type=exclusive
add net
set physical="efitmig0"
set mac-addr="2:8:20:21:8c:ce"
set global-nic="bge0"
end
add device
set match="/raw/disk0.raw"
end
add attr
set name="bootrom"
set type="string"
set value="BHYVE_RELEASE"
end
add attr
set name="priority"
set type="string"
set value="4"
end
add attr
set name="vnc"
set type="string"
set value="on"
end
add attr
set name="bootdisk"
set type="string"
set value="/raw/disk0.raw"
end
add attr
set name="vcpus"
set type="string"
set value="4"
end
add attr
set name="diskif"
set type="string"
set value="virtio-blk"
end
add attr
set name="ram"
set type="string"
set value="4G"
end
add attr
set name="disk0"
set type="string"
set value="/raw/disk4.raw"
end
add attr
set name="disk1"
set type="string"
set value="/raw/disk5.raw"
end
add attr
set name="disk2"
set type="string"
set value="/raw/disk6.raw"
end

1.3.3  Dérivés de Debian Linux

En grande majorité, les VM Debian Linux ne sont constituées que d'un seul disque et utilisent LVM. La procédure de conversion suit le process suivant:
$# cd /zones/linux-mig/root/raw 
## Déplacer le disque de démarrage de la VM Debian Linux comme disk4.raw
$# mv -i zonevm01-disk0.raw disk4.raw
## Identifier la taille du disque et créer 1 disk5.raw légèrement plus grand
$# ls -lrth disk4.raw
-rw-r--r--   1 root     root        100G Feb 24 19:21 disk4.raw
$# truncate -s 105G disk5.raw
$# ls -lrth disk5.raw
-rw-r--r--   1 root     root        105G Feb 24 19:53 disk5.raw

Le disque disk6.raw est gardé comme disque de réserve pouvant notamment servir comme deuxième disque utilisé par le Volume Group de la VM Debian.
Une fois les disques préparés, on démarre la VM linux-mig et on s'y connecte en console ou en SSH. En console, il n'est pas besoin de spécifier de mot de passePour la connexion SSH, le plus facile est de mettre sa clé SSH publique dans .ssh/authorized_keys du user root.
~# zoneadm -z linux-mig boot && zlogin -e '#' -C linux-mig
...
Debian GNU/Linux 12 rescue ttyS0

rescue login: root
Linux rescue 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Mar  3 00:06:14 CET 2026 from 10.95.11.179 on pts/0
root@rescue:~#

Dans la VM linux-mig (rescue):
Le principe de conversion vise à créer une partition UEFI sur /dev/vdc et de faire des clones de toutes les partitions utiles de /dev/vdb sur /dev/vdc. En cas d'utilisation de LVM, un cycle de reboot sera nécessaire mais pour éviter ce cycle on peut tout aussi bien étendre le VG grâce à une partition sur /dev/vdc et utiliser pvmove pour migrer toutes les données des anciens volumes physiques vers le nouveau. Il suffira alors de faire un vgreduce pour supprimer l'utilisation des anciens. C'est même obligatoire si le VG original est constitué de deux disques. Cloner les partitions et faire un cycle de reboot reste la plupart du temps plus rapide, c'est ce processus qui est décrit ci-dessous:
root@rescue:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vdb3
  VG Name               ubuntu-vg
  PV Size               <99.00 GiB / not usable 0
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              25343
  Free PE               0
  Allocated PE          25343
  PV UUID               YHNE8L-k0AR-wspB-zoaL-Bq64-McFp-UEffR

root@rescue:~# fdisk -l /dev/vdb
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 131072 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: 078D4EF0-67D9-429E-BFAC-A28C9C53E2D1

Device       Start       End   Sectors Size Type
/dev/vdb1     2048      4095      2048   1M BIOS boot
/dev/vdb2     4096   2101247   2097152   1G Linux filesystem
/dev/vdb3  2101248 209713151 207611904  99G Linux filesystem

root@rescue:~# gdisk /dev/vdc
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-220200926, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-220200926, default = 220198911) or {+-}size{KMGTP}: +512M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): L
Type search string, or <Enter> to show all codes: efi
ef00 EFI system partition
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI system partition'

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-220200926, default = 1050624) or {+-}size{KMGTP}:
Last sector (1050624-220200926, default = 220198911) or {+-}size{KMGTP}: +1G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3):
First sector (34-220200926, default = 3147776) or {+-}size{KMGTP}:
Last sector (3147776-220200926, default = 220198911) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): L
Type search string, or <Enter> to show all codes: lvm
8e00 Linux LVM
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Command (? for help): p
Disk /dev/vdc: 220200960 sectors, 105.0 GiB
Sector size (logical/physical): 512/131072 bytes
Disk identifier (GUID): BA2BA3FE-0ACF-44F0-B15F-C69D3ABD0A41
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 220200926
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI system partition
   2         1050624         3147775   1024.0 MiB  8300  Linux filesystem
   3         3147776       220198911   103.5 GiB   8E00  Linux LVM

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/vdc.
The operation has completed successfully.

Clonage des partitions
root@rescue:~# time dd if=/dev/vdb2 of=/dev/vdc2 bs=1M conv=sparse status=progress
1070596096 bytes (1.1 GB, 1021 MiB) copied, 5 s, 214 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.76544 s, 186 MB/s

real	0m5.773s
user	0m0.032s
sys	0m5.245s
root@rescue:~# time dd if=/dev/vdb3 of=/dev/vdc3 bs=1M conv=sparse status=progress
106079191040 bytes (106 GB, 99 GiB) copied, 320 s, 331 MB/s
101373+0 records in
101373+0 records out
106297294848 bytes (106 GB, 99 GiB) copied, 321.819 s, 330 MB/s

real	5m21.836s
user	0m1.682s
sys	3m26.323s

Shutdown, évacuation du disque disk4.raw puis reboot. Cette étape peut être omise en cas d'utilisation de pvmove ou en absence d'utilisation de LVM.
root@rescue:~# shutdown -h now
~# mv -i disk4.raw zonevm01-disk0.raw
~# truncate -s 5G disk4.raw
~# zoneadm -z linux-mig boot && (zlogin -e '#' -C linux-mig ou ssh)

Phase de conversion
root@rescue:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                lcZugF-CvU8-2dr6-mXQq-GNCh-Bcae-2bqX3P
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2023-08-08 10:48:59 +0200
  LV Status              available
  # open                 0
  LV Size                <99.00 GiB
  Current LE             25343
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

root@rescue:~# mkfs.vfat  /dev/vdc1
mkfs.fat 4.2 (2021-01-31)
root@rescue:~# mount /dev/ubuntu-vg/ubuntu-lv /mnt
root@rescue:~# mount /dev/vdc2 /mnt/boot/
root@rescue:~# mkdir  /mnt/boot/efi
root@rescue:~# mount /dev/vdc1 /mnt/boot/efi/
root@rescue:~# for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run
do
  mount -B $i /mnt/$i
done
root@rescue:~# blkid /dev/vdc1
/dev/vdc1: UUID="34D3-FFFD" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="fccf44f5-a235-4c64-ac53-3ac4e1b66a83"
root@rescue:~# chroot /mnt

Vérifier le hostname
root@rescue:/# cat /etc/hostname
zonevm01

Ajouter ou modifier dans configuration grub /etc/default/grub les paramètres suivants:
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Ajouter à /etc/fstab une entrée pour /boot/efi avec les informations extraites ci-dessus:
UUID=34D3-FFFD  /boot/efi       vfat    umask=0077      0       1

Fixer /etc/resolv.conf qui peut s'avérer être un lien symbolique:
root@rescue:~# ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 Aug  8  2023 /etc/resolv.conf -> ../run/resolvconf/resolv.conf

Terminer le processus par l'installation du package grub-efi-amd64 et de grub:
root@rescue:~# apt update
root@rescue:~# apt install grub-efi-amd64
root@rescue:~# grub-install /dev/vdc
Installing for x86_64-efi platform.
Installation finished. No error reported.

Si une erreur se présente, la commande suivante peut résoudre le problème:
root@rescue:~# grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi --no-nvram --removable

root@rescue:~# update-grub
root@rescue:~# exit
root@rescue:~# shutdown -h now

Astuce

À titre d'exemple, voici ce qu' on pourrait faire pour migrer les datas au sein d'un Volume Group LVM nommé PROD
root@rescue:/# pvmove /dev/vdb1 /dev/vdc2
root@rescue:/# vgreduce PROD /dev/vdb1
root@rescue:/# pvmove /dev/vdb2 /dev/vdc2
root@rescue:/# vgreduce PROD /dev/vdb2

Pour les distributions qui ne sont plus supportées, il faut fixer les sources.list et les faire pointer vers archives.
~# echo "deb [trusted=yes] http://archive.debian.org/debian stretch main non-free contrib" > /etc/apt/sources.list
~# echo "deb-src [trusted=yes] http://archive.debian.org/debian stretch main non-free contrib" >> /etc/apt/sources.list
~# echo "deb [trusted=yes] http://archive.debian.org/debian-security stretch/updates main non-free contrib" >> /etc/apt/sources.list

Maintenant que le disque est converti, il suffit de le copier vers son ZFS final.
~# time /usr/gnu/bin/dd if=/zones/linux-mig/root/raw/disk5.raw of=/zones/zonevm01/root/root/raw/disk0.raw bs=1M conv=sparse status=progress
~# zfs set primarycache=metadata zonevm01/zones/zonevm01

Redémarrer la zone ou la migrer vers un autre node (Cf migration de zone dans manuel d'opérations)

1.3.4  Dérivés de RedHAT Linux, autres Linux ou Unix

La plupart de ce qui a été décrit pour Debain reste vrai pour RedHat et les autres, et ce jusqu'à au chroot dans le système proprement dit. Ensuite, il appartient de mimiquer les actions exécutées pour Debinandans le contexte de l'OS concerné.
L'homogénéité des distributions RedHat est bien moindre que pour les Debian. CentOS, Rocky Linux, Redhat, Oracle Linux, ... ont chacune des spécificités en fonction de leur version qui rendraient fastidieux l'exposition des processus pour chacune d'entre elles, et ce y compris pour les BSD.