¿Cómo uso la nueva tabla fdisk sin reiniciar (kpartx)?

11

Cuando ejecuto fdisk y cambio el tamaño de una partición, fdisk dice al final de su salida:

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

Me gustaría hacerlo sin tener que reiniciar (y luego escribir un script que lo haga) ¿Cómo uso kpartx para hacer esto correctamente? He intentado:

kpartx -f -v /dev/mmcblk0

Qué salidas:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

y:

kpartx -a -v /dev/mmcblk0

que salidas:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

Esto es para una tarjeta SD en un raspi que ejecuta debian.

EDITAR: Para aclarar lo que estoy tratando de hacer; Estoy borrando un p3 no utilizado de una tarjeta SD y redimensionando p2 para llenar la tarjeta. La tarjeta actualmente contiene una pequeña partición de arranque p1 y p2 es donde se encuentra el sistema operativo.

Pulpo
fuente
¿La tarjeta SD está actualmente en uso? (Por ejemplo, ¿tiene un sistema de archivos montado?)
derobert
@derobert, sí. tiene 2 particiones: una pequeña partición de arranque y una partición principal más grande donde se encuentra la mayoría del sistema operativo. Solo estoy tratando de expandir la segunda partición para llenar la tarjeta.
Octopus
2
Estoy bastante seguro de que esa es la respuesta, no puedes. El núcleo no volverá a leer una tabla de particiones a menos que el dispositivo no esté en uso ...
derobert 03 de
Ciervas partprobeayuda?
Gilles 'SO- deja de ser malvado'

Respuestas:

7

Usted quiere partx -u, no kpartx(que opera en dispositivos mapeadores de dispositivos).

psusi
fuente
¿Cuál es el propósito de la -ubandera?
IgorGanapolsky
1
@IgorGanapolsky, para actualizar la tabla de partición del núcleo para que coincida con la del disco uno. Un rápido man partxhabría respondido esto.
psusi
@ Octopus Esto lo hizo por mí, donde partprobe no lo hizo. Partprobe luego regresó sin ese error.
Duncan X Simpson
6

Creo que @derobert (quien comentó sobre la pregunta original) probablemente sea correcto. En el caso de fdisking una partición que se está utilizando actualmente, parece que no hay otra opción que reiniciar.

Incluso cuando uso partprobe(que se obtiene con apt-get install parted) obtengo el siguiente resultado:

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.
Pulpo
fuente
Hice lo mismo, una buena noticia es que pude desmontar, ejecutar partprobe <device> y volver a montar ambas particiones sin reiniciar. Desafortunadamente, todavía requería tiempo de inactividad debido al cierre de los servicios.
Rahly
3
Las versiones más recientes de parted/ partprobeno darán dicho error y se pueden usar en una partición montada sin reiniciar.
psusi
@psusi, estoy usando una versión reciente de partedpero sigo teniendo el mismo error. La solución es desmontar el dispositivo antes de ejecutarlo parted, luego no tiene que reiniciar su sistema para informar al núcleo que use la nueva partición en lugar de la partición anterior
MyWrathAcademia
1

Estaba teniendo este problema porque olvidé desmontar el dispositivo. Después de:

sudo umount /dev/sdb

fdisk funcionó correctamente.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
fuente
1
Todavía recibo un error: Llamar a ioctl () para volver a leer la tabla de particiones. No se pudo volver a leer la tabla de particiones: Dispositivo o recurso ocupado
IgorGanapolsky