Às vezes, ao redimensionar ou mexer com partições em um disco, o cfdisk dirá:
Wrote partition table, but re-read table failed. Reboot to update table.
(Isso também acontece com outras ferramentas de particionamento, então estou pensando que esse é um problema de Linux e não de cfdisk.) Por que isso e por que isso acontece apenas às vezes e o que posso fazer para evitá-lo?
Nota: Assuma que nenhuma das partições que estou editando esteja aberta, montada ou em uso.
Atualizar:
O cfdisk usa ioctl(fd, BLKRRPART, NULL)
para dizer ao Linux para reler a tabela de partição. Duas das outras ferramentas recomendadas até agora ( hdparm -z
DEVICE
, sfdisk -R
DEVICE
) fazem exatamente a mesma coisa. O partprobe
DEVICE
comando, por outro lado, parece usar um novo ioctl chamado BLKPG, que pode ser melhor; Eu não sei. (Ele também recai no BLKRRPART se o BLKPG falhar.)
O BLKPG parece ser uma operação "esta partição foi alterada; aqui está o novo tamanho" e parecia ser partprobe
chamada individualmente em todas as partições do dispositivo aprovadas; portanto, deve funcionar se as partições individuais não forem usadas. No entanto, não tive a oportunidade de experimentá-lo.
man sfdisk
diz:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
Respostas:
IMHO a resposta mais confiável / melhor é
fonte
kpartx
eudevadm trigger
por 10 minutos. Obrigado!Reler as informações da tabela de partições nem sempre funciona, mas tente
ou
Se funcionar, os valores em / proc / partitions serão alterados.
fonte
hdparm
comando só funcionará se as partições não estiverem montadas.sfdisk -R
foi removido em algum lugar entre o util-linux 2.24.2 e 2.26.1 #man sfdisk
diz:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
No Centos7:
De acordo com https://access.redhat.com/solutions/199573
Você deveria tentar :
Funcionou para mim.
fonte
Dada essa suposição, a tabela de partição pode ser verificada novamente com êxito e o problema não surgirá. Se você está recebendo esse erro, é porque a tabela de partição está atualmente em uso e, portanto, não pode ser verificada novamente sem criar inconsistências.
fonte
Não é baseado na partição que você está editando.
Suponha que você tenha apenas um disco rígido (
/dev/sda
) e duas partições (/dev/sda1
,/dev/sda2
) e tenha montado apenas uma partição (/dev/sda1
). Se você excluir ou alterar algo sobre outra partição que nem esteja montada (/dev/sda2
), você receberá o erro de que a leitura da tabela de partição falhou e o kernel usará a tabela antiga.Mas se você tiver dois discos rígidos (
/dev/sda
,/dev/sdb
) e nenhuma das partições de (/dev/sdb
) estiver em uso. Em seguida, você pode adicionar / excluir / redimensionar / editar partições/dev/sdb
e elas serão relidas sem nenhum problema. Mas mesmo que uma partição do / dev / sdb tenha sido montada durante a alteração. Então o kernel continuará usando a tabela antiga.fonte
Eu (o questionador original) tive uma situação há alguns dias atrás, quando nenhuma das outras respostas (incluindo
partprobe /dev/sdX
, atualmente, a resposta aceita e a mais votada) funcionou. O que funcionou, no entanto, foi o seguinte:(Não sei por que isso funcionou e os outros não, mas estou feliz que funcionou, pois me salvou de uma reinicialização em um servidor ocupado.)
fonte
estou no centos 6.5 x64; kernel 2.6.32. e estou testando o truque do fdisk para redimensionar.
Todos os comandos a seguir não fizeram a releitura do kernel:
eu ainda preciso de uma reinicialização para fazê-lo funcionar
fonte
Com todos os pontos de montagem desmontados, execute o Yocto 2.4:
Ainda não foi possível recarregar a tabela de partições após a exclusão das partições no dispositivo. Também tentaram - e falharam foram:
Todos relataram erros semelhantes "BLKRRPART falhou: dispositivo ou recurso ocupado ..." instruindo-me a reiniciar. Essa falha nos métodos de trabalho anteriores possivelmente se deve ao fato de o udev estar agora sob controle do systemd? Pensando nessas linhas, tentei:
E de repente meu disco está disponível novamente, sem uma reinicialização!
fonte
systemd
mundo moderno , ESTA é a resposta correta. Observe que você também precisa reiniciar um desses (ou ambos)systemd-udev-settle
esystemd-udev-trigger
. Reiniciarsystemd-udevd
como Camp disse não foi suficiente para mim. Mas reiniciar também os outros dois fez o truque!Quando um comando como
blockdev --rereadpt /dev/sdX
falha comisso geralmente significa que alguma partição (antiga) ainda é de alguma forma usada pelo kernel.
Possíveis causas / correções:
sdX1
- ainda está montada - verifiquemount
e desmonte/dev/sdX1
faz parte de uma invasão de software - verifiquecat /proc/mdstat
e possivelmente interrompa as matrizes relevantes, por exemplomdadm --stop /dev/md126
/dev/sdX1
faz parte de um volume físico LVM - verifique compvdisplay
/vgdisplay
e possivelmente desative comvgchange
/dev/sdX1
faz parte de algum mapeamento de dispositivo - por exemplo, viacryptsetup
- check/dev/mapper
e,lsblk
e possivelmente remove o mapeamento (por exemplocryptsetup luksClose
)ps
e, possivelmente, mate umSe uma ferramenta - dizer
blockdev --rereadpt
não aqueles geralmente semelhantes, como (partx -uv
,kpartx
,partprobe
,kpartprobe
) falhar de forma semelhante até que a causa raiz é eliminado.fonte
Você também pode tentar:
(Mas não vai funcionar, veja o comentário abaixo)
fonte
kpartx -a <partition>
pode ser executado duas vezes na partição recém-criada .... em vez de reiniciar o sistema.fonte
sync; sync; sync
"? ☺ Sinto cheiro de superstição ...Lembre-se de verificar se o serviço udev está em execução. Isso é especialmente útil quando partprobe, hdparm, blockdev e vários outros comandos não parecem fazer diferença em quais arquivos de dispositivo estão disponíveis no diretório / dev /.
fonte
Para mim nem
partprobe
oublockdev
solução funcionou. Embora, este funcione:fonte
Se você ler a página de manual de 'man oracleasm-scandisks', anote o texto abaixo. O oracleasm está usando / proc / partitions como a fonte de todas as varreduras realizadas. Você deve ter seus dispositivos brutos listados em / proc / partitions antes de poder fazer um scandisk. Os parâmetros Scanorder e Scanexclude que você coloca em / etc / sysconfig / oracleasm estão relacionados aos nomes encontrados em / proc / partitions (!!!!).
---------- man oracleasm-scandisks ------ ...
COMO A DIGITALIZAÇÃO ACONTECE A digitalização prossegue em quatro estágios básicos.
fonte
oracleasm-scandisks