Como uso a nova tabela fdisk sem reinicializar (kpartx)?

11

Quando executo o fdisk e altero o tamanho de uma partição, o fdisk diz no final de sua saída:

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

Eu gostaria de fazer isso sem ter que reiniciar (e depois escrever um script que o faça) Como usar o kpartx para fazer isso corretamente? Eu tentei:

kpartx -f -v /dev/mmcblk0

Quais saídas:

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

e:

kpartx -a -v /dev/mmcblk0

quais saídas:

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

Isto é para um cartão SD em um raspi executando o debian.

EDIT: Para esclarecer o que estou tentando fazer; Estou excluindo um p3 não utilizado de um cartão SD e redimensionando o p2 para preencher o cartão. Atualmente, a placa contém uma pequena partição de inicialização, p1 e p2, onde está o sistema operacional.

Polvo
fonte
O cartão SD está atualmente em uso? (Por exemplo, ele tem um sistema de arquivos montado sobre ele?)
derobert
@derobert, sim. possui 2 partições: uma pequena partição de inicialização e uma partição principal maior, onde fica a maioria do sistema operacional. Estou apenas tentando expandir a 2ª partição para preencher o cartão.
Octopus
2
Tenho certeza de que essa é a resposta - você não pode. O kernel não relerá uma tabela de partição a menos que o dispositivo não esteja em uso ...
derobert 31/03
Será que partprobeajuda?
Gilles 'SO- stop be evil'

Respostas:

7

Você deseja partx -u, não kpartx(que opera em dispositivos mapeadores de dispositivos).

psusi
fonte
Qual é o objetivo da -ubandeira?
precisa saber é o seguinte
1
@IgorGanapolsky, para atualizar a tabela de partição do kernel para corresponder à do disco. Um rápido man partxteria respondido a isso.
Psusi
@ Octopus Isso fez isso por mim, onde o Partprobe não. O Partprobe retornou sem esse erro.
Duncan X Simpson
6

Acredito que @derobert (que comentou a pergunta original) provavelmente está correto. No caso de fdisking de uma partição que está sendo usada no momento, parece que não há outra opção a não ser reiniciar.

Mesmo quando eu uso partprobe(que é obtido com apt-get install parted), recebo a seguinte saída:

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.
Polvo
fonte
Fiz a mesma coisa, a boa notícia é que consegui desmontar, executar o partprobe <dispositivo> e remontar as duas partições sem reiniciar. Infelizmente, ainda era necessário tempo de inatividade devido ao encerramento dos serviços.
Rahly
3
Versões mais recentes de parted/ partprobenão fornecerão esse erro e podem ser usadas em uma partição montada sem reinicialização.
Psusi 18/05/2015
@ psusi, estou usando uma versão recente, partedmas ainda recebo o mesmo erro. A solução é desmontar o dispositivo antes de executar partedno dispositivo, então você não tem que reiniciar o sistema, a fim de informar o kernel para usar a nova partição em vez da partição antiga
MyWrathAcademia
1

Eu estava tendo esse problema porque esqueci de desmontar o dispositivo. Após um:

sudo umount /dev/sdb

O fdisk funcionou corretamente.

Ciro Santilli adicionou uma nova foto
fonte
1
Ainda recebo um erro: Chamar o ioctl () para reler a tabela de partição. Falha na leitura da tabela de partição .: Dispositivo ou recurso ocupado
IgorGanapolsky