Escenario
Cloudatcost es una empresa canadiense que, entre otras cosas, ofrece un servicio de hosting que, en vez de pagar todos los meses, lo compras con un único pago. Te permiten comprar un número de CPUs, espacio en disco y cantidad de memoria RAM para que la gestiones como mejor te convenga, distribuyendo los recursos entre una o varias instancias.Problema
Pues resulta que compré un paquete de recursos hace un tiempo y el otro día decidí desplegar una instancia desde su panel de control. Seleccioné una imagen de ubuntu 16.04, le asigné 2 cores, 2 Gb de ram y 50 gigas de disco SSD. Una vez finalizada la configuración de la instancia puedes acceder a ella con el usuario root y con la contraseña que se indica en el panel de control. Hasta aquí todo bien, después de hacer login por SSH, lo primero que hago es actualizar el sistema operativo:
1 |
$ sudo apt-get update && sudo apt-get dist-upgrade |
Solución
Ampliar la partición obviamente, pero no es tarea baladí. Después de probar varias supuestas soluciones, por fin di con este artículo de hace siete años que describe los pasos a seguir. Aquí los resumo, por si alguna vez me da por desplegar otra instancia:Pasos a seguir
- Listar el contenido de las tablas de partición:
- Asegúrate que /dev/sda1 es la partición de boot y /dev/sda2 el la partición swap, apunta la etiqueta de la partición swap
- Deshabilita el espacio swap.
- Desmonta la partición /boot
- Elimina journal de /dev/sda1
- Abre la tabla de particiones
- Borra la partición swap
- Crea una nueva partición swap cuyo primer cilindro sea 2-3 veces mayor que el original.
- Cambia el tipo de disco en /dev/sda2 a 82 – Linux swap / Solaris.
- Borra la partición /dev/sda1.
- Añade una nueva partición en /dev/sda1 usando los valores por defecto
- Verifica la tabla de particiones
- Marca la primera partición como «bootable»
- Si la tabla de partición es correcta, escribe en disco con w. De lo contrario, sal con q.
- Comprueba que no haya errores en /dev/sda1 for errors para asegurarnos que no hemos corrompido nada en /boot.
- Reinicia el sistema
- Deshabilita el swap
- Si no se puede deshabilitar y el sistema devuelve el siguiente error:
- Recrea el swap usando la etiqueta de la partición del paso 2
- Habilita el swap
- Desmonta /boot
- Redimensiona la partición /dev/sda1.
- Añade journal a /dev/sda1
- Monta /boot
1 2 3 4 5 6 7 8 9 10 11 |
# fdisk -l Disk /dev/sda: 750.2 GB, 750156374016 bytes 255 heads, 63 sectors/track, 91201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0001a00e Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1057 8385930 82 Linux swap / Solaris /dev/sda3 1058 91201 724081680 83 Linux |
1 2 |
# blkid /dev/sda1 /dev/sda2 /dev/sda1: LABEL="/boot" UUID="9d056123-abcc-4522-aaaa-126dc8b27890" SEC_TYPE="ext2" TYPE="ext3" /dev/sda2: TYPE="swap" LABEL="SWAP-sda2" |
1 |
# swapoff -a |
1 |
# umount /boot |
1 |
# tune2fs -O ^has_journal /dev/sda1 |
1 |
# fdisk /dev/sda |
1 2 |
Command (m for help): d Partition number (1-4): 2 |
1 2 3 4 5 6 7 8 9 |
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (14-91201, default 14): 42 Last cylinder, +cylinders or +size{K,M,G} (42-1057, default 1057): Using default value 1057 |
1 2 3 4 |
Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 82 Changed system type of partition 2 to 82 (Linux swap / Solaris) |
1 2 |
Command (m for help): d Partition number (1-4): 1 |
1 2 3 4 5 6 7 8 9 10 |
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-91201, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-41, default 41): Using default value 41 |
1 2 3 4 5 6 7 8 9 10 11 |
Command (m for help): p Disk /dev/sda: 750.2 GB, 750156374016 bytes 255 heads, 63 sectors/track, 91201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0001a00e Device Boot Start End Blocks Id System /dev/sda1 1 41 329301 83 Linux /dev/sda2 42 1057 8161020 82 Linux swap / Solaris /dev/sda3 1058 91201 724081680 83 Linux |
1 2 3 |
Command (m for help): a Partition number (1-4): 1 Command (m for help): w |
1 2 3 4 5 6 7 |
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. |
1 2 3 4 5 6 7 8 |
# e2fsck -f /dev/sda1 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /boot1: 90/26104 files (7.8% non-contiguous), 72369/104388 blocks |
1 |
# reboot |
1 |
# swapoff -a |
1 |
swapoff: cannot find the device for UUID=<uuid></uuid> |
1 |
# mkswap -L SWAP-sda2 /dev/sda2 |
1 |
# swapon -a |
1 |
# umount /boot |
1 2 3 4 |
# resize2fs /dev/sda1 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/sda1 to 329300 (1k) blocks. The filesystem on /dev/sda1 is now 329300 blocks long. |
1 2 3 4 5 |
# tune2fs -j /dev/sda1 tune2fs 1.41.12 (17-May-2010) Creating journal inode: done This filesystem will be automatically checked every -1 mounts or 0 days, whichever comes first. Use tune2fs -c or -i to override. |
1 |
# mount /boot |