Por que não podemos estender as partições para a esquerda de forma eficiente?

Por que não podemos estender as partições para a esquerda de forma eficiente?

Sistemas de arquivos modernos, como ext4 e btrfs, suportam redimensionamento. Mesmo aqueles que não o suportam intrinsecamente, como o FAT, possuem ferramentas de terceiros que o suportam de qualquer maneira. Mas eles sempre apoiam a extensão para a direita, nunca diretamente para a esquerda.

A extensão para a esquerda é feita copiando a partição para a esquerda (byte por byte em muitos casos) e depois estendendo para a direita. Todas as respostas que How do I extend a partition to the leftjá vi foram backup, delete partition, make a new partition.

Não é tão simples quanto alterar o limite da partição e depois mover/atualizar as tabelas de inode?

Responder1

Mas eles sempre apoiam a extensão para a direita, nunca diretamente para a esquerda.

Presumivelmente, você está se referindo a representações de HDD/SSD que usam uma matriz linear de setores ou blocos lógicos.
O setor/bloco mais à esquerda teria endereço de bloco lógico (absoluto) (LBA) de 0.
O setor/bloco mais à direita seria o final da unidade e teria o maior LBA.
Observe que o LBA normalmente é representado por um número inteiro não assinado de 48 bits na interface ATA.

A extensão para a esquerda é feita copiando a partição para a esquerda (byte por byte em muitos casos) e depois estendendo para a direita.

Essa não é uma descrição precisa.
Em vez de"copiando"partição, a partição é realocada movendo-a, setor/bloco por setor/bloco (não"byte por byte").

Não é tão simples quanto alterar o limite da partição e depois mover/atualizar as tabelas de inode?

Obviamente que não, já que essa operação nunca é oferecida.

A partição é apenas um contêiner definido para um sistema de arquivos.
A partição é definida fisicamente em termos de um LBA inicial, um LBA final e o número de setores/blocos.
Outros atributos de uma partição são irrelevantes para esta discussão.

O sistema de arquivos definido para a partição usará LBAsrelativopara o início da partição.
O sistema de arquivos não se importa nem está ciente da posição de sua partição no HDD/SSD.
O sistema de arquivos só reconhece LBAs começando em 0 (o início de sua partição) até o LBA correspondente ao final da partição.
Ao usar o endereçamento relativo, o sistema de arquivos é inibido (e, portanto, garantido) de acessar qualquer setor/bloco fora de sua partição.

Se"alterando o limite da partição"significa redefinir o início da partição sem mover o sistema de arquivos para o novo início da partição, então isso cria cenários insolúveis.

Se você tentasse usar os LBAs existentes, a nova área de partição teria LBAs menores que zero, que não podem ser representados com números inteiros sem sinal. Portanto, não há como endereçar a área recém-criada à “esquerda” da partição original.

Se você tentar recalcular cada LBA armazenado no sistema de arquivos para seu novo valor relativo, estará tentando resolver uma tarefa quase impossível de encontrar cada LBA no sistema de arquivos. Ignore quaisquer LBAs e você terá a certeza de eventual corrupção do sistema de arquivos.
Mesmo se você conseguir atualizar cada LBA, o sistema de arquivos poderá parecer corrompido porque geralmente existem entidades específicas do sistema de arquivos que precisam estar localizadas em LBAs específicos (relativos). Mas o"alteração do limite da partição"alterou os locais das entidades que deveriam estar em LBAs fixos (em relação ao início da partição).

Resumindo, o início da partição e a posição do sistema de arquivos dentro dessa partição devem ser mantidos consistentes.

informação relacionada