(openSolaris en ZFS + Ubuntu + ArchLinux) in my Laptop

Saludos amigos:

Aqui voy a mostrar como le hice para tener mi openSolaris en sobre ZFS. Es una tarea un poco compleja de mantener, sobre todo porque el instalador oficial no soporta ZFS ni es posible actualizar el sistema. Pero para los que queremos un buen rendimiento y tener lo ultimo de lo ultimo, va muy bien.

Paso -1

Tener instalado nuestros otros sistemas operativos en particiones logicas y dejar un espacio minimo al principio de unos 20~30 GBytes. En mi caso tengo, una particion extendida y en ella una particion ext2 para el /boot de mi Ubuntu, una ReiserFS para mi / de Ubuntu, luego una swap, y finalmente otro ReiserFS para ArchLinux. Tambien, para los que quieran intercambiar cosas entre todos los OSs recomiendo crear antes una particion vfat PRIMARIA, ya que Solaris solo lee particiones primarias y solo puede leer y escribir sobre tipos vfat. Luego creen sus particiones de Linux.
OTRA COSA IMPORTANTE: Creen su cargador de arrnaque en las particiones y no en MBR, ya que asi cada OS manejara automaticamente las lineas de Kernel para cada grub. Sin embargo, pueden usar el grub de openSolaris, ya que es plenamente compatible con Linux, pero mas dificil de mantener cuando actualizemos los kernels :-P.

Paso 0

Instalar openSolaris. Os recomiendo los ultimos builds (svn>75) que trane buen soporte para Xen. Cuando instalen, procuren crear una particion lo suficiente mente grande para despues clonar nuestra instalacion a ZFS, y logicamente al definir las slices, solo ocupar la mitad del espacio o menos y solo usar un punto de montaje(solo root, / y swap). Es recomendable crear inmediatamente la slice que sera posteriormente nuestra pool para ZFS, asignandole un punto de montaje no usado por el sistema (/zfsroot, por ejemplo)

Paso 0,9

Si no definieron la particion con el resto del espacio, como lo hice yo :-(, no se preocupen, ahora vamos a asignar el espacio libre a una slice. Para esto, como root, tecleamos 'format'. Seleccionamos el numero de nuestro disco duro para luego ingresar el comando 'partition'. Dentro de esta seccion podemos definir los slices. Colocamos 'print' para ver los slices ocupados y disponible, asi como las dimensiones en cilindros. Luego, modificamos una slices sin asignar tecleando el nuemro de la slice. Luego ingresamos que va a ser 'alternates', aceptamos lo predeterminado en permisos. Cuando nos pregunte el cilindro de inicio, colocamos ell numero siguiente de cilindro ocupado por nuestra particion y como 'size' el ultimo numero de cilindro menos uno. Luego ponemos 'label', y aceptamos escribir los cambios. Aqui esta lo que hice yo:

partition> p
Current partition table (unnamed):
Total disk cylinders available: 3112 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 1405 10.75GB (1403/0/0) 22539195
1 swap wu 1406 - 1578 1.33GB (173/0/0) 2779245
2 backup wm 0 - 3111 23.84GB (3112/0/0) 49994280
3 alternates wm 1579 - 3014 11.00GB (1436/0/0) 23069340
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wu 1 - 2 15.69MB (2/0/0) 32130

partition> help
Expecting one of the following: (abbreviations ok):
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit

partition> modify
Cannot modify disk partitions while it has mounted partitions.

partition> 3
Part Tag Flag Cylinders Size Blocks
3 alternates wm 1579 - 3014 11.00GB (1436/0/0) 23069340

Enter partition id tag[alternates]:
Enter partition permission flags[wm]:
Enter new starting cyl[1579]:
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3015c
`3015c' is out of range
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3014c
`3014c' is out of range
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3112e
End cylinder 3112 is beyond max cylinder 3111
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3111e
partition>
partition>
partition> print
Current partition table (unnamed):
Total disk cylinders available: 3112 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 1405 10.75GB (1403/0/0) 22539195
1 swap wu 1406 - 1578 1.33GB (173/0/0) 2779245
2 backup wm 0 - 3111 23.84GB (3112/0/0) 49994280
3 alternates wm 1579 - 3111 11.74GB (1533/0/0) 24627645
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wu 1 - 2 15.69MB (2/0/0) 32130

partition> help
Expecting one of the following: (abbreviations ok):
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit

partition> label
Ready to label disk, continue? yes

Luego de esto ya tenemos lista nuestra slice para la picina de ZFS.

Paso 1

Desmontar y eliminar del archivo /etc/vfstab la entrada de punto de montaje para la particion reservada en la instalacion. Si no lo habiamos hecho, solo hay que crear un nuevo conjunto de almacenamoento con el comando:

zpool create rootpool c0d0sX, donde X es la slice definida anteriormente.

Si la slice la definimos en el proceso de instalacion, lo que hay que hacer es desmontarla y añadir el parametro -f para forzar la creacion, a pesar de que exista un sistema de archivos.

Paso 2

Crear el sistema de archivos ZFS para nuestro root con el comando:

zfs create rootpool/rootfs

, asignamos un punto de montaje generico:

zfs set mountpoint=legacy rootpool/rootfs

, lo montamos:

mkdir /zfsroot
mount -F zfs rootpool/rootfs /zfsroot

y lo agregamos a nuestro vfstab:

echo rootpool/rootfs - /zfsroot zfs – yes - >> /etc/vfstab

Paso 3

Hacer un vlocado de nuestro root en UFS a nuestro nuevo ZFS:

# cd /zfsroot/
# ufsdump 0f - / | ufsrestore -rf -
DUMP: Fecha de este volcado de nivel 0: 17 de noviembre de 2007 13:45:38 CLST
DUMP: Fecha del último volcado de nivel 0: el periodo
DUMP: Volcando /dev/rdsk/c0d0s0 (darkmovile:/) en salida estándar.
DUMP: Reasignación (Paso I) [archivos normales]
DUMP: Reasignación (Paso II) [directorios]
DUMP: Escribiendo registros de 32 Kilobytes
DUMP: 9832500 bloques calculados (4801,03MB).
DUMP: Volcando (Paso III) [directorios]
DUMP: Volcando (Paso IV) [archivos normales]
DUMP: 47,07% terminado, realizado en 0:11
DUMP: 98,60% terminado, realizado en 0:00
./export/home/ramoran/.mozilla/firefox/0n404u09.default/prefs.js: no se ha encontrado en el volumen
DUMP: 9833598 bloques (4801,56MB) en 1 volumen a 4020 KB/seg
DUMP: EL VOLCADO HA FINALIZADO

NOTA: Existe otro metodo, ocupando find, pero ese medoto no crea los archivos en /dev ni /devices, por lo que este es mas practico.

Paso 4

Actualizar nuestros zpool.cache en el ramdisk:

echo etc/zfs/zpool.cache >> /zfsroot/boot/solaris/filelist.ramdisk

, ajustar el sistema de archivos de nuestro conjunto de almacenamiento para el cual debe arrancar:

zpool set bootfs=rootpool/rootfs rootpool

NOTA: Este parametro se puede ajustar a nivel de grub tambien.

y actualizar el archivo de arranque:

/usr/sbin/bootadm update-archive -R /zfsroot

Paso 5

Ajustar nuestro nuevo grub y menu.lst y agregarlo al punto de montaje legacy:

mkdir -p /rootpool/boot/grub
cp /zfsroot/boot/grub/menu.lst /rootpool/boot/grub
cd /rootpool/boot/grub/
echo 'title Solaris ZFS' >> menu.lst
# Corregido!!!
echo 'kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
echo 'module$ /platform/i86pc/$ISADIR/boot_archive' >> menu.lst

y ajustamos el nuevo punto de monje de root:

grep -v 'rootpool/rootfs' /etc/vfstab | awk '$3 == "/" { printf "rootpool/rootfs\t-\t/\tzfs\t-\tno\t-\n" } ; $3 != "/" { print $0 }' > /zfsroot/etc/vfstab

Paso 6

Instalar nuestro nuevo grub en el disco:

installgrub /zfsroot/boot/grub/stage1 /zfsroot/boot/grub/stage2 /dev/rdsk/c0d0sX

Donde X es la slice de nuestro ZFS root. Con esto estaríamos listo y deberíamos poder arrancar con ZFS

Pasos a seguir

Posteriormente podemos seguir editando nuestro grub, así como eliminar la slice UFS y agregarla a nuestro conjunto de almacenamiento.

Eso es todo amigos. Espero que os resulte. Mucha suerte. Ahora voy a ver si funciono :-P, si no, voy a tener que corregir este post. Byte!

CONFIRMADO: Funciono, asi que adelante amigos, prueben ZFS ya.




3 comentarios:

Anónimo dijo...

Hola Raul.
Muy buen artículo, he realizado los pasos que dice tu artículo y tengo algunas dudas:
1.- En el paso 4 el comando: zpool set bootfs=rootpool/rootfs rootpool
no existe, según comentas el comando grub hace lo mismo: /usr/sbin/bootadm update-archive -R /zfsroot
Pregunta ¿este comando de grub se dá en el paso 4?
2.- En el paso 5, se añade al fichero menu.lst el arranque ZFS: echo 'title Solaris ZFS' >> menu.lst
echo 'kernel$ /platform/i86pckernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
este comando no debería de ser: echo 'title Solaris ZFS' >> menu.lst
echo 'kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
le faltaría una / entre i86pc y kernel.
Bueno solo decirte que no me funciona, en el menú de arranque no aparece el ZFS, no sé si tiene algo que ver que Solaris 10 lo tengo montado sobre VMware.

Saludos y gracias.

Anónimo dijo...

Hola Raul.
Muy buen artículo, he realizado los pasos que dice tu artículo y tengo algunas dudas:
1.- En el paso 4 el comando: zpool set bootfs=rootpool/rootfs rootpool
no existe, según comentas el comando grub hace lo mismo: /usr/sbin/bootadm update-archive -R /zfsroot
Pregunta ¿este comando de grub se dá en el paso 4?
2.- En el paso 5, se añade al fichero menu.lst el arranque ZFS: echo 'title Solaris ZFS' >> menu.lst
echo 'kernel$ /platform/i86pckernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
este comando no debería de ser: echo 'title Solaris ZFS' >> menu.lst
echo 'kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
le faltaría una / entre i86pc y kernel.
Bueno solo decirte que no me funciona, en el menú de arranque no aparece el ZFS, no sé si tiene algo que ver que Solaris 10 lo tengo montado sobre VMware.

Saludos y gracias.

Darth Debian - VelociRaulEitor dijo...

Hola!! Saludos.

El set, ajusta una propiedad a un zpool, y esta propiedad en espesifico le dice al gestor de arranque de que sistema de archvos debe arrancar, dandote la opcion hasta de arrancar desde una snapshot. Este parametro se puede pasar directamente en el grub, cosa de settear un sistema de archivos diferente sin tener que ajustar la propiedad del zpool. El update-archive creo que crea los archivos que ejecuta el grub para dicho sistema de archivos.

Siii, me falta un slash(/). Se me habia olvidado modificarlo.

Con lo ultimo, te recomieno que uses la ultima version de Solaris, Nevada, ya que la version antigua de Solaris 10 no soporta arranque desde ZFS. Cualquier duda, sigue comentandome. Mucha suerte. Yo lo tengo en mi laptop instalado con ZFS y en 2 servidores criticos, usando OpenSolaris SXCE b81, sin problemas. Aiooos.

Apoyando el Software Libre, a un mundo libre! - Designed by Posicionamiento Web