Skip to content

Instantly share code, notes, and snippets.

@asdaru
Last active February 1, 2021 14:10
Show Gist options
  • Save asdaru/02233a8540018d2eee40d6fa9753489d to your computer and use it in GitHub Desktop.
Save asdaru/02233a8540018d2eee40d6fa9753489d to your computer and use it in GitHub Desktop.
#!/bin/bash
COLOR_RED="\033[1;31m"
COLOR_GREEN="\033[1;32m"
COLOR_YELLOW="\033[1;33m"
COLOR_LESS="\033[0m"
BACKTITLE="ASDA.RU LTDA - me (985)135-32-52 | asda@asda.ru"
TITLE="MAKE RAID 1"
NULL=/dev/null
test -d /var/log/sa || mkdir -p /var/log/sa
# gpm-libs ---------------------------------------------------------------------
GPM_LIBS=http://mirror.centos.org/centos/7/os/x86_64/Packages/gpm-libs-1.20.7-6.el7.x86_64.rpm
rpm -q gpm-libs 1>$NULL || {
wget -q $GPM_LIBS -O /tmp/`basename $GPM_LIBS` && {
echo -e "${COLOR_YELLOW}Instalando gpm-libs...${COLOR_LESS}"
rpm -ivh /tmp/`basename $GPM_LIBS`
rm -f /tmp/`basename $GPM_LIBS`
} || {
echo -e "${COLOR_RED}Ошибка установки gpm-libs...${COLOR_LESS}"
exit 1
}
}
# tmux-libs ---------------------------------------------------------------------
TMUX_LIBS=http://mirror.centos.org/centos/7/os/x86_64/Packages/tmux-1.8-4.el7.x86_64.rpm
rpm -q tmux 1>$NULL || {
wget -q $TMUX_LIBS -O /tmp/`basename $TMUX_LIBS` && {
echo -e "${COLOR_YELLOW}Instalando gpm-libs...${COLOR_LESS}"
rpm -ivh /tmp/`basename $TMUX_LIBS`
rm -f /tmp/`basename $TMUX_LIBS`
} || {
echo -e "${COLOR_RED}Ошибка установки tmux...${COLOR_LESS}"
exit 1
}
}
# vim --------------------------------------------------------------------------
VIM=http://mirror.centos.org/centos/7/os/x86_64/Packages/vim-filesystem-7.4.629-7.el7.x86_64.rpm
rpm -q vim-filesystem 1>$NULL || {
wget -q $VIM -O /tmp/`basename $VIM` && {
echo -e "${COLOR_YELLOW}Instalando vim-filesystem...${COLOR_LESS}"
rpm -ivh /tmp/`basename $VIM`
rm -f /tmp/`basename $VIM`
} || {
echo -e "${COLOR_RED}Ошибка установки vim...${COLOR_LESS}"
exit 1
}
}
VIM_COMMON=http://mirror.centos.org/centos/7/os/x86_64/Packages/vim-common-7.4.629-7.el7.x86_64.rpm
rpm -q vim-common 1>$NULL || {
wget -q $VIM_COMMON -O /tmp/`basename $VIM_COMMON` && {
echo -e "${COLOR_YELLOW}Instalando vim-common...${COLOR_LESS}"
rpm -ivh /tmp/`basename $VIM_COMMON`
rm -f /tmp/`basename $VIM_COMMON`
} || {
echo -e "${COLOR_RED}Ошибка установки vim-common...${COLOR_LESS}"
exit 1
}
}
VIM_ENHANCED=http://mirror.centos.org/centos/7/os/x86_64/Packages/vim-enhanced-7.4.629-7.el7.x86_64.rpm
rpm -q vim-enhanced 1>$NULL || {
wget -q $VIM_ENHANCED -O /tmp/`basename $VIM_ENHANCED` && {
echo -e "${COLOR_YELLOW}Instalando vim-enhanced...${COLOR_LESS}"
rpm -ivh /tmp/`basename $VIM_ENHANCED`
rm -f /tmp/`basename $VIM_ENHANCED`
} || {
echo -e "${COLOR_RED}Ошибка установки vim-enhanced...${COLOR_LESS}"
exit 1
}
}
# slang ------------------------------------------------------------------------
SLANG=http://mirror.centos.org/centos/7/os/x86_64/Packages/slang-2.2.4-11.el7.x86_64.rpm
rpm -q slang 1>$NULL || {
wget -q $SLANG -O /tmp/`basename $SLANG` && {
echo -e "${COLOR_YELLOW}Instalando slang...${COLOR_LESS}"
rpm -ivh /tmp/`basename $SLANG`
rm -f /tmp/`basename $SLANG`
} || {
echo -e "${COLOR_RED}Ошибка установки slang...${COLOR_LESS}"
exit 1
}
}
# newt -------------------------------------------------------------------------
NEWT=http://mirror.centos.org/centos/7/os/x86_64/Packages/newt-0.52.15-4.el7.x86_64.rpm
rpm -q newt 1>$NULL || {
wget -q $NEWT -O /tmp/`basename $NEWT` && {
echo -e "${COLOR_YELLOW}Instalando newt...${COLOR_LESS}"
rpm -ivh /tmp/`basename $NEWT`
rm -f /tmp/`basename $NEWT`
} || {
echo -e "${COLOR_RED}Ошибка установки newt...${COLOR_LESS}"
exit 1
}
}
clear
# part1 ------------------------------------------------------------------------
PART1()
{
DISKS=$(fdisk -l 2>$NULL | grep ^Disk | grep "/dev/sd[a-z]" | awk {'print $2'} | cut -d: -f1)
cat $NULL > /tmp/disks
for i in `echo $DISKS`
do
echo "$i \"disk $i\" off" >> /tmp/disks
done
SD_ROOT=$(/bin/df | grep ^/dev/sd[a-z] | grep -w / | awk {'print $1'} | sed s/[1-9]//g)
CHOOSE=$(eval whiptail \
--backtitle "\"$BACKTITLE\"" \
--title "\"$TITLE\"" \
--radiolist "\"Select disk \"$SD_ROOT\" where XEN was installed.:\"" 0 0 0 \
$(cat /tmp/disks | grep "$SD_ROOT") 3>&1 1>&2 2>&3)
retval=$?
case "$retval" in
0)
IFDISK=$CHOOSE
;;
1)
rm -f /tmp/disks
exit 0
;;
esac
# DESTINOS ----------------------------------------------------
CHOOSE=$(eval whiptail \
--backtitle "\"$BACKTITLE\"" \
--title "\"$TITLE\"" \
--checklist "\"Select second disk for mdraid\"" 0 0 0 \
$(cat /tmp/disks | grep -v "$IFDISK") 3>&1 1>&2 2>&3)
retval=$?
case "$retval" in
0)
test -z $CHOOSE
OFDISK=$(echo $CHOOSE | sed s/\"//g)
rm -f /tmp/disks
;;
1)
rm -f /tmp/disks
exit 0
;;
esac
# ------------------------------------------------------------------------------
BOOT=bios
df -P | grep -w -q "/boot/efi" && BOOT=uefi
case "$BOOT" in
bios)
TYPECODE4=ef02
;;
uefi)
TYPECODE4=ef00
;;
esac
# ------------------------------------------------------------------------------
# limpando disco destino -------------------------------------------------------
echo -e "${COLOR_YELLOW}Limpando a tabela de partições de \"$OFDISK\"...${COLOR_LESS}"
mdadm --stop /dev/md0 2>$NULL
mdadm --stop /dev/md1 2>$NULL
mdadm --stop /dev/md2 2>$NULL
mdadm --stop /dev/md3 2>$NULL
mdadm --zero-superblock ${OFDISK}1
mdadm --zero-superblock ${OFDISK}2
mdadm --zero-superblock ${OFDISK}3
mdadm --zero-superblock ${OFDISK}5
echo -e "${COLOR_GREEN}sgdisk --zap-all ${OFDISK}${COLOR_LESS}"
sgdisk --zap-all ${OFDISK}
echo
echo -e "${COLOR_YELLOW}Copying GPT table from disk $IFDISK -> $OFDISK...${COLOR_LESS}"
sgdisk -R ${OFDISK} ${IFDISK}
# copiado setores p/ disco destino ---------------------------------------------
echo
echo -e "${COLOR_YELLOW}Setting GPT table for disk \"$OFDISK\"...${COLOR_LESS}"
# 1 / ----------------------------------
echo -e "${COLOR_GREEN}sgdisk --typecode=1:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=1:fd00 ${OFDISK}
# 2 (update) ---------------------------
echo -e "${COLOR_GREEN}sgdisk --typecode=2:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=2:fd00 ${OFDISK}
# 3 lvm --------------------------------
echo -e "${COLOR_GREEN}sgdisk --typecode=3:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=3:fd00 ${OFDISK}
# 4 BIOS boot partition / EFI System ---
# ef02 / ef00
echo -e "${COLOR_GREEN}sgdisk --typecode=4:$TYPECODE4 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=4:$TYPECODE4 ${OFDISK}
# 5 /var/log ---------------------------
echo -e "${COLOR_GREEN}sgdisk --typecode=5:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=5:fd00 ${OFDISK}
# 6 swap -------------------------------
echo -e "${COLOR_GREEN}sgdisk --typecode=6:8200 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=6:8200 ${OFDISK}
# RAID -------------------------------------------------------------------------
echo
echo -e "${COLOR_YELLOW}Configurando raid...${COLOR_LESS}"
lsmod | grep -q ^raid1 || {
echo -e "${COLOR_GREEN}/sbin/modprobe raid1${COLOR_LESS}"
/sbin/modprobe raid1
}
# /dev/md0 -----------------------------
test -b /dev/md0 || {
echo -e "${COLOR_YELLOW}Criando dispositivo de bloco /dev/md0...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mknod /dev/md0 b 9 0${COLOR_LESS}"
mknod /dev/md0 b 9 0
sleep 5
}
# /dev/md1 -----------------------------
test -b /dev/md1 || {
echo -e "${COLOR_YELLOW}Creating block device /dev/md1...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mknod /dev/md1 b 9 1${COLOR_LESS}"
mknod /dev/md1 b 9 1
sleep 5
}
# /dev/md2 -----------------------------
test -b /dev/md2 || {
echo -e "${COLOR_YELLOW}Criando dispositivo de bloco /dev/md2...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mknod /dev/md2 b 9 2${COLOR_LESS}"
mknod /dev/md2 b 9 2
sleep 5
}
# /dev/md3 -----------------------------
test -b /dev/md3 || {
echo -e "${COLOR_YELLOW}Creating block device /dev/md3...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mknod /dev/md3 b 9 3${COLOR_LESS}"
mknod /dev/md3 b 9 3
sleep 5
}
echo
echo -e "${COLOR_YELLOW}Creating \"$OFDISK\" ao raid...${COLOR_LESS}"
# 1 root -------------------------------
echo -e "${COLOR_YELLOW}Creating raid device /dev/md0...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/bin/yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 missing ${OFDISK}1 --metadata=0.90${COLOR_LESS}"
/usr/bin/yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 missing ${OFDISK}1 --metadata=0.90
sleep 5
# 2 (update) ---------------------------
echo -e "${COLOR_YELLOW}Creating raid device /dev/md1...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/bin/yes|mdadm --create /dev/md1 --level=1 --raid-devices=2 missing ${OFDISK}2${COLOR_LESS}"
/usr/bin/yes|mdadm --create /dev/md1 --level=1 --raid-devices=2 missing ${OFDISK}2
sleep 5
# 3 lvm --------------------------------
echo -e "${COLOR_YELLOW}Creating raid device /dev/md2...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/bin/yes|mdadm --create /dev/md2 --level=1 --raid-devices=2 missing ${OFDISK}3${COLOR_LESS}"
/usr/bin/yes|mdadm --create /dev/md2 --level=1 --raid-devices=2 missing ${OFDISK}3
sleep 5
# 5 /var/log ----------------------------
echo -e "${COLOR_YELLOW}Creating raid device /dev/md3...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/bin/yes|mdadm --create /dev/md3 --level=1 --raid-devices=2 missing ${OFDISK}5${COLOR_LESS}"
/usr/bin/yes|mdadm --create /dev/md3 --level=1 --raid-devices=2 missing ${OFDISK}5
sleep 5
# MOVE LVM TO MD2 --------------------------------------------------------------
echo
echo -e "${COLOR_YELLOW}Configure /etc/lvm/lvm.conf...${COLOR_LESS}"
echo -e "${COLOR_GREEN}sed -i 's/metadata_read_only = 1/metadata_read_only = 0/' /etc/lvm/lvm.conf${COLOR_LESS}"
sed -i 's/metadata_read_only = 1/metadata_read_only = 0/' /etc/lvm/lvm.conf
echo
echo -e "${COLOR_YELLOW}Создание volume LVM em /dev/md2...${COLOR_LESS}"
echo -e "${COLOR_GREEN}pvcreate -ff /dev/md2${COLOR_LESS}"
pvcreate -ff /dev/md2
sleep 5
echo -e "${COLOR_YELLOW}Расширение volume LVM до /dev/md2...${COLOR_LESS}"
vgextend `vgscan | grep VG | cut -d' ' -f6 | sed s/\"//g` /dev/md2
sleep 30
echo -e "${COLOR_YELLOW}Перенос volume LVM em ${IFDISK}3 -> /dev/md2...${COLOR_LESS}"
echo -e "${COLOR_GREEN}pvmove ${IFDISK}3 /dev/md2${COLOR_LESS}"
pvmove ${IFDISK}3 /dev/md2
sleep 5
echo -e "${COLOR_YELLOW}Reduzindo volume LVM em ${IFDISK}3...${COLOR_LESS}"
vgreduce `vgscan | grep VG | cut -d' ' -f6 | sed s/\"//g` ${IFDISK}3
sleep 5
echo -e "${COLOR_YELLOW}Удаляем volume LVM em ${IFDISK}3...${COLOR_LESS}"
echo -e "${COLOR_GREEN}pvremove ${IFDISK}3${COLOR_LESS}"
pvremove ${IFDISK}3
sleep 3
# ------------------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Formatando /dev/md0...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mkfs.ext3 -q /dev/md0${COLOR_LESS}"
mkfs.ext3 -q /dev/md0
echo -e "${COLOR_YELLOW}Formatando /dev/md3...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mkfs.ext3 -q /dev/md3${COLOR_LESS}"
mkfs.ext3 -q /dev/md3
echo -e "${COLOR_YELLOW}Montando /dev/md0 em /mnt...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mount /dev/md0 /mnt${COLOR_LESS}"
/usr/bin/mount /dev/md0 /mnt
test -d /mnt/var/log || {
echo -e "${COLOR_YELLOW}Criando /mnt/var/log...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mkdir -p /mnt/var/log${COLOR_LESS}"
mkdir -p /mnt/var/log
}
echo -e "${COLOR_YELLOW}Montando /dev/md3 em /mnt/var/log...${COLOR_LESS}"
echo -e "${COLOR_GREEN}mount /dev/md3 /mnt/var/log${COLOR_LESS}"
/usr/bin/mount /dev/md3 /mnt/var/log
# ------------------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Copiando / -> /mnt${COLOR_LESS}"
echo -e "${COLOR_GREEN}cp -xR --preserve=all / /mnt${COLOR_LESS}"
cp -xR --preserve=all / /mnt
# ------------------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Editando /mnt/etc/fstab${COLOR_LESS}"
# 1 / ----------------------------------
ROOT_LABEL=`cat /etc/fstab | grep ^LABEL | grep -w root | awk {'print $1'}`
ROOT_UUID=`blkid -s UUID -o value /dev/md0`
ROOT_HDUUID="UUID=$ROOT_UUID"
echo -e "${COLOR_GREEN}sed -i \"s|${ROOT_LABEL}|${ROOT_HDUUID}|\" /mnt/etc/fstab${COLOR_LESS}"
sed -i "s|${ROOT_LABEL}|${ROOT_HDUUID}|" /mnt/etc/fstab
# 4 bios boot / efi --------------------
case "$BOOT" in
uefi)
# http://askubuntu.com/questions/660023/how-to-install-ubuntu-14-04-64-bit-with-a-dual-boot-raid-1-partition-on-an-uefi
echo -e "${COLOR_YELLOW}Clonando ${IFDISK}4 -> ${OFDISK}4${COLOR_LESS}"
echo -e "${COLOR_GREEN}dd if=${IFDISK}4 of=${OFDISK}4${COLOR_LESS}"
dd if=${IFDISK}4 of=${OFDISK}4
#echo -e "${COLOR_YELLOW}Editando /mnt/etc/fstab...${COLOR_LESS}"
UEFI_LABEL=`cat /etc/fstab | grep ^LABEL | grep -w "/boot/efi" | awk {'print $1'}`
UEFI_HDUUID="UUID=`blkid -s UUID -o value ${OFDISK}4`"
echo -e "${COLOR_GREEN}sed -i \"s|${UEFI_LABEL}|${UEFI_HDUUID}|\" /mnt/etc/fstab${COLOR_LESS}"
sed -i "s|${UEFI_LABEL}|${UEFI_HDUUID}|" /mnt/etc/fstab
;;
esac
# 5 /var/log ---------------------------
LOG_LABEL=`cat /etc/fstab | grep ^LABEL | grep -w logs | awk {'print $1'}`
LOG_HDUUID="UUID=`blkid -s UUID -o value /dev/md3`"
echo -e "${COLOR_GREEN}sed -i \"s|${LOG_LABEL}|${LOG_HDUUID}|\" /mnt/etc/fstab${COLOR_LESS}"
sed -i "s|${LOG_LABEL}|${LOG_HDUUID}|" /mnt/etc/fstab
# 6 swap -------------------------------
SWAP_LABEL=`cat /etc/fstab | grep ^LABEL | grep -w swap | awk {'print $1'}`
SWAP_HDUUID="UUID=`blkid -s UUID -o value ${IFDISK}6`"
echo -e "${COLOR_GREEN}sed -i \"s|${SWAP_LABEL}|$SWAP_HDUUID|\" /mnt/etc/fstab${COLOR_LESS}"
sed -i "s|${SWAP_LABEL}|$SWAP_HDUUID|" /mnt/etc/fstab
echo -e "${COLOR_YELLOW}Create swap em ${OFDISK}6${COLOR_LESS}"
mkswap ${OFDISK}6
SWAP_HDUUID="UUID=`blkid -s UUID -o value ${OFDISK}6`"
echo -e "$SWAP_HDUUID\tswap\tswap\tdefaults\t0\t0" >> /mnt/etc/fstab
# ------------------------------------------------------------------------------
# montar particoes chroot ------------------------------------------------------
echo -e "${COLOR_YELLOW}Mount /mnt/dev...${COLOR_LESS}"
/usr/bin/mount -o bind /dev /mnt/dev
echo -e "${COLOR_YELLOW}Mount /mnt/sys...${COLOR_LESS}"
/usr/bin/mount -t sysfs none /mnt/sys
echo -e "${COLOR_YELLOW}Mount /mnt/proc...${COLOR_LESS}"
/usr/bin/mount -t proc none /mnt/proc
echo -e "${COLOR_YELLOW}Mount /mnt/run...${COLOR_LESS}"
#/usr/bin/mount -t tmpfs none /mnt/run
/usr/bin/mount --bind /run /mnt/run
# mdadm.conf -------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Create /etc/mdadm.conf..${COLOR_LESS}"
test -f /mnt/etc/mdadm.conf || touch /mnt/etc/mdadm.conf
cat /mnt/etc/mdadm.conf | grep -q "MAILADDR root" || echo "MAILADDR root" > /mnt/etc/mdadm.conf
echo "auto +imsm +1.x -all" >> /mnt/etc/mdadm.conf
echo "DEVICE /dev/sd*[a-z][1-9]" >> /mnt/etc/mdadm.conf
/sbin/mdadm --detail --scan >> /mnt/etc/mdadm.conf
cp /mnt/etc/mdadm.conf /etc
case "$BOOT" in
bios)
echo -e "${COLOR_YELLOW}Редактируем /mnt/boot/grub/grub.cfg${COLOR_LESS}"
echo -e "${COLOR_GREEN}sed -i \"s|${ROOT_LABEL}|${ROOT_HDUUID}|\" /mnt/boot/grub/grub.cfg${COLOR_LESS}"
sed -i "s|${ROOT_LABEL}|${ROOT_HDUUID}|" /mnt/boot/grub/grub.cfg
sed -i "/search --label --set root $(echo ${ROOT_LABEL}| cut -d= -f2)/d" /mnt/boot/grub/grub.cfg
sed -i "s|quiet|rd.auto rd.auto=1 rhgb quiet|" /mnt/boot/grub/grub.cfg
;;
uefi)
echo -e "${COLOR_YELLOW}Редактируем /mnt/boot/efi/EFI/xenserver/grub.cfg${COLOR_LESS}"
mkdir -p /mnt/boot/efi
/usr/bin/mount ${OFDISK}4 /mnt/boot/efi
echo -e "${COLOR_GREEN}sed -i \"s|${ROOT_LABEL}|${ROOT_HDUUID}|\" /mnt/boot/efi/EFI/xenserver/grub.cfg${COLOR_LESS}"
sed -i "s|${ROOT_LABEL}|${ROOT_HDUUID}|" /mnt/boot/efi/EFI/xenserver/grub.cfg
sed -i "/search --label --set root $(echo ${ROOT_LABEL}| cut -d= -f2)/d" /mnt/boot/efi/EFI/xenserver/grub.cfg
sed -i "s|quiet|rd.auto rd.auto=1 rhgb quiet|" /mnt/boot/efi/EFI/xenserver/grub.cfg
sed -i "s|^set timeout=5|set timeout=10\ninsmod efi_gop\ninsmod efi_uga\ninsmod mdraid1x\nsearch --no-floppy --fs-uuid --set=root $ROOT_UUID|" /mnt/boot/efi/EFI/xenserver/grub.cfg
#/usr/bin/umount /mnt/boot/efi
;;
esac
# mkinitrd ---------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Criando mkinitrd...${COLOR_LESS}"
# tmpfs
# devpts
# sysfs
# proc
chroot /mnt /usr/sbin/dracut -q \
--mdadmconf \
--fstab \
--add="dm mdraid" \
--filesystems "ext4 tmpfs devpts sysfs proc" \
--add-drivers="raid1 raid10" \
--force /boot/initrd-$(uname -r).img $(uname -r) -M
sleep 3
case "$BOOT" in
bios)
echo -e "${COLOR_YELLOW}Instaling grub at \"${OFDISK}\"...${COLOR_LESS}"
chroot /mnt /usr/sbin/grub-install ${OFDISK}
;;
uefi)
/bin/umount /boot/efi
/bin/mount ${OFDISK}4 /boot/efi
echo -e "${COLOR_YELLOW}Executando efibootmgr em \"$OFDISK\"...${COLOR_LESS}"
#ISS=`udevadm info --query=all --name=$OFDISK | grep ID_SERIAL_SHORT | cut -d= -f2`
SERIAL_OFDISK=`lsblk -n -d -o serial $OFDISK`
#efibootmgr -c -g -d $OFDISK -p 4 -L "XenServer-$ISS" -l '\EFI\xenserver\grubx64.efi'
efibootmgr -c -g -d $OFDISK -p 4 -L "XenServer-$SERIAL_OFDISK" -l '\EFI\xenserver\grubx64.efi'
/bin/umount /boot/efi
/bin/mount ${IFDISK}4 /boot/efi
;;
esac
# --------------------------------------
echo -e "${COLOR_YELLOW}Unmount /mnt/root/dev${COLOR_LESS}"
/usr/bin/umount /mnt/dev
echo -e "${COLOR_YELLOW}Unmount /mnt/root/sys${COLOR_LESS}"
/usr/bin/umount /mnt/sys
echo -e "${COLOR_YELLOW}Unmount /mnt/root/proc${COLOR_LESS}"
/usr/bin/umount /mnt/proc
echo -e "${COLOR_YELLOW}Unmount /mnt/var/log${COLOR_LESS}"
/usr/bin/umount /mnt/var/log
echo -e "${COLOR_YELLOW}Desmontando /mnt/run${COLOR_LESS}"
/usr/bin/umount /mnt/run
sleep 3
case "$BOOT" in
uefi)
/usr/bin/umount /mnt/boot/efi
;;
esac
echo -e "${COLOR_YELLOW}Unmount /mnt${COLOR_LESS}"
/usr/bin/umount /mnt
echo
echo -e "${COLOR_YELLOW}Часть 1 завершена...${COLOR_LESS}"
echo
echo -e "${COLOR_YELLOW}Перезагрузите сервер.
Измените загрузку на другой диск, а затем запустите часть 2 этого скрипта (step2)...${COLOR_LESS}"
echo
}
################################################################################
PART2()
{
df | grep -q "/dev/md0" || {
whiptail \
--backtitle "\"$BACKTITLE\"" \
--title "\"$TITLE\"" \
--msgbox "Корень вашей системы не /dev/md0.
Проверьте и измените загрузку на правильный диск, который уже отформатирован в RAID" 10 78
exit 1
}
DISKS=$(fdisk -l 2>$NULL | grep ^Disk | grep "/dev/sd[a-z]" | grep -v "/dev/md[0-3]" | awk {'print $2'} | cut -d: -f1)
cat $NULL > /tmp/disks
for i in `echo $DISKS`
do
echo "$i \"disco $i\" off" >> /tmp/disks
done
cat $NULL > /tmp/b
for i in `cat /proc/mdstat | grep sd[a-z] | cut -d: -f2- | awk {'print $3" "$4" "$5'}`
do
echo $i | cut -c 1-3 >> /tmp/b
done
IGNORE=$(cat /tmp/b | sort | uniq)
IFDISK=/dev/$IGNORE
CHOOSE=$(eval whiptail \
--backtitle "\"$BACKTITLE\"" \
--title "\"$TITLE\"" \
--radiolist "\"Confirme o disco que deve ser adicionado ao RAID\"" 0 0 0 \
$(cat /tmp/disks | grep -v "$IGNORE") 3>&1 1>&2 2>&3)
retval=$?
case "$retval" in
0)
OFDISK=$CHOOSE
rm -f /tmp/disks
rm -f /tmp/b
;;
1)
rm -f /tmp/disks
rm -f /tmp/b
;;
esac
# ------------------------------------------------------------------------------
BOOT=bios
df -P | grep -w -q "/boot/efi" && BOOT=uefi
# ------------------------------------------------------------------------------
echo
echo -e "${COLOR_YELLOW}Mirror ${OFDISK}...${COLOR_LESS}"
echo -e "${COLOR_GREEN}sgdisk --typecode=1:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=1:fd00 ${OFDISK}
echo -e "${COLOR_GREEN}sgdisk --typecode=2:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=2:fd00 ${OFDISK}
echo -e "${COLOR_GREEN}sgdisk --typecode=3:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=3:fd00 ${OFDISK}
echo -e "${COLOR_GREEN}sgdisk --typecode=5:fd00 ${OFDISK}${COLOR_LESS}"
sgdisk --typecode=5:fd00 ${OFDISK}
sleep 5
echo
echo -e "${COLOR_YELLOW}Sincronize disk \"$OFDISK\"...${COLOR_LESS}"
# / ------------------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md0 ${OFDISK}1${COLOR_LESS}"
mdadm -a /dev/md0 ${OFDISK}1
#sleep 120
while true; do
mdadm --detail /dev/md0 | grep "\s*State\s*:" | grep -q -E "degraded|recovering|spare|rebuilding" || break
cat /proc/mdstat | grep -w recovery
sleep 60
done
# update -------------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md1 ${OFDISK}2${COLOR_LESS}"
mdadm -a /dev/md1 ${OFDISK}2
#sleep 60
while true; do
mdadm --detail /dev/md1 | grep "\s*State\s*:" | grep -q -E "degraded|recovering|spare|rebuilding" || break
cat /proc/mdstat | grep -w recovery
sleep 60
done
# /var/log -----------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md3 ${OFDISK}5${COLOR_LESS}"
mdadm -a /dev/md3 ${OFDISK}5
sleep 60
# lvm ----------------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md2 ${OFDISK}3${COLOR_LESS}"
mdadm -a /dev/md2 ${OFDISK}3
sleep 5
echo
# ------------------------------------------------------------------------------
# local storage
echo -e "${COLOR_YELLOW}Changing \"Local storage\" to \"/dev/md2\"...${COLOR_LESS}"
XR_UUID=$(xe sr-list name-label="Local storage" | grep ^uuid | cut -d: -f2- | awk {'print $1'})
xe sr-scan uuid=$XR_UUID
PDB_UUID=$(xe pbd-list sr-uuid=$XR_UUID | grep ^uuid | cut -d: -f2 | awk {'print $1'})
xe pbd-unplug uuid=$PDB_UUID
xe pbd-destroy uuid=$PDB_UUID
xe sr-forget uuid=$XR_UUID
HOST_UUID=$(xe host-list | grep ^uuid | cut -d: -f2 | awk {'print $1'})
xe sr-create content-type="user" host-uuid=$HOST_UUID type=lvm device-config-device=/dev/md2 shared=false name-label="Local storage"
POOL_UUID=$(xe pool-list | grep ^uuid | cut -d: -f2 | awk {'print $1'})
SR_UUID=$(xe sr-list name-label="Local storage" | grep ^uuid | cut -d: -f2- | awk {'print $1'})
xe pool-param-set uuid=$POOL_UUID default-SR=$SR_UUID
# ------------------------------------------------------------------------------
case "$BOOT" in
bios)
echo -e "${COLOR_YELLOW}Устанавливаем grub em ${OFDISK}...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/sbin/grub-install ${OFDISK}${COLOR_LESS}"
/usr/sbin/grub-install ${OFDISK}
;;
uefi)
#echo -e "${COLOR_GREEN}Apagando boot antigo${COLOR_LESS}"
#BOOT_N=`efibootmgr | grep -w XenServer | grep ^Boot000[0-9] | awk {'print $1'} | sed s/Boot//g | sed s/0//g | sed s/*//g`
#efibootmgr -b $BOOT_N -B
echo -e "${COLOR_GREEN}Unmount /boot/efi...${COLOR_LESS}"
/usr/bin/umount /boot/efi
echo -e "${COLOR_YELLOW}Клонируем ${IFDISK}4 -> ${OFDISK}4${COLOR_LESS}"
dd if=${IFDISK}4 of=${OFDISK}4
echo -e "${COLOR_YELLOW}Mount ${OFDISK}4 /boot/efi${COLOR_LESS}"
/usr/bin/mount ${OFDISK}4 /boot/efi
echo -e "${COLOR_YELLOW}Executando efibootmgr em ${OFDISK}4${COLOR_LESS}"
#ISS=`udevadm info --query=all --name=$OFDISK | grep ID_SERIAL_SHORT | cut -d= -f2`
SERIAL_OFDISK=`lsblk -n -d -o serial $OFDISK`
#efibootmgr -c -g -d $OFDISK -p 4 -L "XenServer-$ISS" -l '\EFI\xenserver\grubx64.efi'
efibootmgr -c -g -d $OFDISK -p 4 -L "XenServer-$SERIAL_OFDISK" -l '\EFI\xenserver\grubx64.efi'
;;
esac
# http://www.ducea.com/2006/06/25/increase-the-speed-of-linux-software-raid-reconstruction/
echo -e "${COLOR_YELLOW}Aumentar a velocidade do Linux Software RAID Reconstrução...${COLOR_LESS}"
echo 50000 >/proc/sys/dev/raid/speed_limit_min
echo
echo -e "${COLOR_YELLOW}Часть 2 завершена${COLOR_LESS}"
echo
echo -e "${COLOR_YELLOW}Закончено конфигурирование RAID${COLOR_LESS}"
echo
}
################################################################################
PART3()
{
BOOT=bios
df -P | grep -w -q "/boot/efi" && BOOT=uefi
# identificando o disco de origem ----------------------------------------------
DISKS=$(fdisk -l 2>$NULL | grep ^Disk | grep "/dev/sd[a-z]" | grep -v "/dev/md[0-3]" | awk {'print $2'} | cut -d: -f1)
#cat $NULL > /tmp/disks
#for i in `echo $DISKS`
# do
# echo "$i \"disco $i\" off" >> /tmp/disks
# done
cat $NULL > /tmp/disks
for i in `echo $DISKS`
do
echo "$i \"disco $i\" off" >> /tmp/disks
done
cat $NULL > /tmp/b
for i in `cat /proc/mdstat | grep sd[a-z] | cut -d: -f2- | awk {'print $3" "$4" "$5'}`
do
echo $i | cut -c 1-3 >> /tmp/b
done
IGNORE=$(cat /tmp/b | sort | uniq)
IFDISK=/dev/$IGNORE
CHOOSE=$(eval whiptail \
--backtitle "\"$BACKTITLE\"" \
--title "\"$TITLE\"" \
--radiolist "\"Confirme o disco que deve ser adicionado ao RAID\"" 0 0 0 \
$(cat /tmp/disks | grep -v "$IGNORE") 3>&1 1>&2 2>&3)
retval=$?
case "$retval" in
0)
OFDISK=$CHOOSE
rm -f /tmp/disks
rm -f /tmp/b
;;
1)
rm -f /tmp/disks
rm -f /tmp/b
;;
esac
## SOURCE -----------------------------------------------------------------------
#CHOOSE=$(eval whiptail \
# --backtitle "\"EDEG INFORMATICA LTDA\"" \
# --title "\"MAKE RAID 1\"" \
# --radiolist "\"Selecione o disco que já contêm o XEN instalado\"" 0 0 0 \
# $(cat /tmp/disks) 3>&1 1>&2 2>&3)
#
#retval=$?
#
#case "$retval" in
# 0)
# IFDISK=$CHOOSE
# ;;
#
# 1)
# rm -f /tmp/disks
# ;;
#esac
## identificando disco de destino -----------------------------------------------
#
#CHOOSE=$(eval whiptail \
# --backtitle "\"EDEG INFORMATICA LTDA\"" \
# --title "\"MAKE RAID 1\"" \
# --checklist "\"Confirme os discos que vão receber o XEN\"" 0 0 0 \
# $(cat /tmp/disks | grep -v "$IFDISK") 3>&1 1>&2 2>&3)
#
#retval=$?
#
#case "$retval" in
# 0)
# test -z $CHOOSE
# OFDISK=$(echo $CHOOSE | sed s/\"//g)
# rm -f /tmp/disks
# ;;
#
# 1)
# rm -f /tmp/disks
# ;;
#esac
# limpando disco destino -------------------------------------------------------
echo
echo -e "${COLOR_YELLOW}Limpando a tabela de partições de \"${OFDISK}\"...${COLOR_LESS}"
echo -e "${COLOR_GREEN}sgdisk --zap-all $OFDISK${COLOR_LESS}"
sgdisk --zap-all $OFDISK
# instalando uma tabela GPT disco destino --------------------------------------
echo
echo -e "${COLOR_YELLOW}Instalando uma tabela GPT em \"${OFDISK}\"...${COLOR_LESS}"
echo -e "${COLOR_GREEN}sgdisk --mbrtogpt --clear $OFDISK${COLOR_LESS}"
sgdisk --mbrtogpt --clear $OFDISK
# copiado setores p/ disco destino -----
echo
echo -e "${COLOR_YELLOW}Copiando tabela GPT para o disco \"${OFDISK}\"...${COLOR_LESS}"
echo -e "${COLOR_GREEN}sgdisk -R ${OFDISK} ${IFDISK}${COLOR_LESS}"
sgdisk -R ${OFDISK} ${IFDISK}
# sincronizando raid -------------------
echo
echo -e "${COLOR_YELLOW}Sincronizando os disco \"${OFDISK}\"...${COLOR_LESS}"
# / (raiz) -----------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md0 ${OFDISK}1${COLOR_LESS}"
mdadm -a /dev/md0 ${OFDISK}1
sleep 120
# (update) -----------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md1 ${OFDISK}2${COLOR_LESS}"
mdadm -a /dev/md1 ${OFDISK}2
sleep 60
# /var/log -----------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md3 ${OFDISK}5${COLOR_LESS}"
mdadm -a /dev/md3 ${OFDISK}5
sleep 60
# lvm ----------------------------------
echo -e "${COLOR_GREEN}mdadm -a /dev/md2 ${OFDISK}3${COLOR_LESS}"
mdadm -a /dev/md2 ${OFDISK}3
sleep 10
# swap ---------------------------------
echo -e "${COLOR_YELLOW}Apagando entrada swap antiga em /etc/fstab${COLOR_LESS}"
IFDISK_SWAP=`blkid -s UUID -s TYPE | grep swap | awk {'print $2'} | cut -d = -f2 | sed s/\"//g`
OLDDISK_SWAP=`cat /etc/fstab | grep swap | grep -v $IFDISK_SWAP`
sed -i "/${OLDDISK_SWAP}/d/" /etc/fstab
echo -e "${COLOR_YELLOW}Criando swap em ${OFDISK}6${COLOR_LESS}"
echo -e "${COLOR_GREEN}mkswap ${OFDISK}6${COLOR_LESS}"
mkswap ${OFDISK}6
echo -e "${COLOR_YELLOW}Adicionado swap ${OFDISK}6 em /etc/fstab${COLOR_LESS}"
SWAP_HDUUID="UUID=`blkid -s UUID -o value ${OFDISK}6`"
echo -e "$SWAP_HDUUID\tswap\tswap\tdefaults\t0\t0" >> /etc/fstab
# --------------------------------------
case "$BOOT" in
bios)
echo -e "${COLOR_YELLOW}Instalando grub em \"${OFDISK}\"...${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/sbin/grub-install ${OFDISK}${COLOR_LESS}"
/usr/sbin/grub-install ${OFDISK}
;;
uefi)
echo -e "${COLOR_YELLOW}Desmontando /boot/efi${COLOR_LESS}"
echo -e "${COLOR_GREEN}/usr/bin/umount /boot/efi${COLOR_LESS}"
/usr/bin/umount /boot/efi
echo -e "${COLOR_GREEN}dd if=${IFDISK}4 of=${OFDISK}4${COLOR_LESS}"
dd if=${IFDISK}4 of=${OFDISK}4
echo -e "${COLOR_GREEN}/usr/bin/mount $OFDISK /boot/efi${COLOR_LESS}"
/usr/bin/mount $OFDISK /boot/efi
echo -e "${COLOR_YELLOW}Executando efibootmgr em \"${OFDISK}\"...${COLOR_LESS}"
ISS=`udevadm info --query=all --name=$OFDISK | grep ID_SERIAL_SHORT | cut -d= -f2`
efibootmgr -c -g -d $OFDISK -p 4 -L "XenServer-$ISS" -l '\EFI\xenserver\grubx64.efi'
;;
esac
# fim --------------------------------------------------------------------------
echo -e "${COLOR_YELLOW}Processo concluído...${COLOR_LESS}"
}
################################################################################
case "$1" in
step1)
echo "Первый этап установки (создание mdraid и запись grub на выбранный диск)"
PART1
;;
step2)
echo "Второй этап установки (подключаем первый диск)"
PART2
;;
step3)
echo "Defective disk replacement..."
PART3
;;
*)
echo "Usage: $0 {step1|step2|step3}"
#echo "Usage: $0 {step1|step2}"
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment