¿Cómo crear un disco de arranque con Linux en el terminal?
Información basada en kali
dd
Este programa permite copiar exactamente la información desde un archivo –.iso
en nuestro caso– a un disco/memoria. Suponiendo que se ha descargado una imagen que llamaremos linux.iso
, por otro lado tendremos una memoria USB. Cuando se intruduce la mencionada memoria en un USB libre el sistema Linux una forma de saber el pseudo archivo que le asigna el sistema es mediante el siguiente comando.
dmesg | tail
El comando mostrará los últimos eventos del sistema, entre ellos se observará uno que indica la introducción de la memoria y su asignación. La línea hará mención de algo del timpo sdb o sdc, aunque la última letra podría variar dependiendo del número de discos/memorias ya conectadas.
Con esa información ahora procederemos a copiar el fichero en la memoria USB. Hay que tener precaución y estar seguro que nombre asignó Linux a nuestra memoria (sbx). Si se ejecuta el siguiente comando contra el disco duro que contiene el sistema de arranque la información se perderá. En el comando siguiente se supondrá que la memoria USB se encuentra en /dev/sdc
.
sudo dd if=linux.iso of=/dev/sdc bs=512k
El proceso tardará cierto tiempo, dependiendo del tamaño de la imagen linux.iso
, pero el comando no devolverá ninguna salida hasta que termine, habrá pues que tener paciencia.
Aprovechamiento de espacio adicional
Siguiendo el proceso anterior ya sería suficiente para crear un disco de arranque, pero quedaría espacio perdido en la memoria. En este apartado se mostrará como hacer para poder usarlo.
Mediante el siguiente comando veremos el estado inicial de la memoria, suponiendo como antes que esta se encuenta asignada a /dev/sdc
.
sudo fdisk -l /dev/sdc
Disk /dev/sdc: 14.9 GiB, 16008609792 bytes, 31266816 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0c7b9850
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 64 5570559 5570496 2.7G 17 Hidden HPFS/NTFS
/dev/sdc2 5570560 5752895 182336 89M 1 FAT12
Como se puede ver en la salida del comando observamos que la memoria tiene una capacidad de 14.9 GB pero las particiones apenas emplean 3GB. Para recuperar los gigas perdidos haremos lo siguiente.
Primero veremos cuanto ocupa la imagen que hemos grabado con dd
y la pasaremos a una variable del sistema que llamaremos inicio.
read inicio _ < <(du -bcm linux.iso | tail -1)
Ahora crearemos una variable con la capacidad final que tiene la memoria, en ejemplo diremos que es 14GB, pero si fuese mayor o menor deberemos modificar el valor.
export fin=14gb
Finalmente invocamdos a parted
para que genere la nueva partición. Será necesario resonder Yes e Ignore.
sudo parted /dev/sdc mkpart primary $inicio $fin
Warning: You requested a partition from 2810MB to 14.0GB (sectors 5488281..27343750).
The closest location we can manage is 2945MB to 14.0GB (sectors 5752896..27343750).
Is this still acceptable to you?
Yes/No? Yes
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
Information: You may need to update /etc/fstab.
Una vez terminado lo anterior ahora habrá que dar formato a la nueva partición, para ello haremos lo siguiente –La parte de ‘-L memoria’ es una etiqueta, es opcional y se puede cambiar–.
sudo mkfs.ext3 -L memoria /dev/sdc3
Otra forma de darle una etiqueta es mediante e2label
.
e2label /dev/sdc3 persistence
Verificación
Podremos comprobar si los cambios anteriores han surtido efecto mediante el siguiente comando.
sudo fdisk -l /dev/sdc
Disk /dev/sdc: 14.9 GiB, 16008609792 bytes, 31266816 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0c7b9850
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 64 5570559 5570496 2.7G 17 Hidden HPFS/NTFS
/dev/sdc2 5570560 5752895 182336 89M 1 FAT12
/dev/sdc3 5752896 27343750 21590855 10.3G 83 Linux
Cifrado
En caso de que deseemos cifrar el contenido de la partición mediante una contraseña, una vez creada la partición y antes de darle formato –esto es: inmediatamente despues de ejecutar parted
– debemos ejecutar el siguiente comando.
sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/sdc3
Nota: Suponemos que la partición a encriptar está en /dev/sdc3
y que cryptsetup está instalado, de no estarlo instalarlo con sudo apt-get install cryptsetup
Debian y con sudo yum install cryptsetup
en CentOS.
Tras ejecutar el comando anterior se nos pedirá la contraseña dos veces para verificar que es la misma.
El siguiente paso es abrir el canal cifrado en la partición mediante LUKS, para ello hacemos lo siguiente –miUSB es el nombre que hemos seleccionado pero valdría cualquier otro–:
sudo cryptsetup luksOpen /dev/sdb3 miUSB
Ahora creamos una partición de tipo ext3.
sudo mkfs.ext3 -L memoria_usb /dev/mapper/miUSB
Lo etiquetamos.
sudo e2label /dev/mapper/miUSB memoria_usb
Mediante los siguientes crearemos un directorio en /mnt/miUSB
, montamos la unidad y la desmontamos. Si queremos añadir algún michero o directorio el momento será después de montarlo.
sudo mkdir -p /mnt/miUSB
sudo mount /dev/mapper/miUSB /mnt/miUSB
sudo umount /dev/mapper/miUSB
Finalmente cerramos el canal cifrado con el comando siguiente:
sudo cryptsetup luksClose /dev/mapper/miUSB