Gerenciamento de Volume: Como mover espaço de uma partição para outra?

6

Estou configurando uma instância de redhat ec2 e, por padrão, o software que estou usando (chamado qradar ) criou os seguintes volumes nos dois dispositivos de armazenamento de 500g ebs anexados à instância:

$ lvs
  LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  storetmp  rootrhel  -wi-ao----   20.00g                                                    
  varlog    rootrhel  -wi-ao----  <20.00g                                                    
  store     storerhel -wi-ao---- <348.80g                                                    
  transient storerhel -wi-ao----  <87.20g 

$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/xvda2                       500G  1.4G  499G   1% /
devtmpfs                          16G     0   16G   0% /dev
tmpfs                             16G     0   16G   0% /dev/shm
tmpfs                             16G   17M   16G   1% /run
tmpfs                             16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/storerhel-store      349G   33M  349G   1% /store
/dev/mapper/storerhel-transient   88G   33M   88G   1% /transient
/dev/mapper/rootrhel-storetmp     20G   33M   20G   1% /storetmp
/dev/mapper/rootrhel-varlog       20G   35M   20G   1% /var/log
tmpfs                            3.2G     0  3.2G   0% /run/user/1000

Eu preciso que meu storetmp seja 100g. Como posso mover 80g de armazenamento de store para storetmp ?

Também parece que eu preciso mudar algum espaço de xvdb3 para xvdb2:

# lsblk
NAME                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda                    202:0    0   500G  0 disk 
├─xvda1                 202:1    0     1M  0 part 
└─xvda2                 202:2    0   500G  0 part /
xvdb                    202:16   0   500G  0 disk 
├─xvdb1                 202:17   0    24G  0 part [SWAP]
├─xvdb2                 202:18   0    40G  0 part 
│ ├─rootrhel-varlog     253:2    0    20G  0 lvm  /var/log
│ └─rootrhel-storetmp   253:3    0    20G  0 lvm  /storetmp
└─xvdb3                 202:19   0   436G  0 part 
  ├─storerhel-store     253:0    0 348.8G  0 lvm  /store
  └─storerhel-transient 253:1    0  87.2G  0 lvm  /transient

Observe que os diretórios estão sendo usados pelo software em execução na caixa e não estão vazios. Portanto, excluí-los está fora de questão. Preciso que isso seja feito imediatamente:

$ ls -l /dev/mapper/storerhel-transient
lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/storerhel-transient -> ../dm-3
$ ls -l /dev/mapper/rootrhel-varlog 
lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/rootrhel-varlog -> ../dm-0
$ ls -l /dev/mapper/storerhel-store 
lrwxrwxrwx 1 root root 7 Aug 17 04:10 /dev/mapper/storerhel-store -> ../dm-2
    
por Alex Cohen 10.08.2018 / 01:49

1 resposta

3

Um extra de 80 GB no EC2 EBS custa algo abaixo de US $ 12 por mês. Manipulações on-line provavelmente levarão mais de uma hora de seu trabalho e um risco de tempo de inatividade se algo der errado - quanto vale esse valor para você?

Pague por alguma capacidade extra, adicione-a à sua instância como um terceiro disco xvdc , inicialize-a como um PV do LVM (você não precisa nem colocar uma tabela de partição nela: apenas pvcreate /dev/xvdc será suficiente ). Em seguida, adicione o novo PV ao seu rootrhel VG ( vgextend rootrhel /dev/xvdc ) e agora você pode estender seu /storetmp com a capacidade adicionada.

lvextend -L +80G /dev/mapper/rootrhel-storetmp
xfs_growfs /storetmp  #or the appropriate tool for your filesystem type 

Com seu problema imediato resolvido, agora você pode agendar algum tempo de inatividade no momento adequado.

Se você estiver usando o sistema de arquivos XFS (como o RHEL / CentOS 7 faz por padrão), durante o próximo tempo de inatividade agendado, você criará tarballs do conteúdo atual de /store e /transient , desmontará e removerá todo o arquivo storerhel VG, adicione seu PV xvdb3 ao rootrhel VG e, em seguida, recrie os LVs para /store e /transient filesystems usando estimativas mais realistas para suas necessidades de capacidade e restaure o conteúdo dos tarballs. Fim do tempo de inatividade.

Agora, seu rootrhel VG tem três PVs: xvdb2 , xvdb3 e xvdc e muito espaço para suas necessidades.

Se você quiser parar de pagar por xvdc , poderá usar pvmove /dev/xvdc para migrar automaticamente os dados do VG em xvdc para o espaço não alocado em xvdb2 e / ou xvdb3 . Você pode fazer isso on-line; apenas não o faça no momento da carga de trabalho de E / S máxima para evitar um impacto no desempenho. Então vgreduce rootrhel /dev/xvdc , echo 1 > /sys/block/xvdc/device/delete para dizer ao kernel que o dispositivo xvdc está indo embora, e então diga à Amazon que você não precisa mais do seu disco xvdc .

Tenho quase 20 anos de experiência trabalhando com armazenamento em disco LVM (primeiro com o HP-UX LVM e mais tarde com o Linux LVM, uma vez que ele amadureceu o suficiente para ser usado em ambiente corporativo). Estas são as regras que eu vim usar com o LVM:

  • Você nunca deve criar dois VGs quando um é suficiente.

Em particular, ter dois VGs em um único disco é provavelmente um erro que causará dor de cabeça. A realocação da capacidade de disco dentro de um VG é tão flexível quanto o tipo de sistema de arquivos permite; capacidade de movimentação entre VGs em partes menores do que uma PV já existente geralmente não vale a pena o incômodo.

  • Se houver incerteza em seus requisitos de espaço em disco (e sempre há), mantenha seus LVs no lado pequeno e algum espaço não alocado na reserva.

Contanto que o seu VG tenha capacidade não alocada disponível, você pode estender os LVs e sistemas de arquivos on-line, conforme necessário, com um ou dois comandos rápidos. É um trabalho de uma banana para um administrador de sistemas treinado de macaco .

Se não houver capacidade não alocada no VG, adquira um novo disco, inicialize-o como um novo PV, adicione-o ao VG que precisa de capacidade e prossiga com a extensão como de costume. A redução dos sistemas de arquivos é mais propensa a erros, pode exigir tempo de inatividade ou pode até ser impossível sem o backup de & recriando o sistema de arquivos em tamanho menor, dependendo do tipo de sistema de arquivos. Assim, você desejará evitar situações que exigem encolhimento on-line de sistemas de arquivos o máximo possível.

  • O microgerenciamento do espaço em disco pode ser arriscado e é muito trabalhoso. O trabalho é caro.

Ok. Tecnicamente, você poderia criar um arquivo de 80 GB em /store , losetup em um dispositivo de loop e transformá-lo em um PV que você poderia adicionar ao seu rootrhel VG ... mas fazendo isso resultaria em um sistema que provavelmente cairia em um modo de recuperação de usuário único na inicialização, a menos que você configurasse um script de inicialização personalizado para esses sistemas de arquivos e VGs e acertasse na primeira vez.

Errado, e da próxima vez que seu sistema for reinicializado por qualquer motivo, você terá que fazer um tempo de inatividade não planejado para solucionar problemas e corrigir ou recriar de forma mais realista os sistemas de arquivos a partir do zero e restaurar o conteúdo dos backups, porque é mais simples tentando solucionar problemas nesta bagunça do júri.

Ou se você estiver usando ext4 filesystem que pode ser on-line reduzido, você pode reduzir o sistema de arquivos /store , diminuir o LV, usar pvmove --alloc anywhere para consolidar o espaço livre para o final do xvdb3 PV, reduza o PV, reduza a partição, execute partprobe para efetivar as alterações sem reinicializar, crie uma nova partição xvdb4 , inicialize-a como um novo PV e adicione-a a rootrhel VG ...

MAS se você cometer um erro nesta seqüência para que seu sistema de arquivos / PV se estenda para além do seu contêiner LV / partição, e seu sistema de arquivos é alterado para o modo somente leitura com um sinalizador de erro que pode ser redefinido executando uma verificação do sistema de arquivos , resultando em tempo de inatividade não planejado obrigatório.

    
por 19.08.2018 / 16:11