RHEL cambiar LVM de root de single path a multipath [solved]
RHEL cambiar LVM de root de single path a multipath [solved]
RHEL Change LVM boot from single path to multipath [solved]
Tras varios dias de una exhaustiva investigación y con la ayuda del soporte de RHEL no habiamos conseguido cambiar el arranque de una máquina ya instalada en single path con el arranque en una LUN a multipath sin tener que reinstalar.
Investigando e investigando, mi equipo y yo destripamos el initrd para ver como demonios lo solucionabamos.
Total, que juntando las piezas de TODO google, mas TODO RHEL, EUREKA, tenemos un método infalible para convertir el arranque de single path a multipath sobre root en un LVM sin cargarnos nada... Allá van los pasos:
1. Coger el initrd de la máquina en cuestión y copiarselo a un directorio de trabajo.
2. Descomprimirlo con esto:
os lo imaginais, ¿ no ? Ok, a por otro fichero:
Hala,
** Ah, se me olvidaba, el
2 comentarios:
RHEL Change LVM boot from single path to multipath [solved]
Tras varios dias de una exhaustiva investigación y con la ayuda del soporte de RHEL no habiamos conseguido cambiar el arranque de una máquina ya instalada en single path con el arranque en una LUN a multipath sin tener que reinstalar.
Investigando e investigando, mi equipo y yo destripamos el initrd para ver como demonios lo solucionabamos.
Total, que juntando las piezas de TODO google, mas TODO RHEL, EUREKA, tenemos un método infalible para convertir el arranque de single path a multipath sobre root en un LVM sin cargarnos nada... Allá van los pasos:
1. Coger el initrd de la máquina en cuestión y copiarselo a un directorio de trabajo.
2. Descomprimirlo con esto:
gunzip < ../initrd-2.6.18-164.el5.img | cpio -i --make-directories3. Trastear en los ficheros... aqui viene lo interesante: Varias cosas importantes, lo primero, copiar todos los archivos en el bin que va a necesitar para arrancar, alla van, bueno, mejor os pongo el arbol con el contenido del initrd descomprimido:
|-- bin | |-- dmraid | |-- dmsetup | |-- insmod | |-- kpartx | |-- lvm | |-- modprobe -> /sbin/nash | |-- mpath_prio_alua | |-- mpath_prio_emc | |-- mpath_prio_hds_modular | |-- mpath_prio_hp_sw | |-- mpath_prio_intel | |-- mpath_prio_netapp | |-- mpath_prio_ontap | |-- mpath_prio_rdac | |-- mpath_prio_tpc | |-- mpath_prio_weighted | |-- multipath | |-- nash | `-- scsi_id |-- dev | |-- console | |-- mapper | |-- null | |-- ptmx | |-- ram -> ram1 | |-- ram0 | |-- ram1 | |-- rtc | |-- systty | |-- tty | |-- tty0 | |-- tty1 | |-- tty10 | |-- tty11 | |-- tty12 | |-- tty2 | |-- tty3 | |-- tty4 | |-- tty5 | |-- tty6 | |-- tty7 | |-- tty8 | |-- tty9 | |-- ttyS0 | |-- ttyS1 | |-- ttyS2 | |-- ttyS3 | `-- zero |-- etc | |-- lvm | | `-- lvm.conf | |-- multipath.conf | `-- scsi_id.config |-- init |-- lib | |-- dm-log.ko | |-- dm-mem-cache.ko | |-- dm-message.ko | |-- dm-mirror.ko | |-- dm-mod.ko | |-- dm-multipath.ko | |-- dm-raid45.ko | |-- dm-region_hash.ko | |-- dm-round-robin.ko | |-- dm-snapshot.ko | |-- dm-zero.ko | |-- ehci-hcd.ko | |-- ext3.ko | |-- firmware | |-- jbd.ko | |-- ohci-hcd.ko | |-- qla2xxx.ko | |-- scsi_dh.ko | |-- scsi_mod.ko | |-- scsi_transport_fc.ko | |-- sd_mod.ko | |-- shpchp.ko | |-- uhci-hcd.ko | `-- usb-storage.ko |-- proc |-- sbin -> bin |-- sys |-- sysroot `-- var `-- lib `-- multipath `-- bindingsEn el lib observareis que tengo el qla2xxx.ko, esto es porque tengo Qlogic, si teneis emulex u otra cosa, pues ya sabeis, se pone el módulo correspondiente. Vale, ahora lo divertido, hay que buscar las LUN que teneis en single path de arranque y swap y coger sus WWID, esto, depende de vuestra instalacion, lo podeis mirar directamente en la cabina de discos o sacarlas con comandos linux. En este caso hablamos de que el arranque es LVM, por lo que la unidad fisica de disco hay que buscarla bajo el... como ? asi:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda rootvg lvm2 a- 5.88G 448.00M
Ok, ya sabemos en que unidad esta el ROOTVG, vale, ahora a por su wwid: # scsi_id -g -u -s /block/sda
y sale un numero como este: 450a98000572d456e4c4aba644c711234
APUNTADLO poniendo que este el boot LVM, que esto es el meollo de la cuestión Tambien tenemos que apuntar el numero del swap: # swapon -s Filename Type Size Used Priority /dev/sdb partition 4192924 0 -1Y ahora a por su wwid:
# scsi_id -g -u -s /block/sdb 450a98000572d456e4c4aba644c711444APUNTADLO poniendo que este es el de swap. Vale, ahora a editar ficheros con vuestro editor favorito, el primero (todos los paths son a partir de directorio que ha creado la descompresion del initrd, el arbolito que he puesto antes):
# vi ./etc/multipath.confSe pone esto:
defaults { user_friendly_names yes } blacklist { devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" devnode "^(hd|xvd|vd)[a-z]*" wwid "*" } # Make sure our multipath devices are enabled. blacklist_exceptions { wwid "450a98000572d456e4c4aba644c711234" wwid "450a98000572d456e4c4aba644c711444" }O sea, los wwid que habeis apuntado... El siguiente fichero:
# vi ./var/lib/multipath/bindings # Multipath bindings, Version : 1.0 # # Format: # alias wwid # # ESTE ES EL ROOT mpath1 450a98000572d456e4c4aba644c711234 # # ESTE ES EL SWAP mpath0 450a98000572d456e4c4aba644c711444
os lo imaginais, ¿ no ? Ok, a por otro fichero:
# vi ./init(si, si, es un script, jejeje), os lo pongo entero porque este no lo teneis, los drivers de las HBA poned los vuestros:
#!/bin/nash mount -t proc /proc /proc setquiet echo Mounting proc filesystem echo Mounting sysfs filesystem mount -t sysfs /sys /sys echo Creating /dev mount -o mode=0755 -t tmpfs /dev /dev mkdir /dev/pts mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts mkdir /dev/shm mkdir /dev/mapper echo Creating initial device nodes mknod /dev/null c 1 3 mknod /dev/zero c 1 5 mknod /dev/urandom c 1 9 mknod /dev/systty c 4 0 mknod /dev/tty c 5 0 mknod /dev/console c 5 1 mknod /dev/ptmx c 5 2 mknod /dev/rtc c 10 135 mknod /dev/tty0 c 4 0 mknod /dev/tty1 c 4 1 mknod /dev/tty2 c 4 2 mknod /dev/tty3 c 4 3 mknod /dev/tty4 c 4 4 mknod /dev/tty5 c 4 5 mknod /dev/tty6 c 4 6 mknod /dev/tty7 c 4 7 mknod /dev/tty8 c 4 8 mknod /dev/tty9 c 4 9 mknod /dev/tty10 c 4 10 mknod /dev/tty11 c 4 11 mknod /dev/tty12 c 4 12 mknod /dev/ttyS0 c 4 64 mknod /dev/ttyS1 c 4 65 mknod /dev/ttyS2 c 4 66 mknod /dev/ttyS3 c 4 67 echo Setting up hotplug. hotplug echo Creating block device nodes. mkblkdevs echo "Loading ehci-hcd.ko module" insmod /lib/ehci-hcd.ko echo "Loading ohci-hcd.ko module" insmod /lib/ohci-hcd.ko echo "Loading uhci-hcd.ko module" insmod /lib/uhci-hcd.ko mount -t usbfs /proc/bus/usb /proc/bus/usb echo "Loading jbd.ko module" insmod /lib/jbd.ko echo "Loading ext3.ko module" insmod /lib/ext3.ko echo "Loading scsi_mod.ko module" insmod /lib/scsi_mod.ko echo "Loading sd_mod.ko module" insmod /lib/sd_mod.ko echo "Loading scsi_transport_fc.ko module" insmod /lib/scsi_transport_fc.ko echo "Loading qla2xxx.ko module" insmod /lib/qla2xxx.ko echo "Loading shpchp.ko module" insmod /lib/shpchp.ko echo "Loading usb-storage.ko module" insmod /lib/usb-storage.ko echo Waiting for driver initialization. stabilized /proc/bus/usb/devices echo "Loading dm-mod.ko module" insmod /lib/dm-mod.ko echo "Loading dm-log.ko module" insmod /lib/dm-log.ko echo "Loading dm-mirror.ko module" insmod /lib/dm-mirror.ko echo "Loading dm-zero.ko module" insmod /lib/dm-zero.ko echo "Loading dm-snapshot.ko module" insmod /lib/dm-snapshot.ko echo "Loading scsi_dh.ko module" insmod /lib/scsi_dh.ko echo "Loading dm-multipath.ko module" insmod /lib/dm-multipath.ko echo "Loading dm-round-robin.ko module" insmod /lib/dm-round-robin.ko echo "Loading dm-mem-cache.ko module" insmod /lib/dm-mem-cache.ko echo "Loading dm-region_hash.ko module" insmod /lib/dm-region_hash.ko echo "Loading dm-message.ko module" insmod /lib/dm-message.ko echo "Loading dm-raid45.ko module" insmod /lib/dm-raid45.ko echo Waiting for driver initialization. stabilized --hash --interval 1000 /proc/scsi/scsi mkblkdevs echo Creating multipath devices /bin/multipath -v 0 450a98000572d456e4c4aba644c711234 dmsetup ls --target multipath --exec 'kpartx -a -p p' echo Scanning and configuring dmraid supported devices echo Scanning logical volumes lvm vgscan --ignorelockingfailure echo Activating logical volumes lvm vgchange -ay --ignorelockingfailure rootvg resume /dev/mapper/mpath0p1 echo Creating root device. mkrootdev -t ext3 -o defaults,ro /dev/sdc echo Mounting root filesystem. mount /sysroot echo Setting up other filesystems. setuproot echo Switching to new root and running init. switchrootBuscar la linea que pone
/bin/multipath -v 0 450a98000572d456e4c4aba644c711234y cambiais el wwid por el vuestro de la lun de LVM de boot root, ok ? Vale, ya teneis la estructura del initrd, ahora a crear un initrd. Os meteis en el directorio en cuestion donde teneis el arbol y poneis:
find . | cpio --create --'format=newc' | gzip > ../initrd-mpath-2.6.18-164.el5.imgluego copiad esta imagen al directorio /boot. Esto crea una imagen de RamDisk arrancable por el kernel de esta version, ahora, si sabeis algo de grub y tal os imaginareis lo que viene. Os vais al directorio /boot/grub y cambiad el device.map asi:
# cat /boot/grub/device.map (hd0) /dev/mapper/mpath1 (hd10) /dev/sdkLa primera linea es importante, tiene que coincidir con el var/lib/multipath/bindings del initrd que hemos creado. La segunda linea os juro por la virgen que no tengo ni idea de para que sirve, pero no molesta. :-) Vale, ahora editamos el menu.lst y que quede parecido a esto:
default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.18-164.el5) root (hd0,0) kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/rootvg/lv_root initrd /initrd-2.6.18-164.el5.img title RHEL Multipathboot (2.6.18-164.el5) root (hd0,0) kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/rootvg/lv_root initrd /initrd-mpath-2.6.18-164.el5.img title Other rootnoverify (hd10,4) chainloader +1Ok, la opcion 1 la he puesto por defecto, vale... pues eso, Ahora una cosa importante, antes de reiniciar hay que cepillarse el /etc/blkid/blkid.tab, porque si no el RHEL se aprende el camino, y va por donde no es. Este fichero te lo puedes cargar tranquilamente ya que lo regenera al arrancar, lo malo es que si existe de antes peta, ya que no ve los mismos caminos que teniamos y se pierde. Total, si lo habeis hecho todo bien, reiniciad y cuando arranque el comando pvs os mostrara algo parecido a esto:
PV VG Fmt Attr PSize PFree /dev/dm-2 rootvg lvm2 a- 5.88G 448.00My el swapon -s esto:
Filename Type Size Used Priority /dev/dm-1 partition 4192924 0 -1
Hala,
** Ah, se me olvidaba, el
./etc/scsi_id.configtiene que tener esto.
vendor="ATA",options=-p 0x80¿ Porqué ? no sé, pero funciona... :-)
Esto es lo que estaba buscando, muchas gracias tio
envíado por Anónimo el 07 octubre, 2011 13:00 Enlace a este comentario.
Por estas cosas (entre otras que tu conoces) me lamento de haber dejado tu equipo :-)
Buen trabajo!!!!
Buen trabajo!!!!
envíado por Enlace a este comentario.
el 07 octubre, 2011 13:24