Partprobe y RHEL 6.X

En las versiones RHEL 5.X y anteriores, cuando gestinamos las particiones de los dipositivos con fdisk , se realiza una llamada a la función ioctl() que se encarga de avisar al kernel que la tabla de particiones de un dispositivo ha sido alterada. En ocasiones los recursos del sistema están sobrecargados y la llamada a la función no se realiza correctamente, por lo que nos vemos obligados a recargar las tablas de particiones manualmente con el comando partprobe.

Desde la versión 6.0 de RHEL, se encuentra disponible el paquete parted en su versión 2.1. Las librerías previas de parted tenían un bug que proporcionaba un successful return code en ciertos tipos de discos al ejecutar partprobe, pero que en realidad no había recargado la tabla de particiones. Ante el peligro que eso podía suponer en el dispositvo donde se encuentra nuestro sistema de ficheros raíz ( / ) , desde la versión 2.1 decidieron modificar el comportamiento para que al crear una partición en ese dispositivo la única opción que tuviéramos de recargar la tabla de particiones fuese reiniciar el sistema. Evidentemente, en sistemas en producción, esto puede resultar imposible y traería dolores de cabeza a cualquier sysadmin.

Este comportamiento no ha sido restaurado hasta la versión 2.3 del paquete parted. Pero en la reciente versión 6.3 de RHEL aún se utiliza la 2.1 de  parted.

¿Solución? Pues antes de tirarnos por un puente, o rompernos la cabeza contra el monitor, podemos utilizar otros recursos de gestión de particiones.

Un ejemplo preciso es el comando partx, miembro del paquete util-linux-ng, que tal y como la descripción dice:

The util-linux-ng package contains a large variety of low-level system
utilities that are necessary for a Linux system to function

nos ofrece una gran variedad de utilidades de bajo-nivel en el sistema.

Ok, y ahora ¿cómo usarlo?

Pues echando mano de las páginas del man relativas a partx, tendremos en consideración los siguientes ejemplos:

Recargar las tablas de particiones del dispositivo /dev/sda en el kernel:

dave@xserinfo # sudo cat /proc/partitions

major minor #blocks name

252    0       6291456   sda
252    1       262144     sda1
252    2       4694016   sda2

dave@xserinfo # sudo partx -a /dev/sda

dave@xserinfo # sudo cat /proc/partitions

major minor #blocks name

252    0       6291456   sda
252    1       262144     sda1
252    2       4694016   sda2
252    3       262144     sda3

Como se puede apreciar, sin necesidad de reiniciar el sistema, recargamos la tabla de particiones.

A la hora de eliminar una partición, nos encontraremos con el mismo problema, así que también haremos uso del comando partx para resolverlo:

dave@xserinfo # sudo cat /proc/partitions

major minor #blocks name

252    0       6291456   sda
252    1       262144     sda1
252    2       4694016   sda2
252    3       262144     sda3

dave@xserinfo # sudo partx -d –nr 3 /dev/sda

dave@xserinfo # sudo cat /proc/partitions

major minor #blocks name

252    0       6291456   sda
252    1       262144     sda1
252    2       4694016   sda2

La opción -d elimina una partición de la tabla en uso por el kernel, pero hemos de indicarle el número de partición con la opción –nr, en nuestro ejemplo partx -d –nr 3 /dev/sda. Pero no sólo podemos indicarle una única partición, sino que podemos indicar un rango de particiones, partx -d –nr 3-6 /dev/sda. Esto daría de baja las particiones 3, 4, 5 y 6 del dispositivo sda en el kernel, y sólo tendremos en cuenta que para poder darlas de baja deberán estar desmontadas, si no no las eliminará, pero si es una partición extendida…. DEBEREMOS TENER CUIDADO.

2 thoughts on “Partprobe y RHEL 6.X

  1. Federico says:

    Hola, José, buena explicación. Actualmente estoy trabado en una situación similar. El SO es un CentOS 6.9 y no he encontrado forma alguna de poder informar al kernel que la tabla de particiones ha cambiado. En la situación que planteas se agrega una sda3. Yo agregue un disco a un RAID y quise seguir usando las mismas particiones expandiéndolas, pero al intentar usar todos estos comandos y otros sugeridos por ahí, me dicen que la partición está en uso, y no tengo forma de eliminarla y crearla otra vez o actualizarla de manera alguna. La única opción que veo es reiniciar, pero dado el tipo de servidor traería muchos problemas. Se te ocurre alguna otra manera de poder esquivar esto? Saludos. Federico

    • Hola Federico.
      Creo que existe un error de conceptos en cuanto a las tareas a realizar.
      En el caso que documento es para agregar una nueva partición a un disco existente con una partición montada como raíz del sistema operativo.
      Por lo que puedo entender de tu comentario, lo que quieres es añadir un nuevo disco a un RAID y ampliar el sistema de ficheros?? en cuyo caso, es una tarea totalmente distinta.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *