¿A quién no le ha pasado que se ha visto en la tesitura de tener que migrar un servidor a un disco duro distinto? Bueno tal vez no es muy común en estos tiempos, gracias a las máquinas virtuales pero aún así, nunca estamos a salvo de tener que realizar alguna migración.
Pero, ¿Qué pasa cuando la migración es por falta de espacio y se hará a un disco mas grande?
Si hiciéramos un volcado de información con el comando dd, las particiones en el disco destino serán iguales a las del disco origen, por lo tanto no ganaríamos espacio.
Para poder trabajar con diferentes particiones de diferentes tamaños es muy práctico el uso de volúmenes lógicos, y aquí intentaremos explicar como hacerlo desde cero.
Supongamos que tenemos un servidor cuyo disco duro es de 10GiB y queremos migrarlo a un disco de 100GiB.
El disco está particionado de la siguiente forma:
[root@saturno ~]# fdisk -l Disco /dev/vda: 10.5 GB, 10485760000 bytes 16 heads, 63 sectors/track, 20317 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000ad680 Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/vda1 * 3 1018 512000 83 Linux La partición 1 no termina en un límite de cilindro. /dev/vda2 1018 20318 9726976 8e Linux LVM La partición 2 no termina en un límite de cilindro. Disco /dev/mapper/vg_centos-lv_root: 5729 MB, 5729419264 bytes 255 heads, 63 sectors/track, 696 cylinders Units = cilindros of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disco /dev/mapper/vg_centos-lv_swap: 4227 MB, 4227858432 bytes 255 heads, 63 sectors/track, 514 cylinders Units = cilindros of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000Como se puede observar tenemos un disco duro de 10GiB (vda) con 2 particiones, vda1 y vda2, vda1 es una particion Linux y vda2 es una partición Linux LVM. Nos indica que tenemos 2 discos mas, pero que en realidad es el mapeo que está haciendo hacia lv_root y lv_swap del grupo de volumenes vg_centos. Para ver los detalles del grupo lógico (VG) utilizamos vgdisplay.
[root@saturno ~]# vgdisplay --- Volume group --- VG Name vg_centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 9,27 GiB PE Size 4,00 MiB Total PE 2374 Alloc PE / Size 2374 / 9,27 GiB Free PE / Size 0 / 0 VG UUID 0Dbw71-XvaN-JWkR-vgBg-veZ3-8V2M-Lxl6PRTenemos el grupo lógico de 9,27GiB pero que está totalmente ocupado. Para hacer la migración añadiremos un segundo disco duro y en el, crearemos la misma estructura de particionado, pero con la segunda partición mas grande para poder contener el VG con el volumen lógico vg_root con mas espacio.
Disco /dev/vdb: 104.9 GB, 104857600000 bytes 16 heads, 63 sectors/track, 203174 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000Vemos que hemos añadido un segundo disco duro de 100GiB y el sistema lo reconoció como /dev/vdb. Ahora tocar particionarlo.
[root@saturno ~]# fdisk /dev/vdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Orden (m para obtener ayuda): p Disco /dev/vdb: 104.9 GB, 104857600000 bytes 16 heads, 63 sectors/track, 203174 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb67c25a6 Disposit. Inicio Comienzo Fin Bloques Id Sistema Orden (m para obtener ayuda):Como es de esperar, el disco no contiene una tabla de particiones, por lo tanto habrá que crearla. Para ello, usamos la opción n (añade una partición) que nos dará dos opciones mas, crear una partición extendida (e) o primaria (p). Como el disco origen tiene 2 particiones, crearemos la primera de similar tamaño, nunca menor, a la original y la segunda con todo el espacio restante, para poder aprovechar todo el nuevo disco. Para la primera partición seleccionamos n para crear una partición, después p para una partición primaria y 1 para que sea la primera. Cuando nos pide el numero del primer cilindro seleccionamos la opción por defecto que es 1 y el final 1020, ya que el disco original tenía el final del cilindro en 1018. Para la segunda partición los datos de los cilindros son 1021 (por defecto) y último 203174 (por defecto)
Orden (m para obtener ayuda): n Acción de la orden e Partición extendida p Partición primaria (1-4) p Número de partición (1-4): 1 Primer cilindro (1-203174, valor predeterminado 1): Se está utilizando el valor predeterminado 1 Last cilindro, +cilindros or +size{K,M,G} (1-203174, valor predeterminado 203174): 1020 Orden (m para obtener ayuda): n Acción de la orden e Partición extendida p Partición primaria (1-4) p Número de partición (1-4): 2 Primer cilindro (1021-203174, valor predeterminado 1021): Se está utilizando el valor predeterminado 1021 Last cilindro, +cilindros or +size{K,M,G} (1021-203174, valor predeterminado 203174): Se está utilizando el valor predeterminado 203174 Orden (m para obtener ayuda):Si después de crear las particiones hacemos un listado, nos muestra las dos particiones recién creadas, en este caso nos muestra vdb1 y vdb2. Recuerda que estos cambios no han sido aplicados aún, de modo que si abandonásemos fdisk ahora, se perderían todos estos cambios y el disco no sufriría cambios. Para guardar los cambios seleccionaremos la opción w (escribe la tabla en el disco y sale). Siempre puedes usar la opción m para ver la lista de opciones completa.
Orden (m para obtener ayuda): p Disco /dev/vdb: 104.9 GB, 104857600000 bytes 16 heads, 63 sectors/track, 203174 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb67c25a6 Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/vdb1 1 1020 514048+ 83 Linux /dev/vdb2 1021 203174 101885616 83 Linux Orden (m para obtener ayuda):Pero antes de grabar la tabla de particiones nueva, debemos indicar que la partición 1 será la partición de inicio (donde encuentre el cargador de arranque) para ello usaremos la opción a (Conmuta el indicador iniciable). Y luego guardaremos los cambios como se indicó anteriormente.
Orden (m para obtener ayuda): a Número de partición (1-4): 1 Orden (m para obtener ayuda): p Disco /dev/vdb: 104.9 GB, 104857600000 bytes 16 heads, 63 sectors/track, 203174 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xb67c25a6 Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/vdb1 * 1 1020 514048+ 83 Linux /dev/vdb2 1021 203174 101885616 83 Linux Orden (m para obtener ayuda): w ¡Se ha modificado la tabla de particiones!Lo que ahora tenemos es dos particiones Linux y si recuerdas el disco original tiene una particion Linux (que es donde se encuentra /boot) y otra Linux LVM. Para que esto sea así en nuestro nuevo disco debemos crear un grupo lógico, pero los grupos lógicos deben estar contenido dentro de un volumen físico, para ello debemos crear estos últimos. Un volumen lógico puede ser un disco duro o una partición, en nuestro caso será la partición vdb2, lo crearemos del siguiente modo.
root@saturno ~]# pvcreate /dev/vdb2 Physical volume "/dev/vdb2" successfully createdEl siguiente paso es crear el grupo lógico que este a su vez contendrá los volúmenes lógicos.
[root@saturno ~]# vgcreate vg_centos /dev/vdb2 /dev/vg_centos: already exists in filesystem New volume group name "vg_centos" is invalid Run `vgcreate --help' for more information.Ops! Un error. Lo que nos está notificando es que no podemos crear un volumen lógico “vg_centos” puesto que ese nombre ya está siendo utilizado, y es que es el nombre del disco origen. La solución sería renombrar el grupo de volúmenes original, pero corremos el riesgo de que si nos equivocamos, el sistema no vuelva a levantar. Una mejor solución es usar un nombre alternativo y una vez tengamos todos los pasos correctos, renombrar ambos grupos para que quede la copia como la original y la original con un nombre alternativo. Lo veremos mas adelante. Por lo que usaremos un nombre alternativo para el disco duro nuevo. En este caso “vg_centos2”
[root@saturno ~]# vgcreate vg_centos2 /dev/vdb2 Volume group "vg_centos2" successfully createdAhora toca comprobar que el grupo de volúmenes está creado.
[root@saturno ~]# pvdisplay /dev/vdb2 --- Physical volume --- PV Name /dev/vdb2 VG Name vg_centos2 PV Size 97,17 GiB / not usable 1,67 MiB Allocatable yes PE Size 4,00 MiB Total PE 24874 Free PE 24874 Allocated PE 0 PV UUID 1yRkly-vydC-91cK-a9eI-atA8-lipu-h2n7MQComo podemos comprobar estamos viendo que tenemos el grupo “vg_centos2” que tiene 97.17GiB (menos 1,67MiB) disponibles para asignar a los volúmenes lógicos. Ahora crearemos los volúmenes, pero antes debemos saber los nombres.
[root@saturno ~]# lvdisplay --- Logical volume --- LV Path /dev/vg_centos/lv_root LV Name lv_root VG Name vg_centos LV UUID 1IfUf3-A5Vd-AeCV-9D66-p8gM-tN38-WbFUsl LV Write Access read/write LV Creation host, time centos, 2013-08-12 16:12:00 +0200 LV Status available # open 1 LV Size 5,34 GiB Current LE 1366 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/vg_centos/lv_swap LV Name lv_swap VG Name vg_centos LV UUID QMqSBL-HwUL-ZXBj-J1VO-DIDQ-awh2-B1aei3 LV Write Access read/write LV Creation host, time centos, 2013-08-12 16:12:17 +0200 LV Status available # open 1 LV Size 3,94 GiB Current LE 1008 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1Serán lv_root de 94GiB y lv_swap con el resto de espacio. En este caso si se pueden repetir los nombres ya que estan contenido dentro de un grupo de volumenes diferente a “vg_centos”.
[root@saturno ~]# lvcreate -L94G -n lv_root vg_centos2 Logical volume "lv_root" created [root@saturno ~]# lvcreate -L3,16G -n lv_swap vg_centos2 Rounding up size to full physical extent 3,16 GiB Logical volume "lv_swap" created [root@saturno ~]#Creamos un volumen lógico llamado “lv_root” dentro del grupo “vg_centos2” de 96GiB y después otro de 3,16GiB llamado “lv_swap” Si hacemos un pvdisplay veremos que “vg_centos2” esta completo, o casi (Free PE).
[root@saturno ~]# pvdisplay /dev/vdb2 --- Physical volume --- PV Name /dev/vdb2 VG Name vg_centos2 PV Size 97,17 GiB / not usable 1,67 MiB Allocatable yes PE Size 4,00 MiB Total PE 24874 Free PE 1 Allocated PE 24873 PV UUID 1yRkly-vydC-91cK-a9eI-atA8-lipu-h2n7MQYa tenemos las particiones, el volumen físico, el grupo de volumen y los volúmenes lógicos. Ahora falta pasar los datos. Primero, por ser mas rápido copiaremos la partición /dev/vda1 a /dev/vdb1.
[root@saturno ~]# dd if=/dev/vda1 of=/dev/vdb1 1024000+0 records in 1024000+0 records out 524288000 bytes (524 MB) copied, 3,09953 s, 169 MB/sY haremos lo mismo con el volumen lv_root, lv_swap no hace falta al ser el área de intercambio. Para hacer esto debemos saber antes que Linux carga los volúmenes como devices del siguiente modo:
/dev/GRUPOVOLUMEN/VOLUMENLOGICOQue para nuestro ejemplo, lv_root del grupo vg_centos se accederá de la siguiente manera:
/dev/vg_centos/lv_rootEntonces para pasar los datos entre lv_root haremos lo siguiente:
[root@saturno ~]# dd if=/dev/vg_centos/lv_root of=/dev/vg_centos2/lv_root 11190272+0 records in 11190272+0 records out 5729419264 bytes (5,7 GB) copied, 164,968 s, 34,7 MB/sSi reiniciáramos el equipo con este disco duro, seguirá sin arrancar. El problema radica en que el sistema espera encontrar un grupo de volumenes llamado “vg_centos” y este no se encuentra, para evitar esto, debemos hacer una cosa mas antes de retirar el disco original del servidor.
[root@saturno ~]# vgrename vg_centos vg_centos3 Volume group "vg_centos" successfully renamed to "vg_centos3" [root@saturno ~]# vgrename vg_centos2 vg_centos Volume group "vg_centos2" successfully renamed to "vg_centos"Renombramos vg_centos como vg_centos3 y vg_centos2 como vg_centos. (recuerda que no pueden haber dos grupos de volúmenes con el mismo nombre en el sistema) Apagamos el servidor, quitamos el disco original y voilá, nuestro sistema arranca desde el nuevo disco. Pero hay un pequeño inconveniente seguimos teniendo poco espacio, si hacemos
[root@saturno ~]# df -h S.ficheros Size Used Avail Use% Montado en /dev/mapper/vg_centos-lv_root 5,3G 5,1G 0 100% / tmpfs 435M 0 435M 0% /dev/shm /dev/vda1 485M 37M 423M 9% /bootVemos que lv_centos sigue teniendo 5,3GiB en total y es que como lo hemos clonado, el volumen es una copia exacta del original. Para corregir esto, debemos expandir el volumen para que ocupe todo el espacio disponible en su contenedor, mediante.
root@saturno ~]# resize2fs /dev/mapper/vg_centos-lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_centos-lv_root is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 6 Performing an on-line resize of /dev/mapper/vg_centos-lv_root to 24641536 (4k) blocks. El sistema de ficheros en /dev/mapper/vg_centos-lv_root tiene ahora 24641536 bloques.Si ahora volvemos a ver el espacio, observamos que lv_root tiene un total de 93GiB.
[root@saturno ~]# df -h S.ficheros Size Used Avail Use% Montado en /dev/mapper/vg_centos-lv_root 93G 5,1G 83G 6% / tmpfs 435M 0 435M 0% /dev/shm /dev/vda1 485M 37M 423M 9% /boot [root@saturno ~]#Listo, ya tenemos nuestro sistema funcionando desde un nuevo disco duro con mas espacio. Pero... un momento! Los mas observadores habrán notado que el area de intercambio no está funcionando y eso es debido a que fstab declara /dev/mapper/vg_centos-lv_swap como swap, pero dicho volumen no es del tipo swap, para convertirlo al tipo swap debemos hacer lo siguiente.
[root@saturno ~]# mkswap /dev/mapper/vg_centos-lv_swap mkswap: /dev/mapper/vg_centos-lv_swap: warning: don't erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 3313660 KiB no label, UUID=c21b81be-1bd6-45f1-913e-04c44ca13074Si reiniciamos el servidor ahora, estaría funcionando el swap. Si no queremos reiniciar, podremos activarlo al vuelo mediante.
[root@saturno ~]# swapon /dev/mapper/vg_centos-lv_swapBueno, esto es todo por ahora. Saludos!
No hay comentarios :
Publicar un comentario