Script Bash para fazer backup / clonar o Ubuntu em outra partição

12

O Ubuntu 18.04 foi lançado em 26 de abril de 2018 e quero tentar atualizar meus programas e converter meus dados, mas não quero confirmar se houver bugs.

Reduzi o Windows de 410 para 385 GB, reiniciei o Ubuntu 16.04 e corri gpartedpara criar uma nova partição de 25 GB chamada "Ubuntu18.04". Executei rm-kernelse removi cerca de 20 kernels para eliminar cerca de 10 GB no Ubuntu 16.04.

Agora eu quero um script que preencha a nova partição com 16.04 LTS e crie uma nova opção de menu do Grub para ela. Somente diretórios relevantes devem ser copiados. Por exemplo /sys, /run, /proce /devsão diretórios virtuais criadas durante a inicialização e não deve ser copiado.

Também quero o /etc/fstabpatch com o UUID correto e os crontrabalhos de reinicialização desabilitados, para que os backups diários de dados clonados não sejam executados após a inicialização do clone.

Antecipo a execução do script várias vezes nas próximas semanas / meses. Como tal, o processo de clonagem deve ser repetido sem esforço.

O mesmo script pode ser usado para testar atualizações de segurança e novas atualizações da Equipe do Kernel do Ubuntu sem afetar os sistemas de produção.

WinEunuuchs2Unix
fonte
20 kernels leva 10GB !!!? Você instalou acidentalmente a edição inchada do kernel?
Lie Ryan
@LieRyan Na verdade, são 400 MB por kernel e não 500 MB, enquanto eu arredondava os números (cerca de 20 kernels). Para ver quanto cada kernel ocupa (varia de 394MB a 419MB na minha instalação atual, consulte: askubuntu.com/questions/949411/…
WinEunuuchs2Unix 4/19/19

Respostas:

19

Script Bash para clonar partição ativa do Ubuntu para clonar partição

O clone-ubuntu.shscript bash replicará de forma perfeita e segura o 16.04 LTS em uma partição para atualizar para o 18.04 LTS:

clone-ubuntu.png

Pontos importantes a considerar:

  • Você deve criar uma ext4partição vazia grande o suficiente para armazenar um clone do Ubuntu 16.04
  • Ao chamar o script, clone-ubuntu.sha partição não pode ser montada. O script monta e desmonta automaticamente a partição.
  • O comando rsyncé usado para copiar arquivos da /partição clone. A primeira vez que você executar clone-ubuntu.sh, levará alguns minutos. Na segunda vez em que você executa o script, apenas as alterações no arquivo são atualizadas e deve levar menos de um minuto.
  • Você pode executar esse script e reiniciar várias vezes. Quaisquer novos dados no destino do clone serão excluídos para refletir os /arquivos e diretórios atuais .
  • Todos os trabalhos Cron /etc/cron.d(reinicialização) são movidos para um novo subdiretório chamado /etc/cron.d/hold. Após a inicialização do clone, lembre-se de executar sudo crontab -epara impedir a execução de tarefas cron selecionadas.
  • O arquivo clonado /etc/fstabé modificado com o UUID apropriado para a partição em que está.
  • O arquivo clonado /boot/grub/grub.cfgé modificado com o UUID apropriado para a inicialização bem-sucedida do clone. O arquivo clonado quiet splashé alterado para nosplashpara que você obtenha a rolagem de mensagens do terminal. Isso fornece à consciência visual a inicialização de um clone, em vez da versão "Real".
  • update-grub é executado para atualizar o Grub com novas opções de menu apontando para a partição clonada.
  • O arquivo clonado /etc/update-manager/release-upgradesé modificado para mudar Prompt=neverpara Prompt=lts. Quando você inicializa o clone e executa do-release-upgrade -disso, o Ubuntu 16.04 pode ser atualizado para o 18.04.
  • Antes da clonagem, uma tela de confirmação é exibida (mostrada na próxima seção) e você deve digitar y / Y para continuar.

Tela de confirmação

Após selecionar uma partição de clone de destino, primeiro é verificado o ext4tipo de partição e ainda não está montado. Se este teste for aprovado, uma mensagem de confirmação será exibida:

=====================================================================
Mounting clone partition /dev/nvme0n1p8 as /mnt/clone16.04

=====================================================================
PLEASE: Carefully confirm Source (Live) and Target (Clone) partitions

SOURCE (BOOT /):  /dev/nvme0n1p5      TARGET (CLONE):  /dev/nvme0n1p8
ID:               Ubuntu              ID:              Ubuntu
RELEASE:          16.04               RELEASE:         16.04
CODENAME:         xenial              CODENAME:        xenial
DESCRIPTION:      Ubuntu 16.04.3 LTS  DESCRIPTION:     Ubuntu 16.04.3 LTS
 Size  Used Avail Use%                 Size  Used Avail Use%
  44G   17G   26G  40%                  24G   17G  5.8G  74%

NOTE: If you are recloning, new files in clone will be deleted,
      modified files are reset to current source content and,
      files deleted from clone are added back from source.

Type Y (or y) to proceed. Any other key to exit: 

Neste exemplo, um clone anterior foi selecionado para reclonagem. O espaço disponível no clone é um ponto mudo, porque já sabemos que há espaço suficiente disponível.

Se você possui várias instalações do Ubuntu, verifique se selecionou a partição correta para clonar o Ubuntu atualmente inicializado, montado como /(root), para.

Esta é sua última chance de abortar pressionando qualquer tecla, exceto you Y.


Listagem de saída

Ao executar o script, você obterá esta saída (excluindo a saída já listada acima):

=====================================================================
Using rsync to clone / to /dev/nvme0n1p8 mounted as /mnt/clone16.04
          6.11G  38%   86.46MB/s    0:01:07 (xfr#139123, to-chk=0/647700)   

Number of files: 647,700 (reg: 470,100, dir: 104,694, link: 72,903, special: 3)
Number of created files: 127,824 (reg: 72,472, dir: 15,825, link: 39,526, special: 1)
Number of deleted files: 73,318 (reg: 59,766, dir: 9,701, link: 3,847, special: 4)
Number of regular files transferred: 139,123
Total file size: 15.92G bytes
Total transferred file size: 6.11G bytes
Literal data: 6.11G bytes
Matched data: 0 bytes
File list size: 8.50M
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 6.14G
Total bytes received: 7.82M

sent 6.14G bytes  received 7.82M bytes  89.74M bytes/sec
total size is 15.92G  speedup is 2.59

Time to clone files: 68 Seconds

=====================================================================
Making changes in: /mnt/clone16.04/etc/update-manager/release-upgrades
     from Prompt=: never
       to Prompt=: lts
Allows running 'do-release-upgrade -d' when rebooting clone target
Consider 'do-release-upgrade -d -f DistUpgradeViewNonInteractive' This
allows you to go to bed or go to lunch whilst upgrade runs.

* * *  When you Upgrade, TURN OFF screen locking for inactivity. * * *

=====================================================================
Making changes in: /mnt/clone16.04/etc/fstab
        from UUID: f3f8e7bc-b337-4194-88b8-3a513f6be55b
          to UUID: 113f9955-a064-4ce2-9cae-74f2a9518550

=====================================================================
Making changes in: /mnt/clone16.04/boot/grub/grub.cfg
        from UUID: f3f8e7bc-b337-4194-88b8-3a513f6be55b
          to UUID: 113f9955-a064-4ce2-9cae-74f2a9518550
Also change 'quiet splash' to 'nosplash' for environmental awareness
Suggest first time booting clone you make wallpaper unique

=====================================================================
Calling 'update-grub' to create new boot menu
Generating grub configuration file ...
Found background: /home/rick/Pictures/1600x900/21.jpg
Found background image: /home/rick/Pictures/1600x900/21.jpg
Found linux image: /boot/vmlinuz-4.14.34-041434-generic
Found initrd image: /boot/initrd.img-4.14.34-041434-generic
Found linux image: /boot/vmlinuz-4.14.31-041431-generic
Found initrd image: /boot/initrd.img-4.14.31-041431-generic
Found linux image: /boot/vmlinuz-4.14.30-041430-generic
Found initrd image: /boot/initrd.img-4.14.30-041430-generic
Found linux image: /boot/vmlinuz-4.14.27-041427-generic
Found initrd image: /boot/initrd.img-4.14.27-041427-generic
Found linux image: /boot/vmlinuz-4.14.15-041415-generic
Found initrd image: /boot/initrd.img-4.14.15-041415-generic
Found linux image: /boot/vmlinuz-4.14.10-041410-generic
Found initrd image: /boot/initrd.img-4.14.10-041410-generic
Found linux image: /boot/vmlinuz-4.14.4-041404-generic
Found initrd image: /boot/initrd.img-4.14.4-041404-generic
Found linux image: /boot/vmlinuz-4.14.2-041402-generic
Found initrd image: /boot/initrd.img-4.14.2-041402-generic
Found linux image: /boot/vmlinuz-4.13.9-041309-generic
Found initrd image: /boot/initrd.img-4.13.9-041309-generic
Found linux image: /boot/vmlinuz-4.10.0-42-generic
Found initrd image: /boot/initrd.img-4.10.0-42-generic
Found linux image: /boot/vmlinuz-4.9.77-040977-generic
Found initrd image: /boot/initrd.img-4.9.77-040977-generic
Found linux image: /boot/vmlinuz-4.4.0-104-generic
Found initrd image: /boot/initrd.img-4.4.0-104-generic
Found linux image: /boot/vmlinuz-3.16.53-031653-generic
Found initrd image: /boot/initrd.img-3.16.53-031653-generic
Found Windows Boot Manager on /dev/nvme0n1p2@/EFI/Microsoft/Boot/bootmgfw.efi
Found Ubuntu 16.04.3 LTS (16.04) on /dev/nvme0n1p8
Found Windows Boot Manager on /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done

=====================================================================
Unmounting /dev/nvme0n1p8 as /mnt/clone16.04

rsync exibição de status para novo clone

Ao clonar pela primeira vez, você rsyncreceberá uma atualização de 0 a 100% de todos os arquivos criados. Nenhum arquivo será excluído ou alterado porque o clone está vazio:

clone-ubuntu.sh vazio clone.gif

rsync exibição de status ao reclonar

Quando rsyncreclona, ​​nunca ocorre 100%porque os arquivos que nunca foram alterados não são copiados. Haverá atrasos no andamento da atualização, como rsyncvarreduras para o próximo arquivo a ser copiado e quando ele excluir novos arquivos criados no clone que nunca existiram no original:

clone-ubuntu-rsync.gif


Script Bash - clone-ubuntu.sh

#!/bin/bash

# NAME: clone-ubuntu.sh
# PATH: /usr/local/bin
# DESC: Written for AU Q&A: /ubuntu/1028604/bash-seemless-safe-script-to-upgrade-16-04-to-18-04/1028605#1028605
# DATE: Apr 27, 2018. Modified May 6, 2018.

# UPDT: May 02 2018 - Display selected parition and get confirmation.
#       May 06 2018 - Revise `do-release-upgrade -d` instructions.
#                     Correct listing of files in empty target partition.
#       Aug 09 2018 - Add --inplace parameter to `rsync`
#                     Comment out disabling `/etc/cron.d` on clone target.
#                     Users may uncomment and/or revise to their needs.

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical \ 
                "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi

# Must run as root
if [[ $(id -u) -ne 0 ]] ; then echo "Usage: sudo $0" ; exit 1 ; fi

#
# Create unqique temporary file names
#

tmpPart=$(mktemp /tmp/clone-ubuntu.XXXXX)   # Partitions list
tmpMenu=$(mktemp /tmp/clone-ubuntu.XXXXX)   # Menu list
tmpInf1=$(mktemp /tmp/clone-ubuntu.XXXXX)   # Soucre (Booted) Ubuntu Info
tmpInf2=$(mktemp /tmp/clone-ubuntu.XXXXX)   # Target (Cloned) Ubuntu Info
tmpInf3=$(mktemp /tmp/clone-ubuntu.XXXXX)   # Work file used by DistInfo ()

#
# Function Cleanup () Removes temporary files
#

CleanUp () {
    [[ -f "$tmpPart" ]] && rm -f "$tmpPart" # If we created temp files
    [[ -f "$tmpMenu" ]] && rm -f "$tmpMenu" #  at various program stages
    [[ -f "$tmpInf1" ]] && rm -f "$tmpInf1" #  then remove them before
    [[ -f "$tmpInf2" ]] && rm -f "$tmpInf2" #  exiting.
    [[ -f "$tmpInf3" ]] && rm -f "$tmpInf3"

    if  [[  -d "$TargetMnt" ]]; then        # Did we create a clone mount?
        umount "$TargetMnt" -l              # Unmount the clone
        rm  -d "$TargetMnt"                 # Remove clone directory
    fi
}

#
# Function GetUUID () gets UUIDs of source and clone target partitions in menu.
#

GetUUID () {

    SrchLine="$1"                           # menu line passed to function
    UUID_col=0                              # start column of UUID in line
    lsblk -o NAME,UUID > "$tmpPart"         # Get list of UUID's

    while read -r UUID_Line; do             # Read through UUID list

        # Establish UUID position on line
        if [[ $UUID_col == 0 ]] ; then      # First time will be heading
            UUID_col="${UUID_Line%%UUID*}"  # Establish column number
            UUID_col="${#UUID_col}"         #  where UUID appears on line
            NameLen=$(( UUID_col - 1 ))     # Max length of partition name
            continue                        # Skip to read next line
        fi

        # Check if Passed line name (/dev/sda1, /nvme01np8, etc.) matches.
        if [[ "${UUID_Line:0:$NameLen}" == "${SrchLine:0:$NameLen}" ]] ; then
            FoundUUID="${UUID_Line:UUID_col:999}"
            break                           # exit function
        fi

    done < "$tmpPart"                       # Read next line & loop back
}


#
# Function DistInfo () builds information about source & target partitions
#

DistInfo () {

    Mount="$1"                              # Mount name is '/' or $TargetMnt
    FileName="$2"                           # "$tmpInf1" or "$tmpInf2" work file
    cat "$Mount"/etc/lsb-release >> "$FileName"
    sed -i 's/DISTRIB_//g' "$FileName"      # Remove DISTRIB_ prefix.
    sed -i 's/=/:=/g' "$FileName"           # Change "=" to ":="
    sed -i 's/"//g' "$FileName"             # Remove " around "Ubuntu 16.04...".

    # Align columns from "Xxxx:=Yyyy" to "Xxxx:      Yyyy"
    cat "$FileName" | column -t -s '=' > "$tmpInf3"
    cat "$tmpInf3" > "$FileName"
}


#
# Mainline
#

lsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT > "$tmpMenu"

i=0
SPACES='                                                                     '
DoHeading=true
AllPartsArr=()      # All partitions.

# Build whiptail menu tags ($i) and text ($Line) into array

while read -r Line; do
    if [[ $DoHeading == true ]] ; then
        DoHeading=false                     # First line is the heading.
        MenuText="$Line"                    # Heading for whiptail.
        FSTYPE_col="${Line%%FSTYPE*}"           
        FSTYPE_col="${#FSTYPE_col}"         # Required to ensure `ext4`.
        MOUNTPOINT_col="${Line%%MOUNTPOINT*}"
        MOUNTPOINT_col="${#MOUNTPOINT_col}" # Required to ensure not mounted.
        continue
    fi

    Line="$Line$SPACES"                     # Pad extra white space.
    Line=${Line:0:74}                       # Truncate to 74 chars for menu.

    if [[ "${Line:MOUNTPOINT_col:4}" == "/   " ]] ; then
        GetUUID "$Line"
        SourceUUID=$FoundUUID
        # Build "/dev/Xxxxx" FS name from "├─Xxxxx" lsblk line
        SourceDev="${Line%% *}"
        SourceDev=/dev/"${SourceDev:2:999}"
    fi

    AllPartsArr+=($i "$Line")               # Menu array entry = Tag# + Text.
    (( i++ ))

done < "$tmpMenu"                           # Read next "lsblk" line.

#
# Display whiptail menu in while loop until no errors, or escape,
# or valid partion selection .
#

DefaultItem=0

while true ; do

    # Call whiptail in loop to paint menu and get user selection
    Choice=$(whiptail \
        --title "Use arrow, page, home & end keys. Tab toggle option" \
        --backtitle "Clone 16.04 for upgrade.  ONLY CLONES / PARTITION" \
        --ok-button "Select unmounted partition" \
        --cancel-button "Exit" \
        --notags \
        --default-item "$DefaultItem" \
        --menu "$MenuText" 24 80 16 \
        "${AllPartsArr[@]}" \
        2>&1 >/dev/tty)

    clear                                   # Clear screen.
    if [[ $Choice == "" ]]; then            # Escape or dialog "Exit".
        CleanUp
        exit 0;
     fi

    DefaultItem=$Choice                     # whiptail start option.
    ArrNdx=$(( $Choice * 2 + 1))            # Calculate array offset.
    Line="${AllPartsArr[$ArrNdx]}"          # Array entry into $Line.

    # Validation - Don't wipe out Windows or Ubuntu 16.04:
    # - Partition must be ext4 and cannot be mounted.

    if [[ "${Line:FSTYPE_col:4}" != "ext4" ]] ; then
        echo "Only 'ext4' partitions can be clone targets."
        read -p "Press <Enter> to continue"
        continue
    fi

    if [[ "${Line:MOUNTPOINT_col:4}" != "    " ]] ; then
        echo "A Mounted partition cannot be a clone target."
        read -p "Press <Enter> to continue"
        continue
    fi

    GetUUID "$Line"                         # Get UUID of target partition.
    TargetUUID=$FoundUUID

    # Build "/dev/Xxxxx" FS name from "├─Xxxxx" menu line
    TargetDev="${Line%% *}"
    TargetDev=/dev/"${TargetDev:2:999}"

    break                                   # Validated: Break menu loop.

done                                        # Loop while errors.

#
# Mount Clone Target partition
#

Release=$(lsb_release -rs)                  # Source version ie: '16.04'
TargetMnt="/mnt/clone$Release"

echo ""
echo "====================================================================="
echo "Mounting clone partition $TargetDev as $TargetMnt"
mkdir -p "$TargetMnt"                       # '-p' directory may already exist
mount -t auto -v $TargetDev "$TargetMnt" > /dev/null

# Confirm partition is empty. If not empty confirm it's Ubuntu. If not exit.
# If Ubuntu display prompt with the version it contains and get confirmation.

echo ""
echo "====================================================================="
echo "PLEASE: Carefully confirm Source (Live) and Target (Clone) partitions"

# Build source information (our current boot partition)
echo "SOURCE (BOOT /)=$SourceDev"  > "$tmpInf1"
DistInfo "/" "$tmpInf1"                     # /etc/lsb_release information
df -h --output=size,used,avail,pcent "$SourceDev" >> "$tmpInf1"

# Build target information (the partition selected for cloning to)
LineCnt=$(ls "$TargetMnt" | wc -l)
if (( LineCnt > 1 )) ; then 
    # More than /Lost+Found exist so it's not an empty partition.
    if [[ -f "$TargetMnt"/etc/lsb-release ]] ; then
        echo "TARGET (CLONE)=$TargetDev" > "$tmpInf2"
        DistInfo "$TargetMnt" "$tmpInf2"    # /etc/lsb_release information
    else
        # TO-DO: might be cloning /boot or /home on separate partitions.
        #        the source partition is still `/` so can display message.
        echo "Selected partition has data which is not Ubuntu OS. Aborting."
        CleanUp                             # Remove temporary files
        exit 1
    fi
else
    echo "Target (Clone) partition appears empty" > "$tmpInf2"
    echo "/Lost+Found normal in empty partition" >> "$tmpInf2"
    echo "Head of '/Clone/' files & directories:" >> "$tmpInf2"
    ls "$TargetMnt" | head -n2 >> "$tmpInf2"
fi

# Target device free bytes
df -h --output=size,used,avail,pcent "$TargetDev" >> "$tmpInf2"

# Display source and target partitions side-by-side using bold text.
echo $(tput bold)       # Set to bold text
paste -d '|' "$tmpInf1" "$tmpInf2" | column -t -s '|'
echo $(tput sgr0)       # Reset to normal text

echo "NOTE: If you are recloning, new files in clone will be deleted,"
echo "      modified files are reset to current source content and,"
echo "      files deleted from clone are added back from source."
echo ""

read -p "Type Y (or y) to proceed. Any other key to exit: " -n 1 -r
echo    # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]] ; then
    CleanUp             # Remove temporary files
    exit 0
fi

# Copy non-virtual directories to clone. Credit to TikTak's Ask Ubuntu answer:
# /ubuntu/319805/is-it-safe-to-clone-the-current-used-disk?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

SECONDS=0
echo ""
echo "====================================================================="
echo "Using rsync to clone / to $TargetDev mounted as $TargetMnt"
rsync -haxAX --stats --delete --info=progress2 --info=name0 --inplace  \
      /* "$TargetMnt"                                                   \
      --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}
# For 16GB on Samsung Pro 960: First time 98 seconds, second time 27 seconds.
rsyncTime=$SECONDS  
echo ""
echo "Time to clone files: $rsyncTime Seconds"

# Change /etc/update-manager/release-upgrades prompt from never to LTS
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/etc/update-manager/release-upgrades"
echo "     from Prompt=: never"
echo "       to Prompt=: lts"
echo "Allows running 'do-release-upgrade -d' when rebooting clone target"
echo "Consider 'do-release-upgrade -d -f DistUpgradeViewNonInteractive' This"
echo "allows you to go to bed or go to lunch whilst upgrade runs."
echo ""
echo "* * *  When you Upgrade, TURN OFF screen locking for inactivity. * * *"
echo ""
sed -i 's/Prompt=never/Prompt=lts/' "$TargetMnt"/etc/update-manager/release-upgrades

## This section commented out to prevent surprises. You may uncomment.
## You may want to revise to include `cron.daily`, `cron.hourly`, etc.
# Move `/etc/cron.d` reboot jobs to `/etc/cron.d/hold` to prevent running
# scripts such as daily backup or Ubuntu 16.04 specific problem fixes.
#echo ""
#echo "====================================================================="
#echo "Moving '$TargetMnt/etc/cron.d' to '.../hold' to prevent running."
#echo "After booting clone, move back individual files you want to run"
#if [[ ! -d "$TargetMnt"/etc/cron.d/hold ]]; then
#    mkdir "$TargetMnt"/etc/cron.d/hold
#fi
#cp -p  "$TargetMnt"/etc/cron.d/* "$TargetMnt"/etc/cron.d/hold/
#rm -fv "$TargetMnt"/etc/cron.d/*

# Update /etc/fstab on clone partition with clone's UUID
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/etc/fstab"
echo "        from UUID: $SourceUUID"
echo "          to UUID: $TargetUUID"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab

# Update /boot/grub/grub.cfg on clone partition with clone's UUID
echo ""
echo "====================================================================="
echo "Making changes in: $TargetMnt/boot/grub/grub.cfg"
echo "        from UUID: $SourceUUID"
echo "          to UUID: $TargetUUID"
echo "Also change 'quiet splash' to 'nosplash' for environmental awareness"
echo "Suggest first time booting clone you make wallpaper unique"
sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
sed -i "s/quiet splash/nosplash/g" "$TargetMnt"/boot/grub/grub.cfg

# Update grub boot menu
echo ""
echo "====================================================================="
echo "Calling 'update-grub' to create new boot menu"
update-grub

# Unmount and exit

echo ""
echo "====================================================================="
echo "Unmounting $TargetDev as $TargetMnt"

CleanUp             # Remove temporary files

exit 0

Copie e cole o código bash acima em um novo arquivo chamado /usr/local/bin/clone-ubuntu.sh. Em seguida, torne o novo arquivo executável usando:

sudo chmod a+x /usr/local/bin/clone-ubuntu.sh

Para chamar o script, use:

sudo clone-ubuntu.sh

Como atualizar o clone 16.04 LTS para o Ubuntu 18.04 LTS

Esta é uma seção de "bônus" que pode interessar a muitas pessoas.

Reinicie sua máquina. O grubmenu conterá uma nova opção de menu apontando para a partição clonada. Você também pode selecionar uma versão específica do kernel no menu Opções avançadas do clone .

Uma maneira de converter o 16.04 LTS clonado em 18.04 LTS é executar:

sudo do-release-upgrade

Observe que a -dbandeira era obrigatória antes de 26 de julho de 2018, mas não é mais necessária.

Leia a confirmação da atualização 18.04 com atenção .

Antes de continuar, verifique se o bloqueio de tela inativo está desativado. O processo de atualização pode falhar se o computador for para a tela de bloqueio devido à inatividade do teclado.

Resumo do processo de atualização 18.04

Esta seção será específica da máquina, pois diferentes aplicativos são instalados por diferentes usuários. Aqui está um breve resumo que fiz com base em notas e memória:

  1. confirmação para continuar: ENTER
  2. os pacotes serão removidos: Y
  3. substitua longind.conf: Y
  4. Arquivo de configuração '/etc/sane.d/dll.conf', padrão N, pegue Y
  5. '/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf' Aceita o padrão N
  6. Arquivo de configuração '/etc/pulse/default.pa' padrão N, pegue Y
  7. Arquivo de configuração '/etc/grub.d/30_os-prober' 'default N, take N
  8. A configuração do menu grub em tela cheia é exibida. Opção Take: mantenha a versão local atualmente instalada
  9. Arquivo de configuração '/etc/cron.d/anacron', padrão N, leve Y para ver o que
  10. Uma mensagem de erro várias vezes: /sbin/ldconfig.real: Aviso: ignorando o arquivo de configuração que não pode ser aberto: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: Esse arquivo ou diretório não existe
  11. Não padrão: o arquivo de configuração '/etc/vnstat.conf' (diferenças de exibição 1.13 vs 1.18) leva Y
  12. 220 pacotes serão removidos. (pode levar horas), digite Y
  13. Para concluir a atualização, é necessário reiniciar. Pegue Y

Observe a etapa 10 que a maioria das pessoas nunca verá. Eu tenho uma instalação antiga do driver da nVidia no meu Ubuntu 16.04 que nunca consegui remover completamente. Está incluído porque você pode ter pacotes antigos semelhantes nunca totalmente removidos.

O Grub altera o menu de inicialização para clonar em UEFI

Ao contrário das atualizações 18.04, descobri que a atualização 18.04.1 alterou a configuração do Grub UEFI para usar o menu grub do clone em vez do menu grub original, de acordo com esta resposta: Inicialização dupla e os arquivos /boot/grub/grub.cfg - qual deles é usava?

$ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid b40b3925-70ef-447f-923e-1b05467c00e7 root 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

$ sudo grub-install
Installing for x86_64-efi platform.
Installation finished. No error reported.

A execução sudo update-grubapós a inicialização da partição original não é suficiente para alterar o que grub.cfgé carregado pelo grub. Você precisa usar sudo grub-installpara forçar o grub a usar a configuração da partição original.

A partição original e a partição clone podem ser usadas update-grubpara manter seu próprio /boot/grub/grub.cfgarquivo, mas apenas um pode ser usado durante a inicialização.

Obviamente, se você quiser que o grub use o menu grub do Clone, não execute as etapas acima na partição do original.


Editar histórico

Editar 6 de maio de 2018 - Exibição de informações para uma partição de clone (destino) vazia corrigida.

Editar 26 de agosto de 2018 - Use a --inplaceopção com rsyncarquivos tão grandes, como um arquivo de lixo de 2 GB, não são duplicados no clone durante o processo de cópia. Isso pode levar ao erro "sem espaço em disco". Comentário sem /etc/cron.dsubstituições, pois os usuários podem querer manter ou quer um diretório diferente. Atualize as instruções para usar do-release-upgradesem -dsinalizador, porque o Ubuntu 18.04.1 LTS foi lançado.

WinEunuuchs2Unix
fonte
1
+1. Obrigado por uma ferramenta útil :-)
sudodus
1
@sudodus Espero que as pessoas usem essa ferramenta antes de entrar na atualização 18.04. No mínimo, eles podem usar isso como um tutorial e repetir as etapas manualmente usando uma inicialização USB ao vivo. É trágico ler tantos erros que as pessoas estão enfrentando no novíssimo 18.04, porque foram atualizadas sem testar primeiro e comprometidas eliminando a instalação anterior 16.04 , 17.04 ou 17.10 . Infelizmente, eu já vi coisas semelhantes muitas vezes ao longo das décadas. Obrigado pelo seu voto positivo! Isso ajuda a reforçar o esforço envidado em esforços como clone-ubuntu.shMas eu já usei isso quatro vezes!
WinEunuuchs2Unix 5/05
1
Ainda não usei o seu script, mas entendo que ele é muito útil e pretendo usá-lo. - Consegui atualizar de 8.04 para 10.04 para 12.04, que usei por um longo tempo. Mas quando me propus a atualizar via 14.04 para 16.04, falhei. Como eu tinha bons backups, fiz uma nova instalação do 16.04 e, posteriormente, copiei o que eu queria manter e verifiquei os ajustes, scripts, aliases e programas instalados. - A propósito, eu trabalho em um script para criar e atualizar os live drives persistentes 'home-rw' . Bem-vindo a experimentá-lo :-)
sudodus 5/05
1
Menor erro de digitação no seu link: Eu testei todos eles em 8.04 LTS, e deveria ler 18.04 LTS no final. Sua ferramenta é o número 1 para muitas pessoas que não têm espaço suficiente no disco rígido para clonar o Ubuntu 16.04. Também é mais fácil (embora mais lento) do que criar uma nova partição no disco rígido.
WinEunuuchs2Unix
Corrigi o erro de digitação, obrigado :-) Você está certo ao clonar (ou copiar o conteúdo) em um disco rígido. Mas para as pessoas que desejam carregar seu sistema ao vivo persistente no bolso, é conveniente fazê-lo com a minha ferramenta.
Sudodus 5/05
3

Problemas com a atualização de versões anteriores para 18.04 LTS

Não é nada fácil atualizar das versões anteriores para o 18.04 LTS. Não sei se há mais problemas do que essa atualização no passado, mas as pessoas que lançam a atualização agora se arriscam . Por outro lado, eles encontram bugs e se os bugs forem relatados , ajudará a desenvolver a ferramenta de atualização e a depurar o próprio sistema Ubuntu 18.04 LTS.

Isso significa que as pessoas que são pacientes o suficiente para esperar até que a atualização seja lançada oficialmente com o primeiro lançamento pontual (18.04.1 LTS) terão uma viagem mais suave .

Testando antes de fazer a atualização completa ...

O método que o @ WinEunuuchs2Unix descreve aqui torna possível testar com uma cópia do sistema real, se a atualização para o 18.04 LTS funcionar com o sistema operacional [mais ou menos modificado] atual com o hardware do computador.

Isso pode evitar vários desastres com o sistema operacional corrompido.

Ainda não usei o script do @ WinEunuuchs2Unix, mas entendo que é muito útil e pretendo usá-lo. Consegui atualizar de 8.04 para 10.04 para 12.04, que usei por um longo tempo. Mas quando me propus a atualizar via 14.04 para 16.04, falhei e não consegui encontrar os erros.

... e se houver problemas, faça uma nova instalação

Como eu tinha bons backups , fiz uma nova instalação do 16.04 e depois copiei o que queria manter e verifiquei os ajustes, scripts, aliases e programas instalados. Se eu tivesse usado o método do @ WinEunuuchs2Unix, já tinha visto o problema cedo, teria feito uma nova instalação diretamente.

Fazendo Upgrade de um Sistema Ativo Persistente

Os sistemas ao vivo persistentes são usados ​​para obter sistemas Ubuntu muito portáteis, que às vezes são usados ​​para testes, mas às vezes são usados ​​por um longo tempo.

É um problema conhecido, que você não deve atualizar e atualizar um sistema como o de um sistema instalado, pois ele será corrompido mais cedo ou mais tarde. Além disso, você está com os drivers do kernel e do kernel, que acompanham o arquivo iso, porque eles são iniciados antes do início do sistema de sobreposição.

Mas geralmente é possível manter o /homediretório, como você pode, quando você faz uma nova instalação com uma partição 'home' separada. Se você criar uma home-rwpartição, um sistema ativo persistente irá encontrá-lo e usá-lo automaticamente durante a inicialização.

Estou desenvolvendo e testando um shellscript, mk-persistent-live_with_home-rw , que pode criar um sistema ativo persistente com uma home-rwpartição e que pode ser atualizado posteriormente ,

  • substitua o arquivo iso por um mais novo. Pelo menos, você deve atualizar quando um novo arquivo iso for lançado, mas também pode atualizar um sistema LTS uma vez por mês e usar os arquivos iso diários atuais do rastreador de teste ,

  • modifique o grub para o novo arquivo iso.

  • limpe (reformate) o casper-rwarquivo que armazena as modificações do sistema operacional (para reinstalar os pacotes de programas adicionados ao sistema),

  • preservar a home-rwpartição com seus arquivos pessoais, configurações e ajustes.

  • Veja este link para mais detalhes.

Link extra

Dicas gerais para quem deseja testar a versão mais recente e melhor do Ubuntu podem ser encontradas no link a seguir,

Como participar de testes e desenvolvimento do Ubuntu

sudodus
fonte
1
O link extra é um toque agradável. Quanto mais pessoas reportarem problemas, mais problemas serão resolvidos para os outros.
WinEunuuchs2Unix
1
Ponto muito bom para os usuários de LTS (cautelosos por natureza) aguardarem o primeiro ponto 18.04.1. Para organizações maiores, eles ainda podem clonar o 16.04 em uma partição de teste e atualizá-lo para 18.04 para fins de treinamento da equipe. Os usuários teriam acesso aos dados aos quais estão acostumados. É claro que a equipe de TI se beneficiaria de testes extensivos em dados clonados meses antes do lançamento do primeiro ponto em 26 de julho.
WinEunuuchs2Unix