Redimensionar disco linux, discos no gestionados por LVM

hd

Disc partitions

En ocasiones debemos redimensionar discos simples, los discos gestionados mediante LVM son mucho más sencillos de redimensionar. Pero en esta caso no contamos con ellos, vamos a proceder a un redimendionado sin pérdida de datos.

 

El escenario inicial es este:

Source   
[root@oradb ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_oradb-lv_root
                       37G  6.7G   30G  19% /
tmpfs                 1.9G  224K  1.9G   1% /dev/shm
/dev/sda1             485M   34M  426M   8% /boot
/dev/sdb1            1004M   19M  935M   2% /mnt
 
[root@oradb ~]# parted /dev/sdb unit s print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4194304s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
 
Number  Start  End       Size      Type     File system  Flags
 1      63s    2088449s  2088387s  primary  ext4
 
[root@oradb ~]# ls /mnt/ | wc -l
118

Es decir tenemos un HD /dev/sdb de 2GB (4194304 sectores*512 bytes), en estos momentos solo existe una partición de 1GB (2088387 sectores*512 bytes=1GB aproximadamente), que está montada y contiene 118 ficheros/directorios.

El disco se amplió a 2 GB pero el sistema de ficheros no ve todo este tamaño, porque tampoco se ha ampliado la partición.

El objetivo es ampliar /dev/sdb1 a 2GB, los pasos a seguir son:
1-Obtener la tabla de particiones actual de /dev/sdb
2-Desmontar el HD y modificar la tabla de particiones para redimensionar la partición /dev/sdb1
3-Redimensionar el sistema de ficheros de /dev/sdb1 y montar

Vamos por partes.

 

1-Obtener la tabla de particiones actual de /dev/sdb

Para evitar errores vamos utilizar la herramienta sfdisk (http://linux.die.net/man/8/sfdisk) que nos permite volcar la tabla de particiones sobre un fichero:

Source   
[root@oradb ~]# sfdisk /dev/sdb -d > partition_table.txt
[root@oradb ~]# cat partition_table.txt
# partition table of /dev/sdb
unit: sectors
 
/dev/sdb1 : start=       63, size=  2088387, Id=83
/dev/sdb2 : start=        0, size=        0, Id= 0
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0

Todas las unidades con las que trabajamos son sectores.

 

2-Desmontar el HD y modificar la tabla de particiones para redimensionar la partición /dev/sdb1

Lo primero que hacemos es una copia del fichero obtenido en el punto anterior, para editar la nueva tabla de particiones

Source   
[root@oradb ~]# cp partition_table.txt partition_table_new.txt

Editamos la tabla quedando el fichero:

Source   
[root@oradb ~]# cat partition_table_new.txt
# partition table of /dev/sdb
unit: sectors
 
/dev/sdb1 : start=       63, size=  4185539, Id=83
/dev/sdb2 : start=        0, size=        0, Id= 0
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0

El número 4185539 que es el tamaño en sectores de la partición, se ha calculado de la siguiente forma.

La ampliación del HD ha pasado de 1GB originalmente a 2GB, por tanto tenemos que calcular el incremento de 1 GB en sectores:

1GB=1024*1024*1024=1073741824 bytes

Tamaño del sector 512 bytes por tanto:
1073741824/512=2097152 sectores

Que sumamos a la salida de sfdisk incial quedando:
2088387 (valor inicial)+2097152 (valor increment)=4185539 (número de sectores que tendrá la partición)

Desmontamos, escribimos la nueva tabla de partición y forzamos una nueva lectura:

Source   
[root@oradb ~]# umount /dev/sdb1
[root@oradb ~]# sfdisk -f /dev/sdb < partition_table_new.txt
Checking that no-one is using this disk right now ...
OK
 
Disk /dev/sdb: 261 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
 
Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sdb1          0+    129     130-   1044193+  83  Linux
/dev/sdb2          0       -       0          0    0  Empty
/dev/sdb3          0       -       0          0    0  Empty
/dev/sdb4          0       -       0          0    0  Empty
New situation:
Warning: The partition table looks like it was made
for C/H/S=*/139/8 (instead of 261/255/63).
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0
 
Device Boot    Start       End   #sectors  Id  System
/dev/sdb1            63   4185601    4185539  83  Linux
start: (c,h,s) expected (0,7,8) found (0,1,1)
end: (c,h,s) expected (1023,138,8) found (260,138,8)
/dev/sdb2             0         -          0   0  Empty
/dev/sdb3             0         -          0   0  Empty
/dev/sdb4             0         -          0   0  Empty
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table
 
Re-reading the partition table ...
BLKRRPART: Device or resource busy
The command to re-read the partition table failed.
Run partprobe(8), kpartx(8) or reboot your system now,
before using mkfs
 
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@oradb ~]# partprobe /dev/sdb

 

 

3-Redimensionar el sistema de ficheros de /dev/sdb1 y montar

Comprobamos la partición con e2fsck (http://linux.die.net/man/8/e2fsck), redimensionamos con resize2fs (http://linux.die.net/man/8/resize2fs) y montamos:

Source   
[root@oradb ~]# e2fsck -f /dev/sdb1
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
/dev/sdb1: 128/65280 files (0.0% non-contiguous), 8878/261048 blocks
[root@oradb ~]# resize2fs /dev/sdb1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sdb1 to 523192 (4k) blocks.
The filesystem on /dev/sdb1 is now 523192 blocks long.
 
[root@oradb ~]# mount /dev/sdb1 /mnt
[root@oradb ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_oradb-lv_root
37G  6.7G   30G  19% /
tmpfs                 1.9G  224K  1.9G   1% /dev/shm
/dev/sda1             485M   34M  426M   8% /boot
/dev/sdb1             2.0G   19M  1.9G   1% /mnt

 

Podemos ver que los ficheros que teníamos anteriormente siguen existiendo:

Source   
[root@oradb ~]# ls /mnt/ | wc -l
118

No es algo tan bonito como trabajar con LVM, pero es lo que hay 🙂

Deja un comentario