Redimensionamento ao vivo de uma partição GPT no Linux

9

No Linux eu usei para redimensionar as partições do MBR usando o fdisk, mesmo em sistemas de arquivos ativos, e emita um resize2fs / pvresize / ... (dependendo do tipo fs) para obter o novo espaço alocado.

Ultimamente tenho usado partições Xen e GPT, e notei que, infelizmente, o parted não parece permitir o redimensionamento instantâneo de uma partição montada. Na verdade, ela vai reclamar:

Error: Partition XXX is being used. You must unmount it before you modify it with Parted.

Eu tentei o comando resize e até rm + mkpart , mas ambos irão reclamar sobre a partição sendo montada.

Como posso fazer isso?

    
por cyberz 15.10.2013 / 19:40

5 respostas

10

A maneira mais segura de fazer isso é inicializar usando uma mídia de emergência (um live CD ou algo semelhante) e usar o GParted, que redimensionará tanto a partição quanto o sistema de arquivos que ela contém. Isso funcionará apenas se a partição não estiver sendo usada no momento.

Se você não puder perder tempo de inatividade, poderá tentar usar gdisk em vez de parted . Você precisará excluir a partição que deseja redimensionar e criar uma nova em seu lugar com o mesmo ponto inicial, como você faria com fdisk . gdisk está disposto a trabalhar em um disco em uso, embora o kernel não possa registrar nenhuma alteração. Nesse caso, você pode precisar usar partprobe ou kpartx para fazer com que o kernel aceite a nova tabela de partição, ou mesmo reinicialize o computador se isso não funcionar. (Isso tudo deve ser bem parecido com o uso de fdisk .)

    
por 17.10.2013 / 19:35
5

Isso geralmente funciona apenas com distribuições Linux mais recentes. Ferramentas necessárias:

  • partprobe (geralmente parte do parted)
  • gdisk / sgdisk

Uma partição GPT armazena um cabeçalho de backup no final do disco. Se você redimensionou o dispositivo subjacente, o cabeçalho de backup estará em algum lugar no meio. O primeiro passo é mover o cabeçalho da partição para o final do disco.

Assumindo que o disco é / dev / sda e a partição é / dev / sda3 (também deve ser a última partição):

sgdisk -e /dev/sda

Em seguida, exclua a última partição e recrie-a:

sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda

Você normalmente verá uma mensagem indicando que o kernel não pode recarregar a tabela de partições. Você precisa executar o partprobe para que a partição seja registrada com o novo tamanho:

partprobe /dev/sda

Se isso não der certo, você terá que reinicializar a máquina virtual. Depois disso, você pode desenvolver seu sistema de arquivos com a ferramenta apropriada, para ext4, etc:

resize2fs /dev/sda3

Cuidado : executar o sgdisk pode ser destrutivo. Certifique-se de ter procedimentos de backup adequados.

    
por 14.12.2016 / 16:59
3

Veja um exemplo que uma ferramenta automatizada usa para redimensionar uma partição on-line, de uma só vez:

sgdisk -d 1 -n 1:2048:0 -c 1: -u 1:E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1:0700 /dev/xvda

Aqui está a lista de opções para o comando sgdisk:

  • -d 1 a primeira partição do delete
  • -n 1: 2048: 0 diz criar nova partição "número 1", com setor de início 2048. End setor="0" que significa "usar todo o espaço disponível para esta partição
  • -u define um guid exclusivo para essa partição (isso é específico para partições GPT); você poderia usar 'R' para o GUID ser definido como um valor aleatório. Você também pode obter o ID das partições atuais usando gdisk /dev/xvda; p output para reutilizar o mesmo uid
  • -t 1: 0700 basicamente significa que a primeira partição é do tipo typecode '0700'.

/ dev / xvda era o disco que reparticionamos.

Portanto, exclui e cria uma nova partição em seu lugar imediatamente.

PS. Algumas notas no typecode '0700'. Do homem SGDISK (8)

   -t, --typecode=partnum:{hexcode|GUID}
          Change a single partition's type  code.  You  enter  the  type  code  using  either  a  two-byte  hexadecimal  number,  as 

described earlier, or a fully-specified GUID value, such as EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.

A melhor explicação para o que significa "0700" aqui - link

"But wait," you say, "I thought the disk had a FAT partition!" Indeed it does. Windows uses a single GUID code for all its data partitions, be they FAT or NTFS. In the past, the same code has been used in Linux for its data partitions. (More on this shortly....) Thus, in this case several different MBR codes are all translated into a single GPT GUID code. GPT fdisk uses, somewhat arbitrarily, the 0x0700 code (or more precisely, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) for all of these.

No meu caso, acredito que foi uma partição ext4 do Linux, mas o código de tipo da partição não significa o tipo de sistema de arquivos, então '0700' se parece mais com um tipo catchall para o sgdisk. Pelo menos nos casos que eu vi.

PPS. Pode ser necessário executar partprobe para o kernel para se tornar ciente da alteração do particionamento sem reinicializar o sistema.

    
por 26.12.2016 / 08:31
1

Você está perguntando sobre o redimensionamento de um volume lógico? Aqui está como eu faria:

vgextend vgname /dev/sdb3
lvextend -L +3T /dev/mapper/location
resize2fs /mount/point

OR (xfs):

xfs_growfs /mount/point -D <bytes>
    
por 02.11.2013 / 06:34
1

Estou apenas resumindo algumas respostas e comentários aqui:

parted simplesmente se recusará a alterar qualquer partição montada. gdisk fará o trabalho para você, mas não está no repositório padrão do RHEL ou do CentOS. No entanto, ele está no repositório EPEL .

Lembre-se de que alterar as partições em um disco que está em uso pode impedir que o kernel registre as alterações. Se isso acontecer, use partprobe , partx ou reinicialize.

    
por 08.03.2014 / 02:21