resize2fs
e outras ferramentas no pacote e2fsprogs assumem que a chamada de sistema read
retorna um erro ao tamanho total solicitado dos encontros. Isso não é verdade em geral: read
tem permissão para retornar menos, você deve chamar isso em um loop. Eu acho que o kernel Linux garante que read
retorna todos os dados dos dispositivos de bloco em algumas circunstâncias, mas eu fui mordido por isso no passado, com e2fsprogs fazendo suposições erradas no kernel.
O fato de o e2fsprogs não fazer um loop em torno de read
é realmente um bug. Na melhor das hipóteses, é uma limitação: talvez a forma como o código é escrito está correta para algumas versões do kernel do Linux ao acessar um dispositivo de bloco. Mas essa limitação não está documentada em nenhum lugar. O código é definitivamente defeituoso ao acessar um arquivo de imagem.
Verifique os logs do kernel em busca de erros. Se o kernel reportar um erro, então o problema não é um bug no resize2fs (ou, pelo menos, nada mais do que um pobre relatório de erros).
Se o kernel não reportar erros de disco, execute
strace -o resize2fs.strace sudo resize2fs /dev/sda2 115G
e verifique as chamadas do sistema read
.
read(3, "…", REQUESTED) = READ
Existe uma breve leitura se REQUESTED READ . Se você observar isso e puder reproduzi-lo, valeria a pena fazer um relatório de bug. Explicar exatamente como você acionou isso: a versão exata do kernel, como o kernel foi compilado, a versão exata do resize2fs, qual driver de hardware gerencia /dev/sda
, em qual software de máquina virtual está sendo executado. Eu recomendo relatar o bug para o Ubuntu ao invés de para o upstream, já que o upstream geralmente não é bom em falar com não-especialistas.