We are happy to announce that Vesta is back under active development as of 25 February 2024. We are working on v1 candidate and expect to engage more with the community over the coming months. We are committed to open source, and we encourage contributors to help us build the future of Vesta.
Скритп клонирования системного диска / System hdd Clone Script
Скритп клонирования системного диска / System hdd Clone Script
Вроде как готов скриптец.
Делает клон, есть возможность переразметки получателя, тоесть можно мигрировать между винтами с разными размерами, лиш бы данные влазили.
Нужно такое сюда? Делал специально для хоста на котором vesta
Делает клон, есть возможность переразметки получателя, тоесть можно мигрировать между винтами с разными размерами, лиш бы данные влазили.
Нужно такое сюда? Делал специально для хоста на котором vesta
Last edited by ahouse on Thu May 17, 2018 2:06 pm, edited 2 times in total.
Re: Клонирование системного диска
Конечно, всегда интересно.
Re: Клонирование системного диска
Code: Select all
#!/bin/bash
# (С) AHouse
########################################################################################
#
# CONFIGURATION
#
debug=1
# Имя диска-источника, с которого будет делаться копия
srcHDD="sda"
# Имя диска-получателя, на который будет делаться копия
dstHDD="sdc"
# Номер boot-раздела диска-источника
srcBootSlice=1
# Папка к которой будет монтироваться диск-получатель, во время операций клонирования
# mountPoint - не имзенять!!!
mountPoint="/mnt"
newHDD="$mountPoint/newHDD"
# Размер корневого раздела
rootSliceSize="32G"
# Размер своп-раздела (=2*RAM)
swapSliceSize="8G"
# Размер tmp-раздела
tmpSliceSize="16G"
# Размер var-раздела
varSliceSize="16G"
# Выключать сервисы на момент работы скрипта клонирования
# 1 - Выключать
serviceShutdown=1
##########################################################################################
#
# ENTRY POINT
#
#
clear
function debuger(){
if [ $debug -eq 1 ]
then
echo ""
echo "###########################################################################################"
echo $1
echo "###########################################################################################"
echo ""
fi
}
function unmounter(){
# Проверяем, примонтирован ли куда-либо какой-нибудь раздел диска-получателя. Если да - размантируем.
for dstSlice in `mount | grep $1 | awk ' {print $1} ' | sort -r -k1 -n`
do
mount | grep $dstSlice > /dev/null #check whether this share already mounted
if [ $? -eq 0 ]; then
debuger "Размантируем $dstSlice"
umount $dstSlice
fi
done
}
if [ $serviceShutdown -eq 1 ]
then
# Выключаем все сервисы, которые могут повлиять на потерю или неполучение данных
# фаервол и банилку оставляем в рабочем состоянии.
debuger "Отключаем сервисы:
apache2\n
nginx\n
bind9\n
exim4\n
dovecot\n
clamav-daemon\n
spamassassin\n
mysql\n
proftpd\n
cron"
service apache2 stop
service nginx stop
service bind9 stop
service exim4 stop
service dovecot stop
service clamav-daemon stop
service spamassassin stop
service mysql stop
service proftpd stop
service cron stop
fi
mkdir $newHDD
debuger "Создаем дирректорию: $newHDD"
# Вычисляем UUID boot-раздела диска-источника
srcBOOTUUID=`lsblk -no UUID /dev/${srcHDD}${srcBootSlice}`
debuger "UUID boot-раздела диска-источника: $srcBOOTUUID"
unmounter $dstHDD
# Удаляем всю существующую разметку и нарезаем новую
# sdb1 - / 32GByte
# sdb2 - swap - 8G = 2*RAM
# sdb3 - Extended Logical Slice - All Available
# sdb5 - /tmp - 16G
# sdb6 - /var - 16G
# sdb7 - /home - All Available
debuger "Размечаем диск-получатель $dstHDD :"
debuger ""
debuger "${dstHDD}1 = / = $rootSliceSize"
debuger "${dstHDD}2 = swap = $swapSliceSize"
debuger "${dstHDD}3 = Extended Logical Slice = All Available"
debuger "${dstHDD}5 = /tmp = $tmpSliceSize"
debuger "${dstHDD}6 = /var = $varSliceSize"
debuger "${dstHDD}7 = /home = All Available"
fdisk -u /dev/${dstHDD} <<EOF
o
n
p
1
+${rootSliceSize}
n
p
2
+${swapSliceSize}
n
e
3
n
+${tmpSliceSize}
n
+${varSliceSize}
n
a
1
t
2
82
w
EOF
# Форматирем новые слайсы
debuger "Форматируем ${dstHDD}1"
mkfs.ext4 -F /dev/${dstHDD}1
debuger "Форматируем ${dstHDD}1"
mkswap /dev/${dstHDD}2
debuger "Форматируем ${dstHDD}5"
mkfs.ext4 -F /dev/${dstHDD}5
debuger "Форматируем ${dstHDD}6"
mkfs.ext4 -F /dev/${dstHDD}6
debuger "Форматируем ${dstHDD}7"
mkfs.ext4 -F /dev/${dstHDD}7
# Монтируем и начинаем синхронизацию файловой структуры
debuger "Монтируем ${dstHDD}1"
mount /dev/${dstHDD}1 $newHDD
debuger "Синхронизируем / файловую систему..."
rsync -aAXv /* $newHDD --exclude={/mnt/*,lost+found/,/proc/*,/sys/*,/dev/*,/tmp/*,/var/*,/home/*}
debuger "Установка прав доступа на папку GRUB"
chmod 644 ${newHDD}/boot/grub/*
chmod 755 ${newHDD}/boot/grub/i386-pc/
debuger "Монтируем ${dstHDD}5 /tmp"
mount /dev/${dstHDD}5 ${newHDD}/tmp
debuger "Монтируем ${dstHDD}6 /var"
mount /dev/${dstHDD}6 ${newHDD}/var
debuger "Синхронизация /var файловой системы..."
rsync -aAXv /var/* ${newHDD}/var
debuger "Монтируем ${dstHDD}7 /home"
mount /dev/${dstHDD}7 ${newHDD}/home
debuger "Синхронизация /home файловой системы..."
rsync -aAXv /home/* ${newHDD}/home
debuger "Установка загрузчика GRUB..."
# Устонавливаем загрузчик grub в корневой раздел диска-получателя
grub-install --recheck --no-floppy --root-directory=${newHDD} /dev/${dstHDD}
debuger "Корректировка файлов конфигурации загрузчика ..."
# Корректируем старый конфиг загрузчика на новый UUID загрузочного слайса диска-приемника
chmod 644 ${newHDD}/boot/grub/*
sed -i "s/${srcBOOTUUID}/`lsblk -no UUID /dev/${dstHDD}1`/g" ${newHDD}/boot/grub/menu.lst
sed -i "s/${srcBOOTUUID}/`lsblk -no UUID /dev/${dstHDD}1`/g" ${newHDD}/boot/grub/menu.lst~
sed -i "s/${srcBOOTUUID}/`lsblk -no UUID /dev/${dstHDD}1`/g" ${newHDD}/boot/grub/grub.cfg
#sed -i "s/${srcBOOTUUID}/`lsblk -no UUID /dev/${dstHDD}1`/g" ${newHDD}/boot/grub/i386-pc/load.cfg
debuger "Генерируем новый /etc/fstab на диске-получателе ..."
echo "UUID="`lsblk -no UUID /dev/${dstHDD}1`" / ext4 errors=remount-ro 0 1" > ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}2`" none swap sw 0 0" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}5`" /tmp ext4 defaults,errors=remount-ro 0 2" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}6`" /var ext4 defaults,errors=remount-ro 0 3" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}7`" /home ext4 errors=remount-ro,usrquota,grpquota,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 4" >> ${newHDD}/etc/fstab
unmounter $dstHDD
rmdir $newHDD
if [ $serviceShutdown -eq 1 ]
then
# Включаем все сервисы, если выключали
debuger "Поднимаем сервисы:\n
apache2\n
nginx\n
bind9\n
exim4\n
dovecot\n
clamav-daemon\n
spamassassin\n
mysql\n
proftpd\n
cron"
service apache2 start
service nginx start
service bind9 start
service exim4 start
service dovecot start
service clamav-daemon start
service spamassassin start
service mysql start
service proftpd start
service cron start
fi
debuger "Диск-источник клонирован!"
Re: Клонирование системного диска
Очередная версия скрипта для клонирования или переноса системного жесткого диска linux на новый диск.
Небольшие правки замеченных багов и неточностей в прошлой версии.
Небольшие правки замеченных багов и неточностей в прошлой версии.
Code: Select all
#!/bin/bash
# (C) AHouse
# HDD Clone v0.0.2 04.05.2018
# Даный скрипт предназначен для клонирования системного жетского диска с рабочей OS
# Тестирование происходили на Ubuntu 16.04.4
# Перед запуском, в обязательном порядке необходимо указать номер раздела с которого грузится
# клонируемая OS - за ото отвечает конфигурацуионная переменная srcBootSlice=1 ( до автоматического определения - не дошли руки.)
# Если Вас не устраивает моя разметка геометрии диска-получателя - измените соответствующие разделы.
#
########################################################################################
#
# CONFIGURATION
#
# debug=1 - вывод сообщений в консоль и в лог файл, debug=0 отсутствие сообщений
debug=1
# Имя диска-источника, с которого будет делаться копия
srcHDD="sda"
# Имя диска-получателя, на который будет делаться копия
dstHDD="sdb"
# Номер boot-раздела диска-источника.
srcBootSlice=1
# Папка к которой будет монтироваться диск-получатель, во время операций клонирования
# mountPoint - не имзенять!!!
mountPoint="/mnt"
newHDD="$mountPoint/newHDD"
# Размер корневого раздела
rootSliceSize="32G"
# Размер своп-раздела (=2*RAM)
swapSliceSize="16G"
# Размер tmp-раздела
tmpSliceSize="16G"
# Размер var-раздела.
varSliceSize="16G"
# Выключать сервисы на момент работы скрипта клонирования.
# 1 - Выключать
serviceShutdown=1
##########################################################################################
#
# ENTRY POINT
#
#
clear
rm clone.log
function debuger(){
if [ $debug -eq 1 ]
then.
echo ""
echo "###########################################################################################"
echo -e $1
echo "###########################################################################################"
echo ""
echo `date ` $1 >> ./clone.log
fi
}
function unmounter(){
# Проверяем, примонтировани ли куда-либо какой-нибудь раздел диска-получателя. Если да - размантируем.
for dstSlice in `mount | grep $1 | awk ' {print $1} ' | sort -r -k1 -n`
do
mount | grep $dstSlice > /dev/null #check whether this share already mounted
if [ $? -eq 0 ]; then
debuger "Размантируем $dstSlice"
umount $dstSlice
fi
done
}
if [ $serviceShutdown -eq 1 ]
then
# Выключаем все сервисы, которые могут повлиять на потерю или неполучение данных
# фаервол и банилку оставляем в рабочем состоянии.
debuger "Отключаем сервисы:\n apache2\n nginx\n bind9\n exim4\n dovecot\n clamav-daemon\n spamassassin\n mysql\n proftpd\n cron"
service apache2 stop
service nginx stop
service bind9 stop
service exim4 stop
service dovecot stop
service clamav-daemon stop
service spamassassin stop
service mysql stop
service proftpd stop
service cron stop....
fi
if ! [ -d $newHDD ]; then
mkdir $newHDD
debuger "Создаем дирректорию: $newHDD"
fi
# Вычисляем UUID boot-раздела диска-источника
srcDevROOT=$(mount | grep '/ type' | awk '{print $1}')
srcROOTUUID=`lsblk -no UUID $srcDevROOT`
srcBOOTUUID=`lsblk -no UUID /dev/$srcHDD$srcBootSlice`
debuger "UUID boot-раздела диска-источника: $srcBOOTUUID"
unmounter $dstHDD
debuger "Проверяем, не примонтирован ли куда диск получатель $dstHDD"
# Удаляем всю существующую разметку и нарезаем новую
# sdb1 - / 32GByte
# sdb2 - swap - 16G = 2*RAM
# sdb3 - Extended Logical Slice - All Available
# sdb5 - /tmp - 16G
# sdb6 - /var - 16G
# sdb7 - /home - All Available
debuger "Размечаем диск-получатель $dstHDD : \n"
debuger "${dstHDD}1 = / = $rootSliceSize"
debuger "${dstHDD}2 = swap = $swapSliceSize"
debuger "${dstHDD}3 = Extended Logical Slice = All Available"
debuger "${dstHDD}5 = /tmp = $tmpSliceSize"
debuger "${dstHDD}6 = /var = $varSliceSize"
debuger "${dstHDD}7 = /home = Все доступное"
fdisk -u /dev/${dstHDD} <<EOF
o
n
p
1
+${rootSliceSize}
n
p
2
+${swapSliceSize}
n
e
3
n
+${tmpSliceSize}
n
+${varSliceSize}
n
a
1
t
2
82
w
EOF
# Форматирем новые слайсы
debuger "Форматируем ${dstHDD}1"
mkfs.ext4 -F /dev/${dstHDD}1
debuger "Форматируем ${dstHDD}1"
mkswap /dev/${dstHDD}2
debuger "Форматируем ${dstHDD}5"
mkfs.ext4 -F /dev/${dstHDD}5
debuger "Форматируем ${dstHDD}6"
mkfs.ext4 -F /dev/${dstHDD}6
debuger "Форматируем ${dstHDD}7"
mkfs.ext4 -F /dev/${dstHDD}7
# Монтируем и начинаем синхронизацию файловой структуры
debuger "Монтируем ${dstHDD}1"
mount /dev/${dstHDD}1 $newHDD
debuger "Синхронизируем / файловую систему..."
rsync -aAXv /* $newHDD --exclude={/mnt/*,lost+found/,/proc/*,/sys/*,/dev/*,/tmp/*,/var/*,/home/*}
debuger "Установка прав доступа на папку GRUB"
chmod 644 ${newHDD}/boot/grub/*
chmod 755 ${newHDD}/boot/grub/i386-pc/
debuger "Монтируем ${dstHDD}5 /tmp"
mount /dev/${dstHDD}5 ${newHDD}/tmp
debuger "Монтируем ${dstHDD}6 /var"
mount /dev/${dstHDD}6 ${newHDD}/var
debuger "Синхронизация /var файловой системы..."
rsync -aAXv /var/* ${newHDD}/var
debuger "Монтируем ${dstHDD}7 /home"
mount /dev/${dstHDD}7 ${newHDD}/home
debuger "Синхронизация /home файловой системы..."
rsync -aAXv /home/* ${newHDD}/home
debuger "Установка загрузчика GRUB..."
# Устонавливаем загрузчик grub в корневой раздел диска-получателя
grub-install --recheck --no-floppy --root-directory=${newHDD} /dev/${dstHDD}
debuger "Корректировка файлов конфигурации загрузчика ..."
# Корректируем старый конфиг загрузчика на новый UUID загрузочного слайса диска-приемника
dstBOOTUUID=`lsblk -no UUID /dev/${dstHDD}1`
chmod 644 ${newHDD}/boot/grub/*
debuger "${srcBOOTUUID} --> ${dstBOOTUUID}"
sed -i "s/${srcBOOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/menu.lst
sed -i "s/${srcBOOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/menu.lst~
sed -i "s/${srcBOOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/grub.cfg
sed -i "s/${srcROOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/menu.lst
sed -i "s/${srcROOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/menu.lst~
sed -i "s/${srcROOTUUID}/${dstBOOTUUID}/g" ${newHDD}/boot/grub/grub.cfg
sed -i 's:/vmlinuz-:/boot/vmlinuz-:g' ${newHDD}/boot/grub/grub.cfg
sed -i 's:/initrd.img-:/boot/initrd.img-:g' ${newHDD}/boot/grub/grub.cfg
sed -i 's:\ root='$srcDevROOT':\ root=UUID='${dstBOOTUUID}':g' ${newHDD}/boot/grub/grub.cfg
sed -i 's:/vmlinuz-:/boot/vmlinuz-:g' ${newHDD}/boot/grub/menu.lst
sed -i 's:/initrd.img-:/boot/initrd.img-:g' ${newHDD}/boot/grub/menu.lst
sed -i 's:\ root='$srcDevROOT':\ root=UUID='${dstBOOTUUID}':g' ${newHDD}/boot/grub/menu.lst
sed -i 's:/vmlinuz-:/boot/vmlinuz-:g' ${newHDD}/boot/grub/menu.lst~
sed -i 's:/initrd.img-:/boot/initrd.img-:g' ${newHDD}/boot/grub/menu.lst~
sed -i 's:\ root='$srcDevROOT':\ root=UUID='${dstBOOTUUID}':g' ${newHDD}/boot/grub/menu.lst~
debuger "Генерируем новый /etc/fstab на диске-получателе ..."
echo "UUID="`lsblk -no UUID /dev/${dstHDD}1`" />ext4 errors=remount-ro <---->0 1" > ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}2`" none swap sw 0 0" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}5`" /tmp <--->ext4<-->defaults,errors=remount-ro <--->0 2" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}6`" /var <--->ext4<-->defaults,errors=remount-ro <--->0 3" >> ${newHDD}/etc/fstab
echo "UUID="`lsblk -no UUID /dev/${dstHDD}7`" /home <-->ext4<-->errors=remount-ro,usrquota,grpquota,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 4" >> ${newHDD}/etc/fstab
unmounter $dstHDD
rmdir $newHDD
if [ $serviceShutdown -eq 1 ]
then
# Выключаем все сервисы, которые могут повлиять на потерю или неполучение данных
# фаервол и банилку оставляем в рабочем состоянии.
debuger "Поднимаем сервисы:\n apache2\n nginx\n bind9\n exim4\n dovecot\n clamav-daemon\n spamassassin\n mysql\n proftpd\n cron"
service apache2 start
service nginx start
service bind9 start
service exim4 start
service dovecot start
service clamav-daemon start
service spamassassin start
service mysql start
service proftpd start
service cron start
fi
debuger "Диск-источник клонирован!"