Last active
November 17, 2022 11:10
-
-
Save moisespsena/65e8e803c44af3396de1cfa28ff81654 to your computer and use it in GitHub Desktop.
Copy the Linux System to another partition
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# For partition only, set PARTITION_ONLY=1 enviroment variable | |
# | |
VERSION=1 | |
PARTITION_ONLY=$PARTITION_ONLY | |
function _continue_or_cancel() { | |
echo digite \'YeS\' para CONTINUAR, caso contrario sera cancelado: | |
read _tmp; [ "$_tmp" != 'YeS' ] && echo CANCELADO && exit 1 | |
} | |
function _confirm() { | |
r=0 | |
while true; | |
do | |
echo -n "$1 [YeS|No]: " | |
read _tmp; | |
[ "$_tmp" = 'YeS' ] && r=0 && break | |
[ "$_tmp" = 'No' ] && r=1 && break | |
echo opcao invalida... | |
done | |
return $r | |
} | |
function _copy() { | |
echo ----------------------- | |
echo " COPING SYSTEM FILES" | |
echo ----------------------- | |
echo Insira o diretorio RAIZ de ORIGEM: | |
read src_dir | |
[ "$src_dir" == '' ] && echo DIRETORIO DE ORIGEM INVALIDO && exit 1 | |
[ ! -d "$src_dir" ] && echo DIRETORIO DE ORIGEM NAO EXISTE && exit 1 | |
echo Insira o diretorio RAIZ de DESTINO: | |
read out_dir | |
[ "$out_dir" == '' ] && echo DIRETORIO DE DESTINO INVALIDO && exit 1 | |
[ ! -d "$out_dir" ] && echo DIRETORIO DE DESTINO NAO EXISTE && exit 1 | |
src_dev=$(realpath $(mount -l | grep " $src_dir " | grep -v grep | awk '{print $1}')) | |
out_dev=$(realpath $(mount -l | grep " $out_dir " | grep -v grep | awk '{print $1}')) | |
if [ "$out_dev" == '' ]; then | |
echo NAO FOI POSSIVEL ENCONTRAR A PARTICAO DE DESTINO. >&2 | |
echo O diretorio de DESTINO nao e\' valido. >&2 | |
exit 1 | |
fi | |
if [ "$src_dev" == "$out_dev" ]; then | |
echo A PARTICAO \'$src_dev\' DE ORIGEM E DESTINO NAO PODE SER A MESMA, >&2 | |
echo voce nao pode fazer copia para o mesmo lugar. >&2 | |
exit 1 | |
fi | |
src_disk=`echo "$src_dev" | perl -pe 's/\d+$//'` | |
out_disk=`echo "$out_dev" | perl -pe 's/\d+$//'` | |
echo "======== CONFIRMAR PARTICOES E DIRETORIOS DE COPIA: ==========" | |
echo " ORIGEM:" | |
echo " DIRETORIO:" $src_dir | |
echo " DISCO :" $src_disk | |
echo " PARTICAO :" $src_dev | |
echo | |
echo " DESTINO:" | |
echo " DIRETORIO:" $out_dir | |
echo " DISCO :" $out_disk | |
echo " PARTICAO :" $out_dev | |
echo "=================================================================" | |
_continue_or_cancel | |
[ "$src_disk" = "$out_disk" ] && PARTITION_ONLY=1 | |
cd "$out_dir" || exit 1 | |
echo 'Insira argumentos adicionais para o comando TAR ou deixe vazio:' | |
read tar_args | |
echo $tar_args | |
if [ "$tar_args" == '' ]; then | |
echo "======== ARGUMENTOS ADICIONAIS: ==========" | |
echo "$tar_args" | \ | |
xargs python -c 'import sys | |
for i,v in enumerate(sys.argv[1:]): | |
print(" %s: %s" % (i+1, v)) | |
' | |
echo "==========================================" | |
else | |
echo "sem argumentos adicionais para TAR..." | |
fi | |
tar_args='--exclude=./swapfile --exclude=./root/.cache --exclude=./mnt --exclude=./tmp --exclude=./var/tmp --exclude=./var/cache/apt/archives --exclude="lost+found" --exclude=./sys --exclude=./proc --exclude=./dev --exclude=./media --exclude=./etc/supervisor/conf.d/monewire.conf --exclude=./home/usuario/.mpsow --exclude=./home/usuario/sensores --exclude=./usr/share/applications/mpsow* '"$tar_args" | |
echo "======== ALL TAR ARGUMENTS: ==========" | |
echo "$tar_args" | \ | |
xargs python -c 'import sys | |
for i,v in enumerate(sys.argv[1:]): | |
print(" %s: %s" % (i+1, v)) | |
' | |
echo "==========================================" | |
_continue_or_cancel | |
_start=`date`; (cd "$src_dir"; echo "$tar_args" | xargs tar -pcf - . ) | tar -xvf -; echo "START: $_start, END: "`date` | |
echo ---------------------------------------------------- | |
echo CRIANDO DIRETORIOS BASICOS... | |
mkdir -pv mnt sys proc sys dev media tmp var/tmp var/cache/apt/archives | |
chmod 777 var/tmp | |
chmod 777 tmp | |
rm -vrf home/*/.cache >/dev/null | |
_confirm "Deseja remover as configurações do Mozilla Firefox?" && echo "Removendo configurações do Mozilla Firefox..." && rm -vrf home/*/.mozilla >/dev/null | |
cat /dev/null > etc/udev/rules.d/70-persistent-net.rules | |
} | |
_e=0 | |
function _uuid() { | |
[ ! -e "$1" ] && echo "[ERROR]: PARTICAO INVALIDA: '$1'" 1>&2 && _e=1 && exit 1 | |
v=`blkid $1` | |
echo "$v" | perl -pe 's/^.+UID="([^"]+)".+$/\1/' | |
} | |
RESULT="" | |
function _rp() { | |
local _tmp='' | |
while true | |
do | |
echo -n "Particao para montar $1: /dev/" | |
read p; | |
if [ "$p" = '' ]; then | |
_confirm "Ignorar particao para montar $1?" && { | |
RESULT="$RESULT\n\n#$1\n#UUID=\t$2\t$3\t$4\t$5\t$6\t$7" | |
echo $1 ignorado. | |
echo | |
break | |
} || { | |
echo "tente novamente..." | |
} | |
else | |
p="/dev/$p" | |
echo | |
if [ ! -e "$p" ]; then | |
echo "[ERROR]: PARTICAO INVALIDA: '$p'" | |
echo "tente novamente..." | |
else | |
echo "--------------------------------------" | |
echo " INFORMACOES DA PARTICAO $p:" | |
echo "--------------------------------------" | |
blkid $p | |
echo | |
_confirm "Confirma a particao '$p' para montar '$1'?" && { | |
_tmp="UUID="`_uuid "$p"`"\t$2\t$3\t$4\t$5\t$6\t$7" | |
echo | |
echo "------------------" | |
echo " Linha do fstab" | |
echo "------------------" | |
echo -e "$_tmp" | |
echo | |
RESULT="$RESULT\n$_tmp" | |
return 0 | |
} || { | |
echo "repetindo..." | |
} | |
fi | |
fi | |
done | |
} | |
function _fstab() { | |
echo ----------------------- | |
echo " CONFIGURANDO FSTAB " | |
echo ----------------------- | |
_rp SWAP swap swap defaults 0 0 | |
_rp / / ext4 errors=remount-ro,relatime 0 1 | |
_rp /home /home ext4 defaults 0 2 | |
echo ----------------------- | |
echo " CONTEUDO DO FSTAB " | |
echo ----------------------- | |
echo -e "$RESULT" | tee etc/fstab | |
echo " | |
proc /proc proc defaults 0 0 | |
sysfs /sys sysfs defaults 0 0 | |
" | tee -a etc/fstab | |
} | |
function _grub() { | |
echo --------- | |
mount -l | grep " "`pwd`" " | grep -v `pwd`"/home" | awk '{print $1}' | perl -pe 's/\d+$//' | |
echo --------- | |
dev=$(mount -l | grep " "`pwd`" " | grep -v `pwd`"/home" | awk '{print $1}' | perl -pe 's/\d+$//') | |
[ "$dev" == '' ] && echo "[ERROR]: NAO FOI POSSIVEL DETECTAR O DISPOSITIVO" 1>&2 && exit 1 | |
[ ! -e "$dev" ] && echo "[ERROR]: DISITIVO '$dev' NAO E VALIDO" 1>&2 && exit 1 | |
mdev=$(mount -l | grep " "`pwd`"/dev " >/dev/null && echo 0 || echo 1) | |
[ $mdev = 1 ] && echo "mounting /dev on ./dev" || echo "./dev has be mounted" | |
[ $mdev = 1 ] && mount --bind /dev dev | |
echo ----------- INSTALLING GRUB on \'$dev\' ---------- && \ | |
( if [ "$PARTITION_ONLY" = '1' ]; then echo "PARTITION ONLY: not install grub on device"; else grub-install "$dev"; exit $?; fi ) && \ | |
echo ----------- CONFIGURING GRUB-PC ---------- && \ | |
chroot . /bin/bash -c 'mount /proc; mount /sys; (dpkg-reconfigure grub-pc); umount /proc; umount /sys' || exit 1 | |
[ $mdev = 1 ] && echo "umounting ./dev" && umount dev | |
} | |
case "$1" in | |
'fstab') | |
echo "RUN FSTAB..." | |
_fstab | |
exit $? | |
;; | |
'copy') | |
echo "RUN COPY..." | |
_copy | |
exit $? | |
;; | |
'grub') | |
echo "RUN GRUB..." | |
_grub | |
exit $? | |
;; | |
*) | |
if [ "$1" = '' ]; then | |
echo "RUN ALL..." | |
_copy && _fstab && _grub | |
exit $? | |
else | |
echo "ERRO: INVALID OPTION '$1'" >&2 | |
exit 1 | |
fi | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment