14 noviembre, 2024

Pendrive booteable a partir de una VM en Alpine con HyperV

Surgió que tenía que entregar una herramienta usable con la mínima interacción con un Linux personalizado desde Windows.


Imagen alucinada por la IA

Pasos para armar Virtual de HyperV

Creo la VM

Configuración:

    HDD = 8 Gb
    RAM = 2048 Mb
    Red = Default switch
    Resto por default
    Unidad de DVD = ISO descargada de https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.2-x86_64.iso

  1. Iniciar VM
  2. Loguear con root sin clave
  3. ejecutar:  setup-alpine
  4. Seleccionar las siguientes opciones en el Wizzard
    1. Teclado / Idioma ➡️ seleccionar el que mas convenga
    2. UTC ➡️ no me interesa zona horaria
    3. eth0
    4. NTP none
    5. Enter mirror default
    6. Clave borradoseguro
    7. Setup user? none
    8. Which ssh server? opnessh ➡️lo uso para pasar el script
    9. Enter ssh key or URL for root? none
    10. Which disk would you like to use? sda
    11. How would you like to use it? sys 
    12. Erase the above disk and continue ? yes
  5. Reiniciar con el comando reboot
  6. Desmontar la unidad DVD
  7. Actualizo paquetes

    • apk update
      apk upgrade
  8.  Instalo paquetes

    • apk add hdparm
      apk add nvme-cli
      apk add bash -> porque esta hecho en bash el script , si no lo tengo que adaptar a ash
      apk add lsblk
      apk add nano

 Configuro autologin

  1. Ejecuto
    • apk add agetty    
  2. Edito  /etc/inittab
  3. Modifico la linea que menciona tty1: con
    • tty1::respawn:/sbin/agetty 38400 --autologin root tty1 linux


Copio script

  1. Veo la ip asignada con
    ip addr
  2. Creo la carpeta
    mkdir /root/script
  3. Conecto por SCP y subo el file (se puede usar el WinSCP)
  4. Logueo como root
  5.  Doy permisos de ejecución al script
    chmod +x borrado_seguro.sh
 

Configuro para que inicie el script al bootear

  1. Creo un archivo
    touch /etc/init.d/myscript
  2. edito el archivo y coloco
  3. #!/sbin/openrc-run
    command="/usr/local/bin/myscript.sh"
    command_background=false
  4. ejecutable el script
    chmod +x /etc/init.d/myscript
  5. Añadir el script al runlevel default:
    rc-update add myscript default
  6. Desactivar networking
    1. Editar    /etc/network/interfaces
    2. Comentar línea con eth0
  7. Quitar OpenSSH

    apk delpenssh

Combino los Snapshot de la VM 

  • Versión GUI

  1. Seleccionar Hyper-V server en Hyper-V Manager
  2. En el panel izquierdo, seleccionar Inspect Disk
  3. Browse to location of restored AVHD/AVHDX files
  4. Seleccionar uno de los archivos AVHD/AVHDX > OK
  5. Grabar el nombre del disco principal
  6. Seleccionar Hyper-V server en Hyper-V Manager
  7. En el panel izquierdo, seleccionar Edit Disk
  8. Next > Seleccionar nuevo archivo AVHD/AVHD
  9. Next > Seleccionar Merge
  10. Next > To the parent virtual hard disk
  11. Finish
  12. Repetir los pasos 7-12 por cada disco AVHD/AVHDX hasta que quede un disco VHD/VHDX unico en la maquina
  13. Montar VHD/VHDX en una nueva maquina virtual en Hyper-V e iniciar


  • Con powershell

Cambiar a la carpeta correcta donde están :

cd <directory path where files are located>
  1. Ejecutar el siguiente comando por cada archivo AVHDX:
    • Get-VHD .\<name of AVHDX file>.avhdx
  2. Anotar el nombre del archivo AVHDX principal de la entrada ParentPath en la salida
  3. Repitir los pasos 2 y 3 hasta que se tenga una lista de todos los archivos AVHDX con sus respectivos archivos AVHDX principales.
  4. A partir del archivo AVHDX más reciente (solo el archivo AVHDX sin archivos secundarios), ejecute el siguiente comando:
    • Merge-VHD -Path '<path to AVHDX>' -DestinationPath '<path to parent AVHDX'
  5. Repita el paso 5 en cada AVHDX, comenzando siempre con el archivo más reciente disponible
  6. Una vez que todos los archivos AVHDX estén consolidados, combine el último AVHDX con el archivo VHDX principal:
    • Merge-VHD -Path '<path to AVHDX>' -DestinationPath '<path to main VHDX disk'
  • Nota: este método requiere que se agreguen los cmdlets Merge-VHD y Get-VHD a su PowerShell; Si no lo tiene agregado, puede recibir el siguiente error:
    • Merge-VHD : El término 'Merge-VHD' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa ejecutable. Verifique la ortografía del nombre o, si se incluyó una ruta, verifique que la ruta sea correcta e inténtelo nuevamente..
    • Si recibe este error, ejecute este comando desde un símbolo del sistema elevado de PowerShell para instalar el cmdlet Merge-VHD:
      • Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell

 

Copiado a un Pendrive

Montar Imagen

Montar el archivo .VHDX con el Administrador de Discos -> Acción -> Exponer VHD -> seleccionar el archivo VHDX

Si no aparece listado en la parte superior seleccionar otro ítem del árbol del panel izquierdo y volver al administrador de disco para que refresque la vista

 

Alternativas

  • Versión Powershell 

En una consola con permisos de Admin

Mount-VHD -Path "Full path of .vhd or .vhdx file"
  • Versión GUI

Desde administrador de Discos

Explorardor de Archivos -> Seleccionar el archivo -> Botón derecho -> Montar

 


 

Clonar disco montado al pendrive con una herramienta como DiskGenius o EasyUS,.

 

Desmontar el VHD 

la VM no corre si esta el VHD Montado


En Powrshell , desde una consola con permisos de Admin

Enumerar los discos con

Get-Disk

 

Desmontar con

Dismount-VHD -DiskNumber #

Donde # va el numero del disco con VHD obtenido de Get-Disk


Referencias

  • https://www.easeus.com/partition-master/vhd-to-physical-disk.html
  • https://wiki.alpinelinux.org/wiki/Configure_Networking
  • https://wiki.alpinelinux.org/wiki/TTY_Autologin
  • https://www.cyberciti.biz/faq/10-alpine-linux-apk-command-examples/
  • https://unix.stackexchange.com/questions/442020/alpine-linux-run-a-startup-script-to-change-the-etc-issuehttps://me.n-able.com/s/article/Merge-differencing-disks-AVHD-AVHDX-to-boot-Hyper-V-machine-after-restoring-to-files-from-Hyper-V-datasource 
  • https://www.elevenforum.com/t/mount-or-unmount-vhd-and-vhdx-file-as-drive-in-windows-11.19177/

0 comments:

Publicar un comentario