martes, 22 de septiembre de 2009

Particionando discos desatendidamente....

La mágia de la virtualización me llevo a tener que rebuscarmelas para particionar un disco de forma desatendida, cuando el equipo levanta y sólo la primera vez que levanta la vm (virtual machine), luego de googlear un poco (y gracias a algunos links que me pasaron :D ), logre realizar lo que necesitaba con el siguiente script.

#!/bin/bash

function valid {

if [ $? -eq 0 ];then
return 0
else
exit 1
fi

}

function clean {

#borro links simbolicos y archivo

rm -f /etc/init.d/start_up.sh
rm -f /etc/rc[2-5].d/S15start_up.sh

}

hdc=$(fdisk -l /dev/hdc |grep GB|awk -F"," '{print $2}'|awk '{print $1}')
let hdc_mb=$hdc/1048576
valid
#echo "espacio de particion" $hdc_mb
echo -e "n\np\n1\n\n+${hdc_mb}M\nt\n83\n\np\nw\n" | fdisk /dev/hdc
valid
mkfs.ext3 -q /dev/hdc1
valid
echo "/dev/hdc1 /opt ext3 defaults 0 1" >> /etc/fstab
valid
mount -a
valid
echo "particionamiento ok"
clean


En resumen, siempre mi disco nuevo a particionar era hdc, por eso lo primero que hago es obtener su tamaño en MB , luego uso una tuberia (pipe) para alimentar a fdisk de los comandos necesarios para crear una nueva partición primaria del tamaño total del disco.
Esto es la línea:

echo -e "n\np\n1\n\n+${hdc_mb}M\nt\n83\n\np\nw\n" | fdisk /dev/hdc

Que le pasa:
"n" -- Nueva partición
"\n" -- Enter
"p" -- Partición primaria
"\n" -- Enter
"1" -- Número de la partición
"\n" -- Enter
"\n" -- Enter (en este paso es donde pregunta desde que cilindro del disco, aceptamos el default )
+${hdc_mb}M -- Tamaño en MB
"\n" -- Enter
"t" -- Tipo de partición
"\n" -- Enter
"83" -- Tipo Linux
"\n" -- Enter
"\n" -- Enter
"p" -- Para imprimir la tabla de particiones
"\n" -- Enter
"w" -- Para escribir la tabla de particiones en el disco
"\n" -- Enter


Una vez realizado esto, sólo nos resta darle FS (mkfs.ext3) y agregar la entrada en fstab para que la monte de forma automática cuando se inicie el equipo.

Para finalizar, habrí que copiar este script en /etc/init.d y crear el script de inicio S* para que corra cuando levante el run level configurado.
Esto seria algo como:

Debian)

correr #update-rc.d start_up.sh start 15 2 3 4 5 .

RHEL/Fedora)
crear link simbólico

# for i in 2 3 4 5;do ln -s /etc/init.d/start_up.sh /etc/rc${i}.d/S15start_up.sh;done





En fin, con todo este procedimiento obtuve lo que necesitaba :D

pepo.

No hay comentarios:

Publicar un comentario