Como alterar um sistema de partição física para LVM?

10

Eu tenho um servidor com o Debian que possui 3 partições físicas cobrindo todo o disco: inicialização, raiz e troca. Agora eu quero substituir essas partições por partições LVM. Eu sei como instalar o Debian com LVM no início, mas neste caso não consigo instalar o sistema no início porque o provedor me fornece um servidor com acesso remoto e o sistema instalado dessa maneira.

Como posso alterar essas partições usando apenas uma conexão ssh e possivelmente outro servidor remoto onde colocar alguns dados temporais?

Daniel Hernández
fonte
2
Nota aos eleitores próximos: Este não é um engano da questão referenciada, porque há uma reviravolta aqui: totalmente remota.
sysadmin1138

Respostas:

-1

Você não pode substituí-los em um servidor em execução por apenas partições /, / boot e <swap>. A única maneira de fazer isso é desmontar a partição /, reduzi-la e criar uma nova partição LVM no final, mas como você só tem acesso remoto ao ssh, não é possível diminuir uma partição montada ao vivo sem corrupção de dados.

mricon
fonte
3
É possível redimensionar um sistema de arquivos ext3 enquanto ele está montado: linux.die.net/man/8/ext2online .
200_success
6
Nunca diga nunca ...
the-wabbit
21

Uma atualização rápida do meu lado. Contexto: hoje fiquei online um servidor dedicado instalado com o esquema de partição física em vez do LVM. Havia 3 partições:

/ boot (ext4) - 512M / (ext4) - troca 730G - 8G

Devido à natureza de não ter acesso ao console, o objetivo final era converter a partição raiz existente para o LVM.

Considerando que o ext4 não é encolhível, a única maneira era reutilizar a partição swap como raiz temporária. Também decidi configurar a raiz temporária com o LVM para garantir que o processo funcione da maneira correta.

Primeiro saiu a troca:

swapoff -a

Redimensione a partição via parted (originalmente foi iniciada de 742 a 750):

parted
resize 3 742 744

e criou uma partição para o LVM:

mkpart primary ext2 744 750
set 4 lvm on

Criação de sistema de arquivos PV / VG / LV / para a raiz temporária:

pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot

O próximo passo foi copiar a raiz para o local temporário:

mount /dev/VolGroup00/tmproot /media
rsync -ravzxq / /media/

Quando tudo estava lá, a entrada para o sistema de arquivos raiz em / media / etc / fstab também tinha que ser alterada:

/dev/VolGroup00/tmproot /                       ext4    defaults        1 1

Quase lá, o último e digamos que a parte mais indesejada sem acesso ao console foi modificar o /boot/grub/grub.conf:

entrada original:

title CentOS (2.6.32-279.22.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=UUID=e769af21-d9e1-455f-a6a7-7a9c84d8cbea rd_NO_LUKS LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

entrada modificada:

title CentOS (2.6.32-279.22.1.el6.x86_64) LVM
insmod lvm
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu SYSFONT=latarcyrheb-sun16 crashkernel=auto dolvm root=/dev/mapper/VolGroup00-tmproot panic=10 
#rd_NO_DM rd_NO_MD rd_NO_LUKS
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

Apenas para garantir: insmod lvm foi adicionado juntamente com o parâmetro dolvm para o kernel e o caminho raiz também foi alterado para root = / dev / mapper / VolGroup00-tmproot. Importante usar o / dev / mapper / path no momento. Como depósito de segurança, também adicionei o parâmetro panic = 10 e não alterei a entrada de inicialização padrão no cabeçalho. Em vez disso, tentei dizer ao grub para inicializar com a nova configuração apenas uma vez e, em caso de falha, a entrada original poderia funcionar:

grub
savedefault --default=1 --once

E finalmente:

reboot

Foi bom para mim na primeira vez, então repeti todo o procedimento com a criação de um novo grupo de volumes em cima da partição raiz original e, finalmente, coloquei a raiz no lugar certo usando o LVM.

Espero que isto ajude.

uha
fonte
1
Isso funcionou muito bem para mim, convertendo minha instalação de 2 discos RAID 1 para LVM no RAID 1 totalmente remota (tinha alguns discos sobressalentes pré-instalados). No grub2, porém, a nova maneira de reiniciar uma entrada de menu apenas uma vez é primeiro editar seu arquivo / etc / default / grub para garantir que GRUB_DEFAULT = salvo. Então update-grub. Então você corre grub-reboot #para definir o item de menu a ser usado apenas na próxima reinicialização. Então você pode reiniciar.
quer
O Ubuntu (e debian) tem seu próprio sistema para modificar a configuração do grub. A atualização da partição raiz pode ser feita de maneira mais limpa, da maneira especificada aqui: unix.stackexchange.com/a/5318/192211
EFraim
3

Nada é impossível no Linux, mas você teria que ser determinado e louco para tentar o que descreve. Lembre-se de que, se você tiver apenas acesso SSH, há uma boa chance de perder o acesso ao servidor se cometer um erro. Se você possui um console "serial" remoto e um interruptor virtual, isso pode ajudar um pouco. Dito isto, se você tem uma instalação totalmente nova sem dados a perder, por que não experimentá-la? Encontrei um tutorial para converter remotamente um sistema Linux em RAID1 ; as etapas que você tentaria para o LVM seriam análogas.

Primeiro, vamos considerar a necessidade de espaço de armazenamento temporário. Supondo que você não tenha um segundo disco no servidor, você pode reduzir as partições existentes usandoparted . Obviamente, isso exige que suas partições de inicialização e raiz usem menos da metade do disco, e elas devem usar um sistema de arquivos encolhível. (XFS e JFS, por exemplo, não podem ser reduzidos.)

Após reduzir as partições existentes, é possível criar um volume físico LVM no espaço liberado, um grupo de volumes e volumes lógicos dentro dele. Replicar seus sistemas de arquivos. (Ao replicar seu sistema de arquivos raiz, você deve matar tudo sshd, exceto e, idealmente, estar no modo de usuário único. Você provavelmente precisará usá-lo rsyncem ddvez de estar replicando um sistema de arquivos montado.)

Em seguida, você prepararia um initrd com suporte ao LVM e diria ao GRUB para inicializar no novo sistema, conforme descrito no tutorial de Warren Togami. Depois de fazer isso, é simples excluir os sistemas de arquivos antigos usando partede aumentando os volumes LVM.

Boa sorte! Deixe-nos saber se funcionou!

200_success
fonte
3

Eu já migrei minha partição raiz "/" que estava apontando para uma partição de disco "/ dev / sda2" com 10G no centos 6 para uma partição LV, as etapas executadas foram as seguintes:

  • Adicione um disco rígido ao VMware de 10G.
  • reconhecer o disco sem reiniciar o sistema.
ls / sys / class / scsi_host / | enquanto lê x; faça eco "- - -"> / sys / class / scsi_host / $ {x} / scan; feito
  • Criar uma partição no novo disco, vamos supor que meu novo disco seja / dev / sdb
  • Trabalhando com :
fdisk / dev / sdb
  • Estar na interface "fdisk" permite criar uma partição com a tecla "n" atribuindo + 9G de capacidade, depois altere o tipo de partição com a tecla "t" atribuindo "8e" (partição lvm) e, finalmente, pressione "w" para aplicar as alterações , se você quiser ver a aparência da tabela de partição, pressione a tecla "p".
  • Depois que a partição é criada, podemos validar que o dispositivo foi criado com o seguinte comando (o comando funciona quando o disco não está sendo usado):
partprobe / dev / sdb
  • Depois que o dispositivo sair fisicamente, vamos criar os objetos LVM na seguinte ordem:
pvcreate / dev / sdb1
vgcreate vg_root / dev / sdb1
lvcreate -v -n lv_root vg_root -L 9G
  • Uma vez criadas as unidades de BT, vamos atribuir um FS e montá-lo no sistema atual.
mkfs -t ext4 / dev / vg_root / lv_root
mkdir / mnt / new_root /
mount -t ext4 / dev / vg_root / lv_root / mnt / new_root /
  • se você não sabe qual é o FS da sua partição atual, pode ser encontrado com comandos como:
df -lhT
cat / etc / fstab
blkid
  • quando o novo LV for montado, podemos continuar copiando todos os arquivos do sistema.
encontre / -xdev | cpio -pmvd / mnt / new_root /
  • Depois que os arquivos são copiados, podemos alterar o "chroot", mas antes vamos montar algumas partições:
cd / mnt / new_root /
mount -t proc / proc proc
monte -t ​​sysfs / sys sys /
mount --rbind / dev dev /
  • vamos agora mudar o chroot
chroot / mnt / new_root /
  • quando estivermos na nova raiz, modifique o arquivo:
vi / etc / fstab
  • deixando o arquivo quase semelhante a:
# UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4 padrões 1 1
Padrões / dev / mapper / vg_root-lv_root / ext4 1 1
  • Depois que o arquivo for modificado corretamente, vamos criar um arquivo na raiz com o nome "./autorelabel", caso você esteja trabalhando com o SELINUX "reforçando" ou "permissivo".
toque em ./autorelabel
  • Agora vamos sair do ambiente chroot de / mnt / new-root
Saída
  • Se as alterações forem feitas com base em seu cenário, vamos executar uma das últimas alterações, ou seja, modificar o arquivo grub "/boot/grub/grub.conf", adicionando um novo menu (não modifique sua opção de inicialização atual até o novo um adicionado funciona corretamente).
# antes
título CentOS 6 (2.6.32-573.el6.x86_64)
        raiz (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = pt_BR.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 rd_NO_DM rhgb silencioso
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# agora
título CentOS 6 (2.6.32-573.el6.x86_64)
        raiz (hd0,0)
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = pt_BR.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 rd_NO_DM rhgb silencioso
        initrd /initramfs-2.6.32-573.el6.x86_64.img

título CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        raiz (hd0,0)
        insmod lvm
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro raiz do dolvm = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 = pc KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# a linha adicionada foi 
título CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        raiz (hd0,0)
        insmod lvm
        kernel /vmlinuz-2.6.32-573.el6.x86_64 ro raiz do dolvm = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 = pc KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img
  • Depois que as alterações no arquivo grub forem feitas, vamos concluir a regeneração de um novo arquivo isitr do initrd:
cd / boot
cp -av initramfs - $ (uname -r) .img initramfs - $ (uname -r) .img.old
dracut -f
  • finalmente uma reinicialização:
init 6
# ou
reiniciar
  • Depois que o menu grub aparecer, escolha o novo adicionado "CentOS 6 (2.6.32-573.el6.x86_64-lvroot)" e valide se está funcionando corretamente.
  • Se o sistema estiver funcionando corretamente e não estiver usando o "/ dev / sda", ele poderá ser removido e desanexado da sua VM ou servidor físico.
dd se = / dev / zero de = / dev / sda bs = 1
  • Última definição íngreme como entrada padrão, o novo item foi adicionado ao menu do grub "/boot/grub/grub.conf":
# default = 0
padrão = 1

Espero que as informações fornecidas anteriormente sejam úteis para alguém.

desde já, obrigado,

Manuel Lazo

Manuel Lazo
fonte
1

Ele poderia configurar um sistema de resgate intermediário na partição de troca (anteriormente desativada) (trabalho destrutivo de nervos, se você não tiver um RAC na máquina) e trabalhar a partir daí. Além disso, existem ferramentas de redimensionamento on-line para certos sistemas de arquivos e, em seguida, diminuir a partição posteriormente e reiniciar é um caso do KWYD, mas possível.

rackandboneman
fonte
Para descrever duas idéias ainda mais loucas que até funcionariam literalmente com apenas UMA partição no disco: a) crie um grande arquivo vazio na partição raiz, certificando-se de que seja alocado de forma contígua, trabalhe nele através do driver de loopback ... e depois munge a tabela de partição para que a partição inicie no primeiro bloco físico desse arquivo. b) faça o chroot (ou até mesmo pivot_root, se possível) em um ramdisk e configure uma base e backup lá ... ative o sistema de arquivos raiz real sob você.
rackandboneman