La tecnología de almacenamiento en
soporte magnético (discos duros) avanza a pasos agigantados y
a la sazón la tecnología SSD y SSD M.2 no anda
rezagada, así que muy pronto los DISCOS se medirán sólo en
Terabytes y el Gigabyte pasará al puesto que le corresponde
entre sus hermanos pequeños: Megabytes, Kilobytes, etc... Con
este panorama, el particionado de discos bajo el esquema MBR (Master Boot Record) está destinado a
desaparecer ya que el límite de direccionamiento de este
esquema es de 2 Tb.
Para sustituir a MBR se creó hace algunos
años el esquema de particionado GPT, el cual, fue descrito como
parte del proyecto UEFI, que como el alumno sabe, sustituye al
firmware embutido en las placas madre de arquitectura x86 y
x86_64 conocido como BIOS. Sin duda, en el futuro sólo se
hablará de UEFI y GPT pero durante el tiempo de tránsito, el
cual se prevee largo, los sysadmin,s tienen que trabajar con
ambas cosas mezclando en las recetas de particionado de discos,
instalación de sistemas e instalación de cargadores de arranque
todos o parte de estos ingredientes.
Esta práctica va a permitir al alumno
adquirir conocimiento y habilidades en el particionado de un
disco bajo el esquema GPT y hacer que desde él, GRUB, pueda iniciar
un sistema GNU/Linux en una máquina con BIOS o UEFI
indistintamente.
Procedimieto
En el USB-HDD del alumno crear y
conectar a la VM deb-
un nuevo disco duro SATA con una capacidad de 1Gb de
tamaño fijo y de nombre gpt-disk.vdi.
Iniciar la vm deb-,
conectarse como root de forma remota
(no usar la consola) y particionar gpt-disk.vdi
como GPT con el esquema de
particiones indicado abajo, todo ello con el comando gdisk (instalarlo si no está
disponible). Antes de proceder, es muy conveniente que se ojeé
con interés y atención la página de manual de este comando.
Formatear las particiones 2 y 3 con el sistema de fichero
adecuado al tipo de partición y por consiguiente a su futuro
contenido:
- La partición 2
acogerá el cargador de arranque que será invocado por
el UEFI. En nuestro caso, ya que vamos a elegir GRUB
como cargador de arranque, en esta partición se
alojará el stage 1 y el 1.5 de GRUB. Esta debe ser
formateada con FAT32
filesystem.
- La partición 3
acogerá el sistema operativo a iniciar , en nuestro
caso un GNU/Linux mínimo. Esta debe ser formateada con ext4 filesystem y
etiquetada con la cadena "minimo".
- La
partición 1 no necesita ser formateada, está
reservada para alojar la pieza core.img
(stage 1.5) de GRUB. Será grub-install
quien se ocupe de ponerla en su sitio. En
presencia de BIOS+GPT grub-install
necesita de esta partición con identificador
de partición EF02.
Llevar a la partición 3 el contenido mínimo necesario para
que arranque GNU/linux, el alumno debe tener en cuenta que
no se pretende llegar a tener un entorno completamente operativo,
sólo deseamos que se inicie el kernel
y el ramdisk sabiendo que cuando acaben
su tarea se entrará en un estado de inconsistencia por
inexistencia del resto del sistema, se vuelve a repetir que
el objetivo de esta práctica es
verificar el funcionamiento de las secuencias
BIOS-->GRUB-->Kernel-linux y UEFI-->GRUB-->Kernel-linux después de
particionar un HD como se ha hecho más arriba.
El alumno pondrá a prueba sus
conocimientos para poblar la partición 3 haciendo uso de
estas indicación: En la
partición 3 sólo necesitamos el material de arranque
propio de un sistema GNU/Linux bajo la estructura de
directorios habitual.
Instalar GRUB en el disco gpt-disk. Para ello se ejecutará el comando grub-install convenientemente
argumentado. Como orientación, se informa al alumno
que debe utilizar los modificadores --boot-directory y --modules. El valor del
primero debe averiguarlo el alumno, el segundo queda asi --modules="ext2 part_gpt".
Modificar manualmente el
archivo de configuración de GRUB
(grub.cfg;
OJO! el de la particion 3 de esta práctica, no el del
sistema deb- del
alumno) para que GRUB
tire del kernel
y el ramdisk
de la partición 3. La modificación de este archivo
supone eliminar las líneas innecesarias o que puedan
provocar colapso en el arranque, de hecho, en el
interior del archivo grub.cfg
debería quedar un pequeño conjunto de instrucciones.
Seguramente el alumno acabará
sabiendo qué tiene que tocar en grub.cfg
iniciando la máquina desde el disco gpt-disk (como
se indica en el siguiente paso) varias veces y
experimentando errores.
Prueba de
arranque BIOS-->GRUB-->Kernel-Linux: Parar
la máquina deb-,
eliminar la conexión del disco deb- para dejar
sólo el disco gpt-disk
e iniciar la máquina. Si todo va
bien, el arranque e inicio del kernel
y el
ramdisk funcionará hasta que aparezca
el prompt
de BusyBox,
lo cual significa que no hay arbol de
directorio de un sistema GNU/Linux y que la
cosa se queda en una shell
auxiliar muy limitada. El prompt
tiene este aspecto: (initramfs)
Terminado con éxito
lo anterior, se da por finalizada la primera
parte de la práctica, a saber, arrancar un
sistema GNU/Linux (limitado a
kernel+ramdisk) en una máquina con
BIOS desde un disco GPT estableciendo como
cargador de arranque GRUB. Queda hacer lo
mismo cambiando BIOS
por UEFI,
algo que haremos a partir de este punto:
Lo primero que el alumno hará
es modificar la máquina virtual para configurarla
con firmware de inicio UEFI, algo que se hace con
el comando VboxManage
modifyvm o desde el
panel gráfico de VirtualBox
activando
la opción Habilitar
EFI
(sólo SO especiales) a la que se llega
siguiendo este camino:
Máquina->Configuración-> Sistema->
Pestaña Placa base.
Arrancar la máquina deb- y observar
el inicio "defectuoso" que se produce. Esto es a
consecuencia de que el disco GPT gpt-disk no está
preparado para recibir el relevo de la UEFI en el
inicio de un sistema operativo.
Modificar de nuevo el firmware
de la máquina a BIOS,conectar
el disco deb-
a la máquina deb-, arrancar el
sistema y hacer login
como root.
Como ya se ha dicho, la
partición 2 debe alojar la parte de GRUB
que será invocada por el UEFI,
así que lo primero que hay que hacer es montarla
para operar sobre ella. No perder de vista que el
caracter especial de esta partición viene dado por
su identificador EF00
(Partición de tipo EFI system).
El comando grub-mkimage
genera una imagen bootable de GRUB,
es decir, la pieza que sustituye a core.img
cuyo nombre es grubx64.efi.
La virtud de este comando es que la
construye a medida de las necesidades, pudiendose
elegir la arquitectura y el procesador (i386,
x86_64, powerpc, amr, sparc, ia64, etc..) así como
los módulos funcionales que introducimos en su
interior, evitando así la carga en tiempo de
ejecución como
ocurre inevitablemente con el esquema MBR. Dicho
esto, el alumno tendrá que hacer dos cosas:
1) Instalar el paquete que
proporciona el stage3 de GRUB
para plataformas hardware X86_64
dotatas de UEFI.
Este paquete en los repositorios Debian se
denomina grub-efi-amd64-bin
2) Crear los
directorios /EFI/BOOT
en la partición 2 y en su interior guardar el
resultado de ejecutar grub-mkimage
de la siguiente manera:
${MOUNTDIR}="direccionamiento
absoluto del directorio donde el alumno ha
montado la partición 2"
grub-mkimage \
-o
${MOUNTDIR}/EFI/BOOT/bootx64.efi \
-d /usr/lib/grub/x86_64-efi \
-p
/efi/boot \
-O x86_64-efi \
fat
\
iso9660 \
part_gpt
\
part_msdos \
normal \
boot \
linux \
configfile \
loopback \
chain \
efifwsetup \
efi_gop \
efi_uga \
ls\
search \
search_label \
search_fs_uuid \
search_fs_file \
gfxterm \
gfxterm_background \
gfxterm_menu \
test
\
all_video \
loadenv \
exfat \
ext2 \
ntfs \
btrfs \
hfsplus \
udf
Ahora toca crear el fichero grub.cfg
que instruya a bootx64.efi,
algo que el alumno
hará de la misma forma que
lo hizo para el arranque
desde BIOS, de hecho puede
utilizar aquel fichero
pero cambiando la
referencia al disco duro
ya que en el caso de de la
pieza bootx64.efi
que se ha creado en el
paso anterior los HD,s
empiezan a numerarse por
1, no por 0.
Verificar que en ${MOUNTDIR}/EFI/BOOT
existen
los archivos bootx64.efi
y grub.cfg.
${MOUNTDIR}="direccionamiento
absoluto del
directorio
donde el
alumno ha
montado la
partición 2"
Apagar la máquina deb-, desconectar el disco
deb-, modificar el firmware
de la placa base a EFI,
arrancar la máquina y rezar para que funcione ;-)