Gustavo Sied > Sin categoría > GRUB2 Cómo (4): memdisk y loopback dispositivo
GRUB2 Cómo (4): memdisk y loopback dispositivo
Gustavo
6 febrero, 2014
1. -grub mkimage opciones: – config y – memdisk
Cómo estas dos opciones funcionan? Según la página man:
-c, – config = Archivo
embed archivo como una config temprano
-m, – memdisk = Archivo
insertar un archivo como imagen de memdisk
Así, dos archivos se incrustan en la imagen generada, un archivo de configuración temprana y un archivo memdisk. grub-mkimage se llama generalmente por grub-install, y la imagen generada se quema en el disco duro por grub-bios-setup. Para hacer una prueba para ver lo que sucede por estas dos opciones, necesitamos instalar grub en un disco llamando grub-mkimage y grub-bios-setup directamente sin utilizar grub-install.
tener una memoria USB con la comida en el mismo. Vamos a probar el uso de este usb
$ gdisk. – l / dev / sdc
Número inicial (sector) End (sector) Tamaño Code Name
1 2048 34,815 16.0 MiB partición de arranque EF02 BIOS
2 34816 30233554 14,4 GiB 8300 Linux sistema de ficheros
$ cat embedded.cfg
echo» archivo de configuración integrada en core.img ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡»
sueño-i 60
establecido raíz = hd0, GPT2
set = ($ root) / boot / grub
$ sudo cp core.img / mnt/embed/boot/grub/i386-pc /
$ sudo grub-bios-setup-v – directory = / mnt/embed/boot/grub/i386-pc / dev / sdc
En primer lugar, se muestra el mensaje de eco. En segundo lugar, el prefijo se configura correctamente, y comida de entrar en el modo «normal», ya que se puede encontrar el directorio «/ boot / grub» y módulos de carga. También podemos ver que los dispositivos es «(hd0), (fd0), no hay ningún disco de memoria a ser visualizado. Hasta aquí todo bien.
1.2 – Opción memdisk
Ahora vamos a probar los -. opciones memdisk golpeé en las paredes varias veces al probar este option.Finally, mediante el estudio de cómo funciona otro prisionero guión «grub-mkstandalone», agrego un memdisk a core.img Los puntos clave son los siguientes:. (que no se documentan bien en la documentación oficial)
- la memdisk podría ser un archivo tar. Dentro del archivo tar, usted puede tener lo que nunca directorio que desee. Usted debe Agregar módulo «tar» en su core.img; Pero parece «grub-mkimage» hará eso para usted si usted incluye una memdisk alquitrán;
- la memdisk también podría ser una imagen del sistema de archivos que pueda. hacer una como «mkfs.ext4 ext4.img»;.
- grub-mkimage limitar el tamaño superior de la core.img a 0x78000 (491520 bytes d) Por lo tanto, no se puede simplemente añadir demasiado grande un memdisk en core.img;
- la memdisk está unido a un dispositivo llamado «(memdisk)» dentro de grub
-
# copy algunos archivos de imagen memdisk en
$ mkdir-p memdisk/boot/grub/i386-pc
$ cp / usr/lib/grub/i386-pc/lspci.mod memdisk/boot/grub/i386 -pc /
$ cp / usr/lib/grub/i386-pc/hello.mod memdisk/boot/grub/i386-pc /
memdisk / manifest.txt
$ echo» este es mi archivo txt memdisk -family: Courier New, Courier, espacio sencillo; font-size: x-small; «> memdisk $ cd
$ tar cvf memdisk.tar *
$ cat embedded.cfg
de sueño-i 6
Courier New, Courier, monospace; font-size: x-small;»> prefijo set = ( $ root) / boot / grub
Courier New, Courier, monospace; font-size: x-small;»> $ grub-mkimage-v – config = embedded.cfg – memdisk = memdisk.tar -o core.img-O i386-pc biosdisk part_gpt memdisk ext2 tar sueño echo
$ sudo cp core.img / mnt/embed/boot/grub/i386-pc /
$ sudo grub-bios-setup-v – directory = / mnt / embed / boot / grub / i386-pc / dev / sdc
$ sudo umount / dev/sdc2
Courier New, Courier, monospace; font-size: x-small;»> $ qemu / dev / sdc
Como podemos ver, los primeros trabajos fichero config como antes, y hay una «(memdisk)» como esperamos, en nuestro archivo reside. Podemos cargar el «hola» módulo de memdisk, al igual que cualquier otro disco, a continuación, ejecute el comando «hola». Podemos también cargamos módulo de «lspci» y hacer un «lspci». En todos los casos, un memdisk sólo comportarse como cualquier otro disco.
En un memdisk, podemos adjuntar algunos archivos pequeños, módulos de prisioneros, en un core.img. Aunque con límite de tamaño impuesto por grub-mkimage, esta característica es ordenada cuando queremos agrupar el archivo de configuración, los módulos con núcleo de comida, y no depende de ningún disco almacenamiento / partición a utilizar un shell de grub funcional.
En
plataforma UEFI, grub-mkimage no plantear un límite en el tamaño de memdisk. Si lo desea, puede tener la imagen incluye todo binario grub. O al extremo, puede incluir una ISO de instalación de un archivo de la memdisk. Cuando GRUB arranque, se comenzará la instalación. Pero como convite UEFI gestor de arranque como una aplicación normal. Instalación de Grub es sólo copiar imagen de grub en el sistema de archivo de ESP. No tiene mucho sentido para incrustar un disco mem grande en grub. Usted puede copiar fácilmente cualquier archivos en pesetas o en otros sistemas de archivos, y la comida se puede acceder a ellos fácilmente. el «grub-mkstandalone «El guión que podría ayudar en esto:
NOMBRE grub-mkstandalone
– hacer una imagen basada en GRUB memdisk un
SINOPSIS
grub-mkstandalone [OPTION] FUENTE …
donde origen es el directorio lib de grub, como» / usr/lib/grub/x86_64-efi – opción O «.
grub-mkstandalone-O-x86_64 efi-o grub.standalone.efi
ll grub.standalone.efi
-rw-rw-r – 1 luke luke 2339328 6 月 30 19:52 grub.standalone.efi
sudo cp grub.standalone.efi / boot / efi / EFI / ubuntu /
A continuación, reinicie la máquina UEFI, arrancar esta imagen de grub autónomo, verá lo siguiente:
Todos los módulos de prisioneros están en «(memdisk)», de la raíz / prefijo que se haya ajustado para que apunte a (memdisk).
2. dispositivo de bucle de retorno
Según el manual Grub «, GRUB es capaz de leer de una imagen (ya sea uno de CD o disco duro) almacenado en cualquiera de sus almacenes accesibles». La imagen puede ser un archivo ISO, una imagen del disco duro con particiones en él, y una partición de disco con sistema de archivos en el mismo. Tratemos todos estos casos. En caso de grub cargar los módulos relacionados, es decir, módulo de mapa de particiones , los módulos del sistema de archivos, loopback puede manejar todos estos casos
# una imagen del sistema de archivos
$ fallocate-l ; 2097152 ext4.img
$ mkfs.ext4 ext4.img
$ file ext4.img
ext4.img: Linux rev 1.0 Datos del sistema de archivos ext4, UUID = c142e07a-ff62-4278-B574-3481776f587b (extensiones) (archivos grandes)
$ sudo ext4.img mount-o loop / mnt / loop
$ sudo touch / mnt/loop/ext4file.txt
$ sudo umount / mnt / loop
$ file ext4.img
style=»font-family: Courier New, Courier, monospace; font-size: x-small;»> N º de imagen de un disco duro
$ fdisk-l disk.img
Bloques Dispositivo Inicio Comienzo Fin Id Sistema
disk.img1 2048 22527 10240 c W95 FAT32 (LBA)
disk.img2 22528 40959 9216 83 Linux
# un archivo iso
$ xorriso -diálogo en
outdev test.iso
mapa / boot / grub /
commit
end
=========== ================================================== =
continuación copiamos todos estos archivos en el disco de rescate de grub, y arrancar desde el disco de rescate grub.
$ sudo cp disk.img ext4.img test.iso / mnt / usb / images /
$ qemu / dev / sdd
Al montar un archivo ISO en Grub, la mayoría de las veces que desee instalar un sistema operativo de la ISO. ; Vamos a ir a través de un proceso de instalación rápido de Ubuntu con muchas ganas (13.04) bajo dicha configuración, sin explicar muchos «por qué / cómo» lo haré otro post para explicar la magia de Ubuntu live / instalar iso y la interacción entre ellos. comida, bios, UEFI, kernel linux, isolinux, syslinux, disco ram de inicio, etc Por ahora, vamos a empezar.
puedo copiar una ISO de Ubuntu en el disco de rescate usb comida, el nombre ubuntu.iso. Luego de bucle invertido esta ISO en un dispositivo llamado «(ubuntu)». Entonces me puse a raíz (ubuntu) y luego arrancar el kernel linux en iso, con algunos parámetros mágicos enviados al kernel. Después de eso , los fuegos del proceso de instalación y todo funciona como encanto.
3. ISOLINUX memdisk
Hay un módulo llamado «memdisk» en isolinux, y puede ser integrado en grub para simular un dispositivo de bloque se utiliza la memoria. En Ubuntu, memdisk en el paquete «-syslinux común». Tanto memdisk comida y loopback simula un dispositivo de bloques utilizando la memoria y archivo plano respectivamente. En este sentido, memdisk isolinux es similar a memdisk de comida y la utilidad de bucle invertido. Pero la implementación de memdisk isolinux es totalmente diferente de la de prisioneros, y es fundamental para entender esta diferencia para usarlos correctamente.
3.1 Antecedentes
Para entender cómo estos utils trabajo, necesitamos un poco de información básica acerca de cómo dispositivo de bloques visita Grub en forma de disco y CD-ROM Este proceso consiste en capas de abstracción, como se ilustra a continuación:.
Todos los nodos inherit;»> style=»FONT-FAMILY:
ISOLINUX memdisk (isomemdisk). es una historia totalmente diferente. Para comida, isomemdisk comporta como un núcleo, y GRUB puede cargar en la memoria usando «linux16». Grub también utilizan «initrd16» para cargar la imagen de disco o archivos ISO en la memoria. Grub a continuación, utilice «boot» para transferir el control a isomemdisk. Después de hacerse con el control, isomemdisk interceptará la BIOS para «int 13h/15h.» Si se decide que la visita de disco es el dispositivo que está emulando, (disco duro o iso), se volverá a dirigir el tráfico a la imagen en la memoria. isomemdisk hace el código de cambios en el BIOS interrumpe manipulador. Después isomemdisk ha terminado el mapeo y la llamada a la BIOS intercepción, será chainloder en el disco duro o emulado cdrom, y transferir el control fuera. El arranque OS va a vivir en un ambiente ajustado, si se siguen utilizando de BIOS INT 13/15 para visitar dispositivo de bloques en forma de disco duro o CD-ROM, y el sistema operativo todavía se puede ver el disco emulado por isomemdisk. El ajustar el efecto es ilustrado por el diagrama a continuación.
Si OS optan por utilizar el disco visita directamente, ya que la mayoría OS lo hace hoy en día, no se siente la existencia de isomemdisk, y todos teh disco emulado no estará disponible.
Esta es la razón por isomemdisk sólo funciona en entorno BIOS, y sólo si el sistema operativo con botas siguen optando por usar bios 13/15 llamada a visitar dispositivo de bloques.
Para ayudarle a entender los conceptos, voy a cocinar estudio de caso artificial . Quiero instalar WinXP en mi computadora. Tengo un archivo ISO de instalación de WinXP, pero yo no tengo un cd-rom. Así que quiero copiar este iso en una memoria USB, y arrancar desde una memoria usb utiliza grub, emular un dispositivo de CD-ROM en comida, y luego chainloader a este dispositivo emulado para comenzar el proceso de instalación en sí Grub no pudo lograr este objetivo, porque:.
- Grub no soporta chainloader de CD-ROM;
- dispositivo memdisk / bucle invertido de Grub se desvanecerá el control preciso momento se transfiere al instalador OS Si instalador SO necesita para acceder a la simulación de cd-rom. copiar más archivos, se producirá un error.
Ahí es donde ISOLINUX memdisk podría ayudar. Puede cargar en cadena cd-rom. Si el instalador OS decidan seguir utilizando bios acceder cdrom, el cd-rom emulado todavía estará allí. Pero lo que si OS deciden acceder al disco directamente después de su controlador de disco se ha cargado y bios de bypass?
3.2 Estudio de caso: Instalar Windows XP desde archivos ISO en memorias USB
instalador de Windows XP no es un muy flexible software. No está diseñado para ser flexible. Se asumirá que el medio de instalación se encuentra en el CD-ROM, o se quejará. WinXP no soporta GPT, sólo la tabla de particiones MBR. WinXP no se puede instalar en . dispositivo usb, sólo en el disco duro interno
El instalador de XP hace la instalación a través de los siguientes pasos:
- El control se transfiere al código de arranque en el cd-rom;
- copia el código de arranque controladores de dispositivos necesarios de CD-ROM en la memoria, mediante una llamada a la BIOS.
código de arranque
- también le dan la opción de cargar tercero controlador de dispositivo de disco adicional desde un disquete, a través de la BIOS, si el usuario elige a Sólo desde un disquete, en ninguna otra parte;.
- Una vez cargados los controladores de dispositivos necesarios, instalador visitará disco cd-rom/hard directamente, sin pasar por bios.
- copia instalador más archivos del CD-ROM en el disco duro donde se elige instalar winxp;
archivos
- copiados, instalador parpadeará un MBR / VBR en discos duros y particiones correspondiente, y la máquina de reinicio;
- máquina se reiniciará en el entorno de instalación de win32, y estableció continúa Aún podría optar por leer algunos archivos extra de cd-rom, en función de los scripts de instalación,..
- instalación llegue a su fin, y XP está listo
Durante este proceso, el paso 4 es crítica. ¿Cómo podemos todavía proporcionar acceso cd-rom para el instalador después de pasar lejos de bios y utilizar su propio conductor, la respuesta consiste en proporcionar un controlador adicional para el instalador en el paso 3. Este conductor, cargador por el instalador, verificará el medio ambiente. Si se encuentra la existencia de memdisk ISO en el código de la BIOS y en la memoria, se simuló un nuevo CD-ROM con la información obtenida de memdisk, y dejar que el instalador siga utilizando el cd-rom. Un conductor llamado «winvblock» puede hacer este truco. descargo uno de aquí. El archivo descargado es una imagen de disquete, exactamente el formato que quiero. Me montar esta imagen a mi máquina virtual como mi disco. Desde VMware no soporta el arranque desde USB, agregaremos nuestra USB como un disco duro (dev / sdc) .
carga />
«memdisk» como núcleo y WinXP.ISO imagen como initrd, entonces arranque.
Al arranque de la instalación, pulse F6 para seleccionar controlador de disco extra:
Después de los archivos copiados en el disco duro, el sistema se reiniciará. En este momento, otra cuestión se plantea. Debido a que la instalación desde un usb disco duro, éste se asigna usb driver «C:», y el instalado en el disco duro es conductor «d». Trato grub «drivemap» de comandos, pero no funciona Xp instalador parpadeará en mbr. nuestro disco usb, copia vbr en la partición de disco USB, y copiar los archivos de arranque relacionados en el mismo. Estos archivos de arranque incluyen «boot.ini, ntldr, ntdetect.com, Bootfont.bin.» Todos los archivos de la izquierda se copian en el otro disco disco. En teoría, tal configuración debería funcionar, porque en boot.ini, el disco de arranque está configurado para el segundo disco duro. Por la razón que sea, no funciona en la estación de trabajo de VMware. Así que hice un truco para migrar estos archivos de arranque en el segundo disco duro:
# / dev / sdc es el usb, / dev/sda7 es la partición de hardware que se utiliza para simular otro disco en VMware
# trasplante mbr
sudo dd if = / dev / sdc of = / dev / sda7 bs = 446 count = 1
# cambio boot.ini de
[boot loader]
timeout = 1
default = firma (152a4bf6) disk (0) rdisk (0) partition (1) WINDOWS
[sistemas operativos]
firma (152a4bf6) disk (0) rdisk (0) partition (1) WINDOWS = «Microsoft Windows XP Professional «/ noexecute = optin / fastdetect
# para
[boot loader]
timeout = 1
default = multi (0) disk (0) rdisk (0) partition (1) WINDOWS
[operating systems]
multi (0) disk (0) rdisk (0) partition (1) WINDOWS =» Microsoft Windows XP Professional «/ noexecute = optin / fastdetect
# cp todos los archivos de arranque de sdc1 a otros discos
cp boot.ini Bootfont.bin ntldr ntdetect.com / mnt/sda11
# cuando arranque xp de nuevo, que todavía tienen que . acceso al CD-ROM para copiar más archivos de modo que extraer todos los archivos de la iso en el disco duro Cuando se le pida ruta cd-rom, sólo tiene que utilizar. «c: cdrom i386»
mkdir-p / mnt/sda11/cdrom
cp / mnt / loop / * / mnt/sda11/cdrom /
Ahora, retire el disquete, memoria USB de VMware, y la máquina arranque nuevamente.
Después de todas estas servidumbres, el instalador xp finalmente termina su trabajo y tenemos un XP funcional.