centos7 xfs clonagem lmv em dispositivos menores

1

Vou apresentar uma pergunta postada em stackoverflow há uma semana, desculpe se alguém encontrou esse spam, mas ainda preciso de ajuda para resolver esse problema. Eu pensei que poderia ser útil também para os outros. Primeiro de tudo, eu tenho um servidor baseado no Centos7 que roda em um hardware não compatível como política corporativa, eu só preciso suportar a tolerância a falhas.

Estou colidindo com uma coisa aparentemente simples.

Eu preciso colocar meu servidor atrás do controlador RAID, isso significa que eu preciso mover minha instalação do CentOS 7 em um dispositivo cabeado nele (um controlador 3ware 9650se-2lp, o computador é uma classe executiva HP, DC7600 Convertible Minitower).

Meus problemas começam com sistemas de arquivos adotados, é um XFS que não pode ser reduzido pelo design. Eu preciso reduzi-lo porque o mesmo disco visto pelo controlador parece menor porque o controlador armazena o firmware nele.

Meu sistema é uma instalação padrão do CentOS 7 com volumes LVM. Após uma semana de documentação sobre o que e como o mapeador de dispositivos funciona, acabei tendo um grupo de volumes chamado "centos" e os volumes lógicos chamados "root", "home" e "swap". Fácil.

# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g 64,00m
# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   3   0 wz--n- 148,56g 64,00m
# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos -wi-ao---- 96,50g
  root centos -wi-ao---- 50,00g
  swap centos -wi-ao----  2,00g

Agora eu preciso reduzir todo o meu layout e eu vou conseguir isso reduzindo o lvm "home" do sda2. Eu planejei ter uma nova instalação para 130G enquanto agora é 148,56G, então eu pensei em reduzir a "casa" de 18,56G.

Primeiro de tudo fdisk para o novo disco para criar os novos dois volumes, sdb1 e sdb2, Depois disso eu comecei a lidar com os volumes lógicos.

# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
# vgextend centos /dev/sdb2
  Volume group "centos" successfully extended
# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  148,56g  64,00m
  /dev/sdb2  centos lvm2 a--  130,00g 130,00g

# lvcreate --size 77,50G --name home1 centos
  Logical volume "home1" created.
# mkfs.xfs /dev/centos/home1
meta-data=/dev/centos/home1      isize=512    agcount=4, agsize=5079040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=20316160, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=9920, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# lvcreate --size 50,00G --name root1 centos
# mkfs.xfs /dev/centos/root1
# lvcreate --size 2G --name swap1 centos
# mkswap /dev/centos/swap1

Depois disso, do Clonezilla do liveecd eu clonei o sda1 em sdb1 sem reescrever a tabela de partições e da linha de comando eu montei os volumes lógicos para copiar os dados. Eu não posso usar o dd simples que eu sei que é o melhor, porque dd irá copiar também o espaço em branco e a nova casa será reduzida.

# mkdir /mnt/home
# mkdir /mnt/home1
# mount -o ro /dev/centos/home /mnt/home
# mount /dev/centos/home1 /mnt/home1
# cd /mnt/home
# find . -mount -print | cpio -pdm /mnt/home1
5885177 blocks
# cd /
# umount home
# umount home1
# mkdir /mnt/root
# mkdir /mnt/root1
# mount -o ro /dev/centos/root /mnt/root
# mount /dev/centos/root1 /mnt/root1
# cd /mnt/root
# find . -mount -print | cpio -pdm /home/root1
43415372 blocks

Feito isso, eu desliguei o computador, desativei o disco sda e movi o sdb na primeira porta sata da minha placa-mãe. Agora sda está a salvo das minhas mãos de pudim. O melhor ainda está por vir.

Eu iniciei novamente a partir do Clonezilla sem copiar nada, e eu limpei e renomei meus volumes lógicos.

# vgreduce --removemissing --force centos
WARNING: Device for PV 0tJwU5-KA41-LEJa-hhFG-SIzx-RGq3-fJNzkm not found or rejected by a filter.
WARNING: Removing partial LV centos/swap.
Logical volume "swap" successfully removed
WARNING: Removing partial LV centos/home.
Logical volume "home" successfully removed
WARNING: Removing partial LV centos/root.
Logical volume "root" successfully removed
Wrote out consistent volume group centos.
# lvrename /dev/centos/root1 /dev/centos/root
Renamed "root1" to "root" in volume group "centos"
# lvrename /dev/centos/home1 /dev/centos/home
Renamed "home1" to "home" in volume group "centos"
# lvrename /dev/centos/swap1 /dev/centos/swap
Renamed "swap1" to "swap" in volume group "centos

Finalmente eu instalei o grub2:

# mount /dev/centos/root /mnt
# mount /dev/sda1 /mnt/boot
# mount --bind /dev /mnt/dev &&
mount --bind /dev/pts /mnt/dev/pts &&
mount --bind /proc /mnt/proc &&
mount --bind /sys /mnt/sys
# chroot /mnt
# grub2-install /dev/sda
# grub2-install --recheck /dev/sda
# grub2-mkconfig -o /boot/grub2/grub.cfg

Eu consertei um aviso no grub2-mkconfig que substitui o update-grub do grub1, habilitando um novo serviço que eu nunca usei antes do lvm2-lvmetad

# grub2-mkconfig -o /boot/grub2/grub.cfg
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found linux image: /boot/vmlinuz-3.10.0-514.21.2.el7.centos.plus.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.21.2.el7.centos.plus.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6f6078afdaf94da59deb321bd428dfdf
Found initrd image: /boot/initramfs-0-rescue-6f6078afdaf94da59deb321bd428dfdf.img
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
done

# systemctl enable lvm2-lvmetad.service
# systemctl enable lvm2-lvmetad.socket
# systemctl start lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.socket

É claro que o início do serviço não funcionou no livecd, eu sei disso.

Uma vez reinicializado meu sistema, tenho vários problemas com o SELinux. Ele fica me devolvendo uma vez que o login foi feito, tanto do remoto quanto do local, ssh ou não. Claro que a partir do livecd é fácil configurar o SELinux como permissivo, mas este é um servidor de produção e hospeda serviços para desenvolvimento como mediawiki e git. Eu não posso começar a usar a unidade clonada, colocar novos dados em um sistema quase bugado, não entendo o que estou errado. Eu tentei reinstalar os pacotes relacionados ao SELinux, mas puramente aleatórios não descobri o que poderia estar errado. Estou faltando alguma coisa?

Obrigado pelas respostas, respeito.

    
por rivaldid 11.07.2017 / 15:28

3 respostas

1

Todas as etapas a seguir (exceto a instalação do gerenciador de inicialização) serão executadas no sistema em execução.

1. Crie partições no sdb

Assim como você criou as partições no sdb. Certifique-se de que sdb1 tenha os mesmos valores inicial e final que sda1. Crie sdb2 exatamente como você fez anteriormente (ou seja, não em todo o restante da unidade)

2. Clone sda1 para sdb1

Remonte / dev / sda1 no modo somente leitura com mount -o remount,ro /boot e clone a partição dd if=/dev/sda1 of=/dev/sdb1 .

3. Troque as unidades e verifique se o sdb inicializa

Troque sda e sdb. Instale o carregador de inicialização no novo sda e certifique-se de que o carregador de inicialização ainda carregue o kernel quando o novo sdb (ou seja, a unidade original) não estiver conectado. Inicialização irá entrar em pânico porque não há volume de raiz, mas agora você sabe que pode inicializar. Reconecte sdb .

3. Estenda seu grupo de volumes

Adicione o novo sda2 ao seu grupo de volume assim: pvcreate /dev/sda2 e vgextend centos /dev/sda2

4. Mova seus volumes de swap e raiz

Os seguintes comandos irão mover não clone seus volumes para sua nova unidade. No entanto, a vontade permanecerá no mesmo grupo de volume

pvmove -n swap /dev/sdb2 /dev/sda2
pvmove -n root /dev/sdb2 /dev/sda2

5. Clone seu / home

Crie um novo volume para / home em sda2, monte-o em algum lugar e copie o conteúdo com xfsdump e xfsrestore

lvcreate --size 77,50G --name new_home centos /dev/sda2
mount /dev/centos/new_home /mnt
xfsdump -J /home | xfsrestore -J /mnt

6. Certifique-se de que os selinux labels foram transferidos

Verifique se ls -Z /home e ls -Z /mnt correspondem

7. Renomear Volumes Domésticos

Instale os dois volumes iniciais e renomeie-os de acordo

umount /home
umount /mnt
lvrename centos/home centos/old_home
lvrename centos/new_home centos/home
mount /home

Você agora tem seu clonado menor / montado em casa. O volume centos / old_home é o último ainda em sdb2. Neste ponto, o sistema deve inicializar e executar sem problemas, mas você ainda precisa se livrar do sdb.

8. Limpeza

Após a reinicialização e a certeza de que tudo ainda funciona como esperado, você poderá remover o volume inicial antigo usando lvremove centos/old_home . Quando você olha para a saída de pvs você deve notar que sdb2 deve estar completamente sem uso.

Neste ponto, você pode usar vgreduce centos /dev/sdb2 e pvremove /dev/sdb2 para que a unidade "antiga" não faça mais parte do seu grupo de volumes.

Agora você pode desligar a caixa e remover a unidade antiga.

    
por 12.07.2017 / 18:47
2

O problema é que o processo de clonagem não copiou os rótulos dos arquivos do selinux.

Inicialize no modo permissivo, touch /.autorelabel , reinicialize novamente. O sistema rotulará todos os arquivos com os rótulos padrão da política (que podem não ser 100% precisos, mas ainda assim serão muito melhores do que agora).

Depois disso, você poderá iniciar o modo de execução novamente.

    
por 11.07.2017 / 16:00
0

Só para tomar nota do que fiz. Apenas para anotar:

1) fdisk / dev / sdb e faça:

  • crie uma nova tabela de partições DOS vazia
  • adicione uma nova partição, 1 para inicialização como sda1, id 83 e mesmo início e fim
  • adiciona uma nova partição, 2 para LVM, id 8e e de 135G, menos que sda2 pois preciso reduzir
  • alterna um sinalizador inicializável na partição 1

2) mount -o remount, ro / boot

3) dd if = / dev / sda1 de = / dev / sdb1

4) reinicie

5) chroot minha raiz

  • monte / dev / centos / raiz / mnt / raiz /
  • monte / dev / sdb1 / mnt / raiz / boot /
  • mount --bind / dev / / mnt / raiz / dev / & & mount --bind / dev / pts & & mount --bind / proc / & & mount --bind / sys / mnt / root / sys
  • chroot / mnt / root /

6) instalar o bootloader

  • grub2-install / dev / sdb
  • grub2-install --recheck / dev / sdb
  • grub2-mkconfig -o /boot/grub2/grub.cfg

7) desligamento

8) troque a unidade

9) verificar se tudo está funcionando bem

  • Atualmente, estou usando boot de sda (nova unidade) e raiz de sdb (antigo dirigir)

10) pvcreate / dev / sda2

11) vgextend centos / dev / sda2

12) pvmove -n troca / dev / sdb2 / dev / sda2

13) pvmove -n raiz / dev / sdb2 / dev / sda2

14) yum instala o xfsdump

15) lvcreate --size 80G --nome new_home centos / dev / sda2

16) mkfs.xfs / dev / centos / new_home

17) mount / dev / centos / nova_home / mnt / raiz /

18) xfsdump -J - / home | xfsrestore -J - / mnt / root /

19) verificar os mesmos selos Selinux

  • ls -Z / home /
  • ls -Z / mnt / root /

20) umount / mnt / root /

21) lvrename / dev / centos / home / dev / centos / old_home

22) lvrename / dev / centos / nova_página / dev / centos / home

23) mount / home /

  • Recebi o erro de desmontar a casa, mas de montar em casa, acho que o novo foi executado bem

24) reboot, tudo está funcionando bem

25) lvremove / dev / centos / old_home

26) vgreduce centos / dev / sdb2

27) pvremove / dev / sdb2

28) desligamento & desconecta sdb

Conclua.

    
por 01.08.2017 / 12:11