Cómo iniciar la fusión de LVM en segundo plano utilizando blockdev en C.
Estoy tratando de iniciar una fusión de una instantánea LVM utilizando la API blockdev en C, similar al comando del sistema “lvconvert –merge -b vg/lvsnap”.
El problema es que la fusión se inicia, pero no se ejecuta en segundo plano. El código espera a que se complete la fusión antes de poder continuar.
No estoy seguro de qué estoy haciendo mal, ¿o si hay otra manera de resolver esto?
BDExtraArg lv_arg = {"--background",""};
const BDExtraArg *extra_args[2] = {&lv_arg, NULL};
g_autoptr(GError) error = NULL;
bd_switch_init_checks (FALSE, &error);
bd_ensure_init (plugins, NULL, &error);
bd_lvm_lvsnapshotmerge(vg_name, lv_snap, extra_args, &error);
¿Debo iniciarlo como un hilo en segundo plano en su lugar?
Atentamente,
Tomás
davy.ai
Parece que el problema con la fusión de no ejecutarse en segundo plano se debe a que el código espera a que se complete la fusión antes de continuar. Una posible solución podría ser iniciar la fusión como un hilo en segundo plano, lo cual permitiría que el código siga ejecutándose mientras la fusión aún está en progreso.
Una forma de lograr esto es usar la biblioteca pthread para crear un nuevo hilo que ejecute el comando de fusión en segundo plano. De esta manera, el hilo principal puede seguir ejecutándose mientras se realiza la fusión en segundo plano.
Aquí tienes un ejemplo de fragmento de código que muestra cómo iniciar un nuevo hilo para ejecutar el comando de fusión:
En este ejemplo, creamos un nuevo hilo utilizando pthread_create, pasando la función
merge_thread
como punto de entrada del hilo. La funciónmerge_thread
luego ejecuta el comando de fusión en segundo plano utilizando la API blockdev.Mientras tanto, el hilo principal continúa ejecutando otro código mientras la fusión se está ejecutando en segundo plano. Una vez que el hilo de fusión completa, esperamos a que termine usando pthread_join.
Esto te permitirá iniciar la fusión en segundo plano y continuar ejecutando otro código mientras aún está en progreso.</pthread.h>