Introdução
Nesse post vou demonstrar como realizar e configurar a RAID 1 (espelhamento) via Software no Proxmox 3.x.
É praticamente uma cópia traduzida do http://www.howtoforge.com/proxmox-2-with-software-raid , só que tem algumas correções para a versão 3.x do proxmox.
Utilizei uma VM para realizar a escrita desse post. Mas já implementei em diversas máquinas físicas esse procedimento. Lembrando que para fazer o RAID 1 (espelhamento) ambos os discos devem ser idênticos.
O tamanho de disco utilizado foi de 20GB.
OBS: Só utilize esse tipo de RAID caso você não tenha RAID via controladora física e confiável.
Num próximo post irei demonstrar como recuperar a raid degrada.
Atualizando o Proxmox
# apt-get update # apt-get upgrade
Instalando a RAID
Vamos assumir que o primeiro disco seja o /dev/sda e o segundo disco seja /dev/sdb. Para verificar se seus discos são esses digite:
# fdisk -l
Caso não sejam esses seus discos basta realizar as alterações necessárias. Nesse post utilizaremos o /dev/sda e o /dev/sdb.
Vamos a instalação do software aka mdraid
# apt-get install mdadm
Após a instalação do pacote, irá aparecer a seguinte tela:
Vamos agora carregar os módulos do kernel:
# modprobe linear # modprobe raid0 # modprobe raid1 # modprobe raid5 # modprobe raid6 # modprobe raid10
Verificar se os módulos foram carregados:
# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] unused devices: <none>
Vamos copiar a tabela de partição do disco sda para o sdb:
# sfdisk -d /dev/sda | sfdisk --force /dev/sdb Checking that no-one is using this disk right now ... OK Disk /dev/sdb: 2610 cylinders, 255 heads, 63 sectors/track sfdisk: ERROR: sector 0 does not have an msdos signature /dev/sdb: unrecognized partition table type Old situation: No partitions found New situation: Units = sectors of 512 bytes, counting from 0 Device Boot Start End #sectors Id System /dev/sdb1 * 2048 1048575 1046528 83 Linux /dev/sdb2 1048576 41943039 40894464 8e Linux LVM /dev/sdb3 0 - 0 0 Empty /dev/sdb4 0 - 0 0 Empty Warning: partition 1 does not end at a cylinder boundary Warning: partition 2 does not start at a cylinder boundary Warning: partition 2 does not end at a cylinder boundary Successfully wrote the new partition table Re-reading the partition table ... If you created or changed a DOS partition, /dev/foo7, say, then use dd(1) to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1 (See fdisk(8).)
Alterar o tipo de partição do sdb para “linux raid autodetect”
# fdisk /dev/sdb Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 * 2048 1048575 523264 fd Linux raid autodetect /dev/sdb2 1048576 41943039 20447232 fd Linux raid autodetect Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Para nos certificar que não há nenhum vestígio de instalações anteriores de RAID no sdb, execute:
# mdadm --zero-superblock /dev/sdb1 # mdadm --zero-superblock /dev/sdb2
Se você obtiver a seguinte saída:
mdadm: Unrecognised md component device - /dev/sdb1
Não se preocupe, quer dizer que não há nenhuma instalação de raid anterior.
Agora vamos criar o nosso array RAID:
# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. # mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
No comando abaixo, demonstra a saúde da sua RAID, [_U] ou [U_] significa que uma das matrizes da sua RAID está degrada. Se suas matrizes estiverem corretas ficaram assim [UU] como veremos mais a frente.
# cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active (auto-read-only) raid1 sdb2[1] 20430720 blocks super 1.2 [2/1] [_U] md0 : active (auto-read-only) raid1 sdb1[1] 522944 blocks super 1.2 [2/1] [_U]
Realizando o backup do mdadm.conf e vamos acrescentar a nova configuração da raid.
# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.disabled # mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Por padrão o Proxmox usa o /dev/sda1 para boot, e LVM no /dev/sda2 para root, data e swap.
Lembrando que para esse post utilizei uma VM com HD’s de 20GB cada. Se seu disco tiver tamanho diferente desses terá que tomar alguns cuidados. Terá que adaptar alguns valores na criação a frente do LVM do segundo disco.
# lvscan ACTIVE '/dev/pve/swap' [2.50 GiB] inherit ACTIVE '/dev/pve/root' [5.00 GiB] inherit ACTIVE '/dev/pve/data' [9.50 GiB] inherit
Repare acima, no destaque em negrito. Se seu disco for diferente de 20GB, que provavelmente é, esses valores serão diferentes. Guarde esses valores pois você irá utiliza-lo já já.
Criando volume físico
# pvecreate /dev/md1 Physical volume "/dev/md1" successfully created
Olhe o novo volume físico
PV /dev/sda2 VG pve lvm2 [19.50 GiB / 2.50 GiB free] PV /dev/md1 lvm2 [19.48 GiB] Total: 2 [38.98 GiB] / in use: 1 [19.50 GiB] / in no VG: 1 [19.48 GiB]
Vamos criar o grupo de volume pve1
# vgvreate pve1 /dev/md1 Volume group "pve1" successfully created
Lembra dos valores que pedi para você guardar? Então vamos utilizar eles aqui.
# lvcreate --name swap --size 2.5G pve1 # lvcreate --name root --size 5G pve1 # lvcreate --name data --size 9.5G pve1
Para verificar se você criou tudo certo, no retorno do comando abaixo, você verá que os tamanhos serão iguais do /dev/pve e do /dev/pve1, como podem observar abaixo.
# lvscan ACTIVE '/dev/pve/swap' [2.50 GiB] inherit ACTIVE '/dev/pve/root' [5.00 GiB] inherit ACTIVE '/dev/pve/data' [9.50 GiB] inherit ACTIVE '/dev/pve1/swap' [2.50 GiB] inherit ACTIVE '/dev/pve1/root' [5.00 GiB] inherit ACTIVE '/dev/pve1/data' [9.50 GiB] inherit
Criaremos o sistema de arquivos
# mkfs.ext3 /dev/md0 # mkswap /dev/pve1/swap -f # mkfs.ext3 /dev/pve1/root # mkfs.ext3 /dev/pve1/data
Criando os diretórios e montando as novas partições
# mkdir /mnt/boot # mkdir /mnt/root # mkdir /mnt/data # mount /dev/md0 /mnt/boot # mount /dev/pve1/root /mnt/root # mount /dev/pve1/data /mnt/data
Ajustando o sistema para usar a RAID 1
# vi /etc/fstab
Arquivo original
# <file system> <mount point> <type> <options> <dump> <pass> /dev/pve/root / ext3 errors=remount-ro 0 1 /dev/pve/data /var/lib/vz ext3 defaults 0 1 UUID=8455e76b-9e35-4d86-8e48-d51de2f77677 /boot ext3 defaults 0 1 /dev/pve/swap none swap sw 0 0 proc /proc proc defaults 0 0
Vamos alterar para
# <file system> <mount point> <type> <options> <dump> <pass> /dev/pve1/root / ext3 errors=remount-ro 0 1 /dev/pve1/data /var/lib/vz ext3 defaults 0 1 /dev/md0 /boot ext3 defaults 0 1 /dev/pve1/swap none swap sw 0 0 proc /proc proc defaults 0 0
Note que alterei tudo que tinha pve para pve1 e aonde tinha um UUID para /dev/md0.
Agora faremos configurações no boot loader GRUB2.
# cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
Verifique a versão do seu kernel atual
# uname -r 2.6.32-23-pve
Vamos editar o arquivo /etc/grub.d/09_swraid1_setup
# vi /etc/grub.d/09_swraid1_setup #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'Proxmox, with RAID1' --class proxmox --class gnu-linux --class gnu --class os { insmod raid insmod mdraid insmod part_msdos insmod ext2 set root='(hd0,msdos1)' echo 'Loading Proxmox with RAID ...' linux /vmlinuz-2.6.32-23-pve root=/dev/mapper/pve1-root ro quiet echo 'Loading initial ramdisk ...' initrd /initrd.img-2.6.32-23-pve }
Como não usaremos mais o UUID, temos que alterar o arquivo /etc/default/grub
# vi /etc/default/grub
Descomente a linha 26. “GRUB_DISABLE_LINUX_UUID=true”
Aplicando as configurações no grub
# update-grub # update-initramfs -u
Copiando os arquivos
# cp -dpRx / /mnt/root # cp -dpRx /boot/* /mnt/boot # cp -dbRx /var/lib/vz/* /mnt/data
Agora reinicie a máquina e torça para bootar uhauhahuahuauhahu
Poderá aparecer uma mensagem de erro, ignore e aperte enter.
Após reiniciar, verifique os pontos de montagem.
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=124256,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=101380k,mode=755) /dev/mapper/pve1-root on / type ext3 (rw,relatime,errors=remount-ro,user_xattr,acl,barrier=0,data=ordered) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=202740k) /dev/mapper/pve1-data on /var/lib/vz type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=0,data=ordered) /dev/md0 on /boot type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=0,data=ordered) rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime) /dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other) beancounter on /proc/vz/beancounter type cgroup (rw,relatime,blkio,name=beancounter) container on /proc/vz/container type cgroup (rw,relatime,freezer,devices,name=container) fairsched on /proc/vz/fairsched type cgroup (rw,relatime,cpuacct,cpu,cpuset,name=fairsched)
Vamos remover o grupo de volume pve
# lvremove /dev/pve/root Do you really want to remove and DISCARD active logical volume root? [y/n]: y Logical volume "root" successfully removed # lvremove /dev/pve/swap Do you really want to remove and DISCARD active logical volume swap? [y/n]: y Logical volume "swap" successfully removed # lvremove /dev/pve/data Do you really want to remove and DISCARD active logical volume data? [y/n]: y Logical volume "data" successfully removed # vgremove /dev/pve Volume group "pve" successfully removed # pvremove /dev/sda2 Labels on physical volume "/dev/sda2" successfully wiped
Iremos alterar nesse passo, os tipos das três partições do disco /dev/sda para linux raid autodetect
# fdisk /dev/sda Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): p Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00001521 Device Boot Start End Blocks Id System /dev/sda1 * 2048 1048575 523264 fd Linux raid autodetect /dev/sda2 1048576 41943039 20447232 fd Linux raid autodetect Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Vamos adicionar /dev/sda1 e /dev/sda2 em /dev/md0 e /dev/md1
# mdadm --add /dev/md0 /dev/sda1 mdadm: added /dev/sda1 # mdadm --add /dev/md1 /dev/sda2 mdadm: added /dev/sda2
Verifique a sincronização da raid, o comando abaixo irá ser executado a cada 1 segundo.
# watch -n 1 cat /proc/mdstat
Vamos ajustar o /etc/mdadm/mdadm.conf para a nova situação
# cp /etc/mdadm/mdadm.conf.disabled /etc/mdadm/mdadm.conf # mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Agora vamos apagar o /etc/grub.d/09_swraid1_setup
# rm -f /etc/grub.d/09_swraid1_setup
Aplicandos as configurões do grub
# update-grub # update-initramfs -u
Vamos nos certificar que o GRUB2 bootloader está instalado em ambos os discos
# grub-install /dev/sda # grub-install /deb/sdb
Agora vamos reiniciar e verificar se está tudo ok!
Se iniciar foi tudo executado com sucesso!
OBS: Esse post não garante que irá funcionar com você, mas fique a vontade para mandar suas dúvidas.
moleza hein….aheuhauhuheua