Postagem em destaque

MEU REFÚGIO NERD - ATUALIZAÇÃO DE LINKS DO PROJETO

Olá! Fizemos um pequeno ajuste no projeto e precisamos atualizar todos os links do projeto. Não se preocupem. Nenhum conteúdo será movido ou...

domingo, 19 de maio de 2024

EXEMPLO DE SCRIPT PARA CRIAR BACKUP EM PENDRIVE/PENDRIVE DE EMERGÊNCIA NO LINUX

 EXEMPLO DE SCRIPT PARA CRIAR BACKUP EM PENDRIVE NO LINUX

 

Olá, pessoal!

Só passando rapidinho nesse post para deixar aqui um script como referência para os backups de vocês aí.

Testei aqui dentro do meu cenário com sucesso. Obviamente que vocês precisarão adaptar o script para como está o seu sistema aí.

Estava fazendo tudo na mão antes. Demorava cada etapa...tendo de abrir várias janelas...editores...etc...espero que ajude vocês aí também.

Atenção! Use com muito cuidado! Como disse, foi testado aqui com sucesso. Use por sua conta e risco. Leia atentamente o que cada parte do script faz antes de modificar e executar. Por questões de segurança, ele não remove os arquivos do backup anterior. Deve ser feito manualmente antes de executar o script.


Segue o script:

#!/bin/bash
#####################################################
#Script criado por Luke do Canal Meu Refugio Nerd.###
#####################################################
#Alguns avisos importantes.
#Esse script está sendo compartilhando de usuário para usuário. Aqui funcionou muito bem exatamente para meu cenário. Use-o por sua conta e risco.
#Leia atentamente cada pedaço do script para entender o que está sendo feito e faça adaptações para o seu cenário.
#Por exemplo, aqui estou modificando o lxdm.conf. Talvez tenha que modificar o do gdm e editar o script.
#Tem outros pontos de atenção. Note que o script leva em conta que o pendrive já está formatado em ext4. Talvez tenha de editar essa parte do script também para que fstab fique correto pra você.
#Mude "USB" para o label do seu pendrive caso necessário. É importante.
#Como ele está pausando preste bem atenção para o que ele encontrar para ter certeza de que ele vai montar o dispostivo correto. Caso note algo de errado já dê um ctrl+c.
#Nas partes em chroot demoram mais mesmo. A menos que mostre algum erro tenha um pouco de paciência nos comandos executados em chroot.
#Talvez precise adaptar a parte do usuario generico que será criado pois ele está criando sem determinar uma senha. Depois ele pede senha. Como esse backup é baseado no seu sistema,
#pode abrir um terminal como root e modificar a senha deste usuario ou adaptar seu sudoers para que ele possa executar comandos com sudo sem senha. Talvez não seja o ideal.



# Função para verificar se o script está sendo executado como root
check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        echo "Este script precisa ser executado como root."
        exit 1
    fi
}

# Função para encontrar o dispositivo pendrive e seu UUID
find_pendrive() {
    echo "Procurando pendrive..."
    pendrive_device=$(blkid | grep -i "USB" | awk -F: '{print $1}')
    pendrive_uuid=$(blkid -s UUID -o value "$pendrive_device")

    if [ -z "$pendrive_device" ] || [ -z "$pendrive_uuid" ]; then
        echo "Pendrive não encontrado. Certifique-se de que o pendrive está conectado e tente novamente."
        exit 1
    fi

    echo "Pendrive encontrado: $pendrive_device com UUID $pendrive_uuid"
    read -p "Pressione Enter para continuar..."
}

# Função para criar o ponto de montagem e montar o pendrive
mount_pendrive() {
    echo "Montando o pendrive..."
    mount_point="/mnt/pendrive"
    mkdir -p "$mount_point"
    mount "${pendrive_device}" "$mount_point"
    if [ $? -ne 0 ]; then
        echo "Erro ao montar o pendrive. Certifique-se de que o dispositivo está correto."
        exit 1
    fi
    echo "Pendrive montado em $mount_point"
    read -p "Pressione Enter para continuar..."
}

# Função para copiar o sistema para o pendrive
copy_system() {
    echo "Copiando o sistema para o pendrive..."
    rsync -av --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} / "$mount_point"
    echo "Cópia concluída."
    read -p "Pressione Enter para continuar..."
}

# Função para configurar o fstab no pendrive
configure_fstab() {
    echo "Configurando o fstab no pendrive..."
    cat <<EOF > "$mount_point/etc/fstab"
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

# entrada para raiz
UUID=$pendrive_uuid    /    ext4    discard,noatime,errors=remount-ro    0    1
EOF
    echo "fstab configurado."
    read -p "Pressione Enter para continuar..."
}

# Função para substituir o usuário em arquivos de configuração
replace_user_in_files() {
    echo "Substituindo usuário em arquivos de configuração..."
    sed -i 's/usuarioantigo/usuarionovo/g' "$mount_point/etc/sudoers"
    sed -i 's/usuarioantigo/usuarionovo/g' "$mount_point/etc/lxdm/lxdm.conf"
    echo "Usuário substituído nos arquivos de configuração."
    read -p "Pressione Enter para continuar..."
}

# Função para configurar o hostname
configure_hostname() {
    echo "Configurando o hostname..."
    echo "novohostname" > "$mount_point/etc/hostname"
    sed -i 's/hostnameantigo/novohostname/g' "$mount_point/etc/hosts"
    echo "Hostname configurado."
    read -p "Pressione Enter para continuar..."
}

# Função para preparar o ambiente para chroot
prepare_chroot() {
    echo "Preparando o ambiente para chroot..."
    mount --bind /dev "$mount_point/dev"
    mount --bind /dev/pts "$mount_point/dev/pts"
    mount --bind /proc "$mount_point/proc"
    mount --bind /sys "$mount_point/sys"
    mount --bind /run "$mount_point/run"
    echo "Ambiente preparado para chroot."
    read -p "Pressione Enter para continuar..."
}

# Função para criar o usuário dentro do chroot
create_user() {
    echo "Criando usuário dentro do chroot..."
    chroot "$mount_point" /bin/bash -c "useradd -m -s /bin/bash usuario"
    echo "Usuário criado."
    read -p "Pressione Enter para continuar..."
}

# Função para instalar o GRUB no pendrive
install_grub() {
    echo "Instalando o GRUB no pendrive..."
    chroot "$mount_point" /bin/bash -c "dpkg-reconfigure grub-pc"
    echo "GRUB instalado."
    read -p "Pressione Enter para continuar..."
}

# Função para desmontar os sistemas de arquivos
cleanup() {
    echo "Desmontando os sistemas de arquivos..."
    umount "$mount_point/dev/pts"
    umount "$mount_point/dev"
    umount "$mount_point/proc"
    umount "$mount_point/sys"
    umount "$mount_point/run"
    umount "$mount_point"
    echo "Sistemas de arquivos desmontados."
}

# Verificar se o script está sendo executado como root
check_root

# Encontrar o pendrive e seu UUID
find_pendrive

# Criar o ponto de montagem e montar o pendrive
mount_pendrive

# Copiar o sistema para o pendrive
copy_system

# Configurar o fstab no pendrive
configure_fstab

# Substituir o usuário em arquivos de configuração
replace_user_in_files

# Configurar o hostname
configure_hostname

# Preparar o ambiente para chroot
prepare_chroot

# Criar o usuário dentro do chroot
create_user

# Instalar o GRUB no pendrive
install_grub

# Desmontar os sistemas de arquivos
cleanup

echo "Backup completo, usuário criado e GRUB instalado no pendrive."
##############

 Conclusão

Acho importante ter uma rotina de backups automatizados e nesse caso um backup que também pode criar um pendrive de emergência para você sempre ter em situações críticas, com ferramentas úteis. Ainda faltaria um script para restaurar esse backup. Fica para a próxima. Ah...diminuí a fonte aqui no blog só da parte dos avisos no script para ficar claro que essas linhas têm de começar com # pois são comentários e não fazem parte do script. Na apresentação do blog está fazendo quebra e isso pode confundir alguns.

Espero que tenham gostado. Sugestões para atualização e melhoria desse script pode me pingar lá na Mastodon.

Gostou?

Inscreva-se no  meu canal:

@MeuRefugioNerd

Paga um cafezinho para mim?

https://livepix.gg/meurefugionerd

QR Code do PIX
Voltar ao início.

Mais lidas: