No puedo iniciar correctamente después de mover todos los archivos y volver a colocarlos en mi unidad VM

No puedo iniciar correctamente después de mover todos los archivos y volver a colocarlos en mi unidad VM

He creado una máquina virtual Ubuntu 12.04 de 32 bits en VirtualBox con un disco .vdi. Luego monto este disco con qemu-nbd y muevo todos los archivos; luego de nuevo sobre él. Cuando inicio la VM nuevamente obtengo diferentes resultados:

  1. Ubuntu me dice que ha habido un error y me pregunta si deseo arreglar/omitir/ignorar/arreglar manualmente. Si lo soluciono, se reiniciará y arrancará en un tty. Si lo ignoro, se iniciará en un tty. Todavía no he probado la solución de omisión/manual.
  2. Inicie en una pantalla violeta en blanco. Congelar. En reinicios posteriores, inicie con un cursor de texto parpadeante.
  3. Inicie en la pantalla de inicio de Ubuntu, congele. Al reiniciar, consulte el número 1 en esta lista.

Mi pregunta es: ¿Por qué pasó esto? ¿Hay alguna dirección de hardware de disco en Grub que haga referencia a /boot/? ¿Existe alguna manera de eliminar y reemplazar archivos en el VHD sin tener este problema?

Cómo reproducir este resultado (espero):

  1. Cree una máquina virtual en VirtualBox usando un disco virtual .vdi de 8 GB (llamado ub.vdi, para el resto de la pregunta)
  2. Arranque con la ISO de instalación de Ubuntu 12.04.3 de 32 bits
  3. "Prueba Ubuntu".
  4. Configure una tabla de particiones MSDOS y dos particiones primarias, un espacio de intercambio de 2048 MiB y el resto una partición ext4. (Usado gparted).
  5. Instale Ubuntu en la partición ext4
  6. Apague la máquina virtual
  7. Navegue hasta el directorio de su VM y ejecute el siguiente script:

#!bin/bash
# load the nbd module
sudo modprobe nbd
# make a folder for our virtual disk files
mkdir os_files
# load the virtual disk as a device (nbd0)
sudo qemu-nbd -c /dev/nbd0 ub.vdi
sleep 1
# create a directory and mount the os partition to it
MNT_DIR=$(mktemp -d)
sudo mount /dev/nbd0p2 $MNT_DIR
# move the os files off, then back onto the virtual disk
find $MNT_DIR -maxdepth 1 -mindepth 1 | xargs -I{} sudo mv {} os_files/
find os_files/ -maxdepth 1 -mindepth 1 | xargs -I{} sudo mv {} $MNT_DIR
# clean up
sudo umount $MNT_DIR
sudo qemu-nbd -d /dev/nbd0
rm os_files/ $MNT_DIR -r
unset MNT_DIR

¿Por qué estás haciendo esto?

Como parte de un requisito contractual, necesito almacenar el disco virtual en control de versiones. Tener un enorme blob binario (disco virtual) en el control de versiones es una molestia, principalmente para clone(git)/checkout(svn), pero también para diffs. He considerado dividirlo en varios archivos, pero necesito poder manipular el sistema operativo/los datos extraídos en (5) arriba. Tenga en cuenta que mi repositorio de VCS todavía necesita toda la información necesaria para crear una máquina virtual completa.

Ver también:https://superuser.com/questions/641971/manual-clone-recreate-virtual-disk. Disculpas si publicar nuevamente parece inapropiado/inagradecido/no idiomático/grosero; Las respuestas que recibí en SU, si bien fueron útiles, simplemente carecían de la experiencia necesaria para resolver mi problema. Tenga en cuenta que la pregunta que he hecho aquí es un poco más específica que la vinculada, pero cualquier idea que evite el problema por completo es más que bienvenida.

Respuesta1

El gestor de arranque necesita encontrar algún archivo en un lugar específico. Ubuntu usa Grub como su gestor de arranque predeterminado y Grub contiene un controlador de sistema de archivos que usa para cargar el kernel de Linux, pero Grub necesita encontrar su controlador de sistema de archivos. Además, el

Si intenta recrear la VM desde cero creando un disco en blanco y particionándolo, es aún peor: el disco no contendrá un gestor de arranque.

Como paso de restauración adicional, debe reinstalar el gestor de arranque. Creo que el siguiente comando debería hacerlo (es posible que necesite algunas otras opciones para asegurarse de que Grub incluya los controladores de dispositivo necesarios):

/usr/sbin/grub-install --root-directory="$MNT_DIR" /dev/nbd

y asegúrese de que /boot/grub/device.mapcontenga

(hd0) /dev/nbd

Tenga en cuenta que esto device.mapno funcionará si lo ejecuta grub-installen la VM. Si eso es importante, guarde y restaure device.mapalrededor de la grub-installinvocación o invoque manualmente el comando de bajo nivel que grub-installfinalmente se ejecuta.

Un enfoque alternativo sería configurar su VM con un pequeño disco de arranque que solo contenga el gestor de arranque, que no le importará crear desde cero todo el tiempo (o podría almacenar en caché una copia compilada cada vez que cambie el gestor de arranque, lo que debería suceder). casi nunca).

información relacionada