Como eu combino dois volumes lógicos que residem em um único volume físico no LVM?

13

Eu tenho dois volumes lógicos, um é montado como /, o outro é montado como / home.

Eu quero combiná-los, porque o volume / está constantemente ficando sem espaço. (Sim, eu sei o que está usando todo esse espaço; não, eu não posso removê-lo.)

Estou disposto a deixar a máquina por um dia ou dois para fazer isso.

SO: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux (CentOS)

    
por Nick ODell 13.03.2013 / 20:08

4 respostas

9

Eu terminei e a nova partição funcionou. No entanto, como faltam áreas em ambos os guias, vou resumir o que fiz. Por favor, note que eu substituí meu nome de usuário por zzzz e o nome do meu computador por xxxxxxx . Além disso, todos os comandos devem ser executados como root, salvo indicação em contrário.

Primeiro, eu fiz o backup:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Isso cria um backup compactado do diretório / home e o coloca em minha unidade externa. (Observe que sua unidade externa terá um caminho diferente).

Agora, você precisa reinicializar no modo de usuário único.

reboot

Quando o computador é ligado novamente, você precisa procurar uma tela como esta:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Pressione qualquer tecla para interromper isso. Você deve ver uma tela como esta:

Pressione a , depois Espaço e digite single . Pressione Enter.

Você deve ver um prompt como este:

 [root@xxxxxxx /] # 

Digite os seguintes comandos:

df -h

Ele deve mostrar Size , Used e Avail . Estamos interessados em Used .
Anote quanto espaço está sendo usado pelo seu volume inicial. Nós precisaremos disso mais tarde.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Lembre-se de quanto espaço o volume da sua casa usou? Duplique isso e dê a ele este comando. Por exemplo, eu tinha 15 gigabytes usados pelo meu diretório pessoal, então dimensionei para 30 gigabytes.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Atenção : Este próximo passo é aquele que pode perder dados. Faça certeza que você colocou em um tamanho maior que o comando anterior. Adicione 5 Gigabytes para ter certeza.

lvresize -L 35G vg_xxxxxxx/lv_home

Diga à partição raiz para usar todo o espaço que acabamos de liberar.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Copie seus dados para a partição raiz

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(By the way, que -a é importante, porque senão tudo será propriedade de root, e você não quer isso.)
Faça uma verificação rápida de que os dados foram copiados corretamente:

ls -lR /home

Agora, removemos a partição inicial e informamos ao root para obter o novo espaço novamente.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Neste ponto, cometi um grande erro, do qual você pode aprender. Eu reiniciei e, quando o sistema voltou a funcionar, ele se recusou a montar minha partição raiz como leitura-gravação porque não conseguia montar minha partição / home. Então, antes de reiniciarmos, digitamos

nano /etc/fstab

Uma dessas linhas dirá ao sistema para montar a partição / home. Coloque um # antes. Pressione Ctrl-O, Enter, Ctrl-X. Agora você pode reiniciar.

(Hipoteticamente, se você esquecer de editar o fstab como eu fiz, o comando para montar sua partição root será mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root / )

    
por 14.03.2013 / 22:19
3

AVISO: Faça backup de todos os dados críticos antes de fazer qualquer coisa!

Você precisaria mover todos os dados da partição / home para outra partição, partição local ou unidade externa ou em qualquer outro lugar em que tenha espaço suficiente.

Remova o / home lv e, em seguida, expanda o / (root) lv

Copie os dados de volta para o diretório / home

Editar 1

A resposta acima está supondo que você não tem espaço suficiente na partição raiz para colocar os dados na partição inicial.

Se este não for o caso, apenas monte a partição home em outro lugar e copie os dados, por exemplo:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Em seguida, basta remover a partição inicial e expandir a partição raiz

    
por 13.03.2013 / 20:22
3

Você pode fazer isso sem qualquer armazenamento externo, sendo executado a partir de / , mas será necessário desmontar /home .

Este não é um procedimento particularmente arriscado se você for cuidadoso, mas, mesmo assim, o conselho padrão se aplica: faça backups primeiro e teste-os.

Usarei foo para o nome do grupo de volumes e root e home como nomes de volumes lógicos. Isso torna os caminhos do volume lógico foo/root e foo/home e os caminhos do dispositivo /dev/mapper/foo-root e /dev/mapper/foo-home . Eu suponho que eles estão no mesmo grupo de volume, caso contrário, isso fica mais complicado e depende do layout do volume físico dos dois grupos de volumes.

Primeiro, desmonte /home e execute e2fsck -f /dev/mapper/foo-home . Em seguida, reduza o sistema de arquivos primeiro e o volume lógico de acordo. Execute resize2fs /dev/mapper/foo-home NNNN em que NNNN é o número de blocos que você deseja reter dentro do volume (você pode usar kB ou MB ou GB com o sufixo K , M ou G ). Depois de encolher o sistema de arquivos, reduza o volume lógico com lvresize -L MMMM foo/home , onde MMMM é um número de megabytes (observe que a unidade padrão é diferente de resize2fs , mas você pode usar os mesmos sufixos K , M , G ). Tenha muito cuidado para não reduzir o volume lógico para além do sistema de arquivos - este é o único passo perigoso neste procedimento.

Agora há espaço não utilizado no grupo de volumes. Execute lvresize -l +100%FREE foo/root para fazer com que o volume raiz capture todo o espaço livre no grupo de volumes. Em seguida, execute resize2fs /dev/mapper/foo-root (sem parâmetro de tamanho) para ampliar o sistema de arquivos para abranger todo o volume lógico; A ampliação pode ser feita enquanto o volume é montado.

Agora você tem espaço para copiar alguns arquivos. Se você não tem espaço suficiente para tudo, mova-se o máximo que puder e repita o procedimento.

Depois de copiar todos os arquivos em /home , você está pronto para destruí-lo. Verifique se /home está vazio (se você moveu os arquivos) ou se todos os arquivos em /home foram copiados para /root (se você copiou os arquivos). Para destruir o volume lógico agora desnecessário, execute lvremove foo/home . Finalmente, amplie o volume da raiz com lvresize -l 0%FREE foo/root e seu sistema de arquivos com resize2fs /dev/mapper/foo-home .

    
por 13.03.2013 / 23:20
1

OK, eu me encontrei exatamente na mesma posição. Parece que o CentOS cria um pequeno volume de raiz por padrão e preenche o restante do seu espaço com /home . Até testei minha configuração primeiro em uma VM, mas com o disco menor, o CentOS não criou o volume inicial. Eu peguei esse problema antes de me tornar espaço restrito e também imaginei como não ter que entrar no modo de usuário único. Como segue:

Obtenha acesso à máquina, o ssh é bom (assumindo usuário não root).

  1. cd / , então você não está no diretório inicial
  2. sudo -s nós seremos root por tudo isso
  3. lsof /home verificar que ninguém está usando o volume inicial, não deve ser
  4. mv , tar ou similar o conteúdo da página inicial para outro lugar
  5. lvremove centos/home
  6. Edite /etc/fstab e comente ou remova a linha de /home
  7. Mova o conteúdo da casa que você fez backup antes de voltar para /home - agora você está em uma posição segura, uma reinicialização aqui deve ser OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root no CentOS 7, outros podem usar resize2fs
  10. df -h você conseguiu?

Espero que isso seja mais fácil para alguém. É realmente incrível o que você pode fazer nos sistemas de arquivos atualmente.

    
por 18.04.2015 / 09:53

Tags