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

14

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

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, não consigo removê-lo.)

Estou disposto a desligar a máquina por um dia ou dois para fazê-lo.

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)

Nick ODell
fonte
1
Por que não apenas aumentar o /volume, não é esse o ponto de usar o LVM?
jasonwryan
2
@jasonwryan Por que preciso ajustar manualmente como o espaço em disco é alocado? Não é esse o objetivo de um sistema de arquivos?
Nick Odell
@NickODell Não. Se um volume é muito pequeno para armazenar os dados, é muito pequeno. A capacidade geral é um fator de tamanho do volume, não do tamanho do sistema de arquivos. Os volumes lógicos tornam mais fácil redimensionar os volumes montados e mesclar recursos de armazenamento diferentes em um único volume. Com o LVM, você deve poder fazer o que jasonwryan está sugerindo sem nem mesmo reiniciar: verifique se os usuários comuns estão desconectados (para liberar / home) umount / home no sistema de arquivos raiz e pronto. Se você deseja mesclar, precisará executar um rsync.
Bratchley
@JoelDavis Se eu exigir que todos os usuários façam logout, é relevante se eu preciso reiniciar?
precisa
@NickODell Um ... sim? A maioria dos sistemas Linux são servidores, você deve perceber que isso será uma suposição das pessoas, a menos que você diga o contrário.
Bratchley

Respostas:

9

Eu terminei e a repartição funcionou. No entanto, como faltam áreas nos dois guias, vou resumir o que fiz. Observe que substituí meu nome de usuário zzzze o nome do meu computador por xxxxxxx. Além disso, todos os comandos devem ser executados como root, a menos que indicado de outra forma.

Primeiro, 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 na minha unidade externa. (Observe que sua unidade externa terá um caminho diferente.)

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

reboot

Quando o computador liga 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:

centos de inicialização do grub 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

Deve mostrar-lhe Size, Usede Avail. Estamos interessados Used.
Anote quanto espaço está em uso pelo seu volume doméstico. Nós precisaremos disso mais tarde.

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

Lembre-se de quanto espaço seu volume doméstico usou? Dobre isso e dê a este comando. Por exemplo, eu tinha 15 gigabytes usados ​​pelo meu diretório pessoal, então o dimensionei para 30 gigabytes.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Aviso : Este próximo passo é o que pode perder dados. Certifique- se de colocar 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/

(A propósito, isso -aé importante, porque, caso contrário, tudo será de propriedade do root e você não deseja isso.)
Verifique rapidamente se os dados foram copiados corretamente:

ls -lR /home

Agora nós removemos a partição inicial e dizemos ao root para recuperar o novo espaço.

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, que você pode aprender. Reiniciei e, quando o sistema voltou, ele recusou-se a montar minha partição raiz como leitura-gravação, porque não conseguia montar minha partição / home. Então, antes de reiniciar, digitamos

nano /etc/fstab

Uma dessas linhas dirá ao sistema para montar a partição / home. Coloque um #antes dele. 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 raiz é mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

Nick ODell
fonte
amo os detalhes!
Nr19 /
Eu já tive um problema semelhante, mas não tenho acesso físico à máquina. Existe uma maneira de fazer isso que não exija a inicialização no modo de usuário único?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Teoricamente, sim. Se você tiver acesso ssh, poderá fazer o backup do seu /home. Então, desde que você possa desmontar /home, você pode removê-lo. No entanto, não estou realmente qualificado para conversar com você durante o processo. Isso é algo sobre o qual você deve fazer uma nova pergunta.
Nick Odell
1
@NickODell: Eu fiz uma nova pergunta: askubuntu.com/questions/1115913/…
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Esse é um conselho muito melhor do que eu poderia ter lhe dado.
21419 Nick ODell
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 para qualquer outro lugar em que tenha espaço suficiente.

Remova o / home lv e expanda o / (root) lv

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

Editar 1

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

Se não for esse o caso, basta montar a partição inicial em outro lugar e copiar os dados, por exemplo:

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

Em seguida, remova a partição inicial e expanda a partição raiz

ghm1014
fonte
3

Você pode fazer isso sem nenhum armazenamento externo em execução /, mas precisará 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 fooo nome do grupo de volumes roote homecomo nomes de volume lógico. Isso cria os caminhos do volume lógico foo/roote foo/home, e os caminhos do dispositivo /dev/mapper/foo-roote /dev/mapper/foo-home. Suponho que eles estejam no mesmo grupo de volumes, caso contrário, isso fica mais complicado e depende do layout do volume físico dos dois grupos de volumes.

Primeiro, desmonte /homee corra e2fsck -f /dev/mapper/foo-home. Depois, reduza primeiro o sistema de arquivos e o volume lógico de acordo. Executar resize2fs /dev/mapper/foo-home NNNNem que nnnn é o número de blocos que deseja manter dentro do volume (você pode usar kB ou MB ou GB vez com o sufixo K, Mou G). Depois de encolher o sistema de arquivos, encolher o volume lógico com lvresize -L MMMM foo/homeonde MMMM é um número de megabytes (note que a unidade padrão é diferente resize2fs, mas você pode usar os mesmos sufixos K, M, G). Tenha muito cuidado para não encolher o volume lógico além do sistema de arquivos - esta é a etapa perigosa deste procedimento.

Agora há espaço não utilizado no grupo de volumes. Execute lvresize -l +100%FREE foo/rootpara fazer com que o volume raiz obtenha 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 está montado.

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

Depois de copiar todos os arquivos /home, você estará pronto para destruí-lo. Verifique se /homeestá vazio (se você moveu os arquivos) ou se todos os arquivos /homeforam copiados para /root(se você copiou os arquivos). Para destruir o volume lógico agora desnecessário, execute lvremove foo/home. Por fim, aumente o volume raiz com lvresize -l 0%FREE foo/roote seu sistema de arquivos com resize2fs /dev/mapper/foo-home.

Gilles 'SO- parar de ser mau'
fonte
Nota: / home se recusou a desmontar até reiniciar no modo de usuário único.
quer
Nota: É referido como vg_ (nome da máquina) e lv_home
Nick Odell
Ok, eu consegui funcionar. No entanto, faltam alguns detalhes neste guia, então postarei meu histórico completo de comandos em breve.
precisa
2

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

Obtenha acesso à máquina, 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 estaremos na raiz de tudo isso
  3. lsof /home verifique se ninguém está usando o volume doméstico, não deve
  4. mv, tarOu similar o conteúdo do lar para outro lugar
  5. lvremove centos/home
  6. Edite /etc/fstabe comente ou remova a linha de/home
  7. Mova o conteúdo da casa que você fez o backup antes de voltar para /home- você está agora em uma posição segura; uma reinicialização aqui deve estar 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 facilite para alguém. É realmente incrível o que você pode fazer ao vivo em sistemas de arquivos hoje em dia.

Damon Maria
fonte
É definitivamente mais fácil se você não precisar migrar nenhum dado. :) #
21415 Nick ODell