dimarts, 10 de juliol del 2007

Gparted-clonezilla a un dic usb d'arrancada per clonar discos.

Motivació
Poder fer còpies senceres (imatges) de discos de sistema dels servidors em resulta útil i pense que és una bona manera de fer còpies de seguretat dels sistemes (no de les dades). Em permet restaurar de nou el sistema front una fallada greu de disc.
Per diverses raons, que ara no vaig a comentar, ja fa temps que vaig muntar amb el BartPE un disc usb de 500GB que vaig fer d'arrancada i a més em permitia fer-ne les còpies. Cal comentar que per poder fer imatges de disc, li vaig instal·lar al sistema la utilitat ghost32.exe.
Aparentment era una bona solució, fins que me'n vaig adonar que, cada vegada que volia posar-li al BartPE un controlador per a alguna determinada targeta RAID que portava la placa base o que havíem comprat, era un treball prou costós. La solució: buscar un sistema per fer imatges de disc basat amb GNU/Linux, que com és habitual, simplifica molt les solucions :-)


Objectiu
Crear un disc usb d'arrancada i instal·lar-hi la gparted-clonezilla per poder crear imatges (clons) de discos.

Requeriments

GNU/Linux

Disc USB d'almenys 1 GB per poder-hi instal·lar la iso. En el nostre cas, com que volem aprofitar el dics per guardar-hi les imatges, anem a fer-ho amb un disc usb de 500 GB.
Iso del gparted-clonezilla

Com fer-ho.

Baixem la iso gparted-clonezilla
Inserim el disc USB i el muntem. En el nostre cas el muntem a /media/BOOT-USB.

Partim el disc: una partició de 600 MB per instal·lar-hi el sistema i la resta per guardar-hi les imatges.

Muntem la iso a un directori del nostre GNU/Linux


# mkdir /mnt/loop
# mount -t iso9660 -o loop gparted-clonezilla-2.0.iso /mnt/loop
$ cp -riv /mnt/loop/* /media/BOOT-USB/



3.- instal·le grub al disc usb
Per tal de no equivocar-nos de dispositiu, cosa que podria ser catastròfica, cree un fitxer al disc on vull instal·lar el grub el qual en servirà per verificar que estic al disc correcte.

$ touch /media/BOOT-USB/boot/grub/mau.txt

Comence amb el procés d'instal·lació del grub
1.- Mire els discos i particions que hi ha acutualment al sistema

$ fdisk -l

Que mostra les particions dels discos del sistema que han sigut muntats per l'usuari actual. Observar que cal llançar esta ordre doncs com a un usuari sense privilegis. En el nostre cas el resultat és:


Dispositiu Arrenc.   Comença       Acaba    Blocs    Id  Sistema
/dev/sda1 * 1 128 1028128+ 6 FAT16
/dev/sda2 129 30401 243167872+ 7 HPFS/NTFS


Amb la qual cosa tenim que cal instal·lar el grub al disc (hd0,0) segons la nomenclatura de grub.

Procedim doncs a la instal·lació:



$ grub
grub> find /boot/grub/stage1
(hd0,0)


Efectivament el grub anomena la partició sda1 com a (hd0,0).
Seguidament ens ajudem del fitxer creat abans per verificar que es tracta de la nostra primera partició del disc usb on volem fer la instal·lació




grub> find (hd0,0)/boot/grub/ma[tab]
grub> find (hd0,0)/boot/grub/mau.txt


Hem trobat el fitxer, per tant anem pel bon camí...
Instal·lem doncs el grub:




grub> root (hd0,0)
grub> setup (hd0)

Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/fat_stage1_5" exists... yes
Running "embed /boot/grub/fat_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded

Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded

Done.
grub> quit


Tot ha anat perfectament, Ja està instal·lat el grub
Algunes modificacions sobre el menu.lst del grub.
Ara, com que es tracta d'un disc usb i hem afegit una iso pensada per arrancar un CD cal fer uns canvis al menu.lst del grub. Eixos canvis consisteixen en modificar el parametre cdroot per cdroot=/dev/sda1 , on sda1 és la partició del disc usb on es troba instal·lat el gparted-clonezilla.

Afegim al menú del grub l'opció d'arrancada de l'anterior SO (BartPE)


$ vi /media/BOOT-USB/boot/grub/menu.lst


i afegim les línies següents:

title=BartPE - WinXP
chainloader +1

Personalització del gparted

A més, la versió original de l'inici del gparted durant l'arranc, ens pregunta el tipus de teclat que tenim i l'idioma per defecte. Hem considerat que podem afegir eixos valors al grub i així eixes preguntes no ens les fa.

Per tal d'aconseguir que des del grub es configure els valors per al tipus de teclat i l'idioma cal modificar el menu.lst i ademés el fitxer de ramdisk gparted.igz

Modificar el menu.lst en totes aquelles entrades que engeguen el kernel /boot/gparted

Hem eliminat el paràmetre que força al procés d'inici que pregunte a l'usuari per la configuració del teclat i l'idioma:




dokeymap


i afegit dos paràmetres que ho configuren automàticament



setkmap=es





setlang=ca_ES


Per a què estos dos paràmetres funcionen cal modificar l'script linuxrc del ramdisk gparted.igz tal i com s'explica al final.

Modificació del linuxrc per a que contemple els paràmetres setkmap i setlang:

1.- extraure el ramdisk




$cd /tmp
$cp /ruta/a/iso/muntada/boot/gparted.igz /tmp



Confirmem que es un gz




$ file gparted.igz

gparted.igz: gzip compressed data, was "initramfs-2.6.21-gentoo-r2", from Unix, last modified: Tue Jun 26 19:55:42 2007, max compression

$ gunzip -S .igz gparted.igz
$ mkdir -p /tmp/ramdisk
$ cd ramdisk



Mirem el format de gparted



$ file /tmp/gparted
gparted: ASCII cpio archive (SVR4 with no CRC)

Extracció del gparted:




$ cpio -i < ../gparted


Una vegada extret el ramfs gparted, cal realitzar unes moficcacions a l'script d'inici per a què contemple els nous paràmetres (setkmap i setlang) que hem afegit al procés d'arrancada (menu.lst) amb l'objectiu de personalitzar el teclat i idioma del sistema.

Cal doncs editar el linuxrc i afegir:



vi linuxrc



Les modificacions van a consistir en afegir la següent funció per configurar l'idioma:





gparted_setup_Language()
{
if [ ! -z $SETLANG ]
then # "setlang=xx" option was used
export LC_ALL="${SETLANG}"
else # Choose language
gparted_chooseLanguage
fi
}



i modificar la funció gparted_setup_keymap() per a que cride la nova funció. Simplement cal afegir, just abans de la clau de tancada de la funció gparted_setup_keymap(), la següent línia:






gparted_setup_Language


La funció gparted_setup_keymap() queda doncs de la següent manera:





gparted_setup_keymap()
{
if [ ! -z $SETKMAP ]
then # "setkmap=xx" option was used
gparted_useKeymap $SETKMAP
else # check for "dokeymap" option
if [ "${DO_keymap}" ]
then
if [ ! -e /dev/vc/0 -a ! -e /dev/tty0 ]
then
DEVBIND=1
mount -o bind ${NEW_ROOT}/dev /dev
fi
[ ! -e /dev/tty0 ] && ln -s /dev/tty1 /dev/tty0

gparted_chooseKeymap

[ "${DEVBIND}" -eq '1' ] && umount /dev
fi
fi

if [ -e /etc/sysconfig/keyboard -a "${CDROOT}" -eq '1' ]
then
mkdir -p ${NEW_ROOT}/etc/sysconfig/
cp /etc/sysconfig/keyboard ${NEW_ROOT}/etc/sysconfig/keyboard
fi

gparted_setup_Language
}




Per què funcione el paràmetre setlang, finalment cal afegir al bucle que analitza els paràmetres passats al kernel les següents línies de codi:




     setlang\=*)
SETLANG=`parse_opt "${x}"`
;;



dins el bucle




CMDLINE="`cat /proc/cmdline`"
# Scan CMDLINE for any specified real_root= or cdroot arguments
REAL_ROOT=''
FAKE_ROOT=''
for x in ${CMDLINE}
do
case "${x}" in
...
setlang\=*)
SETLANG=`parse_opt "${x}"`
;;
...



Una vegada modificat el fitxer linuxrc, cal tornar a empaquetar el ramdisk amb el mateix format que l'original




$ cd /tmp/ramdisk
$ find ./ -name "*" -print | cpio --create --format=newc -O ../gparted
$ cd ..
$ gzip -S .igz gparted


i finalment copiem el nou gparted.igz al disc usb




$ cp gaparted.igz /media/BOOT-USB/boot/
$ umount /media/BOOT-USB


Personalització del clonezilla

Objectius

Configurar el teclat/idioma específic que ens interessa i evitar així que sen's pregunte durant l'arrancada.

Com es fa

1.- Editem el fitxer ocs-live.conf per configurar el clonezilla




$ vi /media/BOOT-USB/etc/ocs-live.conf



i establim els dos següents valors:





...
ocs_live_keymap="/usr/share/keymaps/i386/qwerty/es.kmap.gz"
ocs_lang="en"
...


2.- Muntem la distribució del clonezilla per establir alguns valors del nostre interés. Per a la qual cosa cal tenir instal·lades les squashfs-tools



# cd /tmp
# mkdir /tmp/squash
# cp /media/BOOT-USB/casper/filesystem.squashfs /tmp
# mount -t squashfs -o loop /tmp/filesystem.squasfs /tmp
# mkdir /tmp/edit_squashfs
# cp -a /tmp/squashfs/* /tmp/edit_squashfs


Ja tenim la distribució muntada. Ara cal modificar alguns fitxers per tal de personalitzar algunes coses que ens interessen:

Configurem el timezone establint el valor Europe/Madrid al fitxer timezone



$ vi /tmp/edit_squasfhs/etc/timezone


Habilitem el teclat numèric per defecte amb l'ajuda de setleds



$ vi /tmp/edit_squasfhs/etc/rc.local

i afegim la següent línia:

/usr/bin/setleds +num

Configurem el mapa del teclat. En este cas simplement he agarrat el mapa instal·lat al meu sistema i l'he copiat al disc:



 # cp /etc/console/boottime.kmap.gz    /tmp/edit_squasfhs/etc/console


Finalment, una vegada realitzades totes les modificacions que ens interessen, tornem a crear el sistema d'arxius squashfs i el copiem de nou al disc USB:



 
# mksquashfs /tmp/edit_squashfs/* /tmp/filesystem.squashfs
# cp /tmp/filesystem.squashfs media/BOOT-USB/casper/filesystem.squashfs


i de moment, això és tot ;-)

dilluns, 9 de juliol del 2007

Quina és la idea ...

Sempre he dit: “algun dia apuntaré les coses que vaig fent per tal de no buscar contínuament solució per als problemes de sempre”, però eixe dia, mai arribava.
Resulta que hui, encara no sé perquè, ha arribat el dia :-O !!.
Segurament serà perquè me n’he adonat què la meua memòria definitivament s'ha fet malbé, últimament és molt volàtil :-(
Bé, este blog serà la meua nova memòria, a veure que passa …