Bash betiğini Backkup'a / Ubuntu'yu başka bir bölüme klonla


12

Ubuntu 18.04 26 Nisan 2018'de çıktı ve programlarımı yükseltmek ve verilerimi dönüştürmek için denemek istiyorum, ancak hatalar varsa taahhüt etmek istemiyorum.

Windows'u 410 GB'tan 385 GB'a küçülttüm, Ubuntu gparted16.04'ü yeniden başlattım ve "Ubuntu18.04" etiketli yeni bir 25 GB bölüm oluşturmaya çalıştım. rm-kernelsUbuntu 16.04'te 10 GB'ı ortadan kaldırmak için yaklaşık 20 çekirdeği çalıştırdım ve kaldırdım.

Şimdi yeni bölümü 16.04 LTS ile dolduracak ve yeni bir Grub menü seçeneği oluşturacak bir komut dosyası istiyorum. Yalnızca ilgili dizinler kopyalanmalıdır. Örneğin /sys, /run, /procve /devçizme sırasında oluşturulan sanal dizinleri ve kopyalanamaz edilmemelidir.

Ayrıca /etc/fstabdoğru UUID ile yamalı ve cronklonlanan verilerde günlük yedeklemeler klon önyükleme sonra çalıştırılmaz ki devre dışı yeniden başlatma istiyorum .

Önümüzdeki birkaç hafta / ay boyunca senaryoyu birçok kez çalıştırmayı umuyorum. Bu nedenle klonlama işlemi zahmetsizce tekrarlanabilir olmalıdır.

Aynı komut dosyası, üretim sistemlerini etkilemeden güvenlik güncelleştirmelerini ve yeni Ubuntu Çekirdek Ekibi güncelleştirmelerini sınamak için kullanılabilir.


20 çekirdek 10GB alır !!!? Yanlışlıkla çekirdek şişirilmiş sürümünü yüklediniz mi?
Yalan Ryan

@LieRyan Aslında sayıları yuvarladığım için çekirdek başına 400 MB ve 500 MB değil (yaklaşık 20 çekirdek). Her bir çekirdeğin ne kadar yer kapladığını görmek için (geçerli yüklememde 394MB'dan 419MB'ye kadar dalgalanıyor), bkz .: askubuntu.com/questions/949411/…
WinEunuuchs2Unix

Yanıtlar:


19

Bölümü kopyalamak için aktif Ubuntu Bölümü klonlamak için Bash betiği

clone-ubuntu.shBash komut sorunsuz ve güvenli 18.04 LTS yükseltme için bir bölüm haline 16.04 LTS çoğaltmak olacaktır:

klon-ubuntu.png

Dikkate alınması gereken önemli noktalar:

  • ext4Bir Ubuntu 16.04 klonunu tutacak kadar büyük boş bir bölüm oluşturmalısınız
  • Komut dosyasını çağırırken clone-ubuntu.shbölüm bağlanamaz . Komut dosyası bölümü otomatik olarak bağlar ve bölümden çıkarır.
  • Komut rsync, dosyaları /klon bölümüne kopyalamak için kullanılır . İlk çalıştırdığınızda clone-ubuntu.shbirkaç dakika sürecektir. Komut dosyasını ikinci çalıştırdığınızda yalnızca dosya değişiklikleri güncellenir ve bir dakikadan az sürmelidir.
  • Bu komut dosyasını çalıştırabilir ve birden çok kez yeniden başlatabilirsiniz. Klon hedefindeki yeni veriler , geçerli dosyaları ve dizinleri yansıtmak için silinir/ .
  • Tüm Cron /etc/cron.d(yeniden başlatma) işleri adlı yeni bir alt dizine taşınır /etc/cron.d/hold. Klon önyüklendikten sonra, sudo crontab -eseçilen cron işlerinin çalışmasını önlemek için çalıştırmayı unutmayın .
  • Klonlanan dosya /etc/fstab, üzerinde bulunduğu bölüm için uygun UUID ile değiştirilir.
  • Klonlanan dosya /boot/grub/grub.cfg, başarılı klon önyüklemesi için uygun UUID ile değiştirilir. Klonlanan dosya quiet splash, nosplashterminal mesajlarını kaydırmak için değiştirildi . Bu, "Gerçek" versiyondan ziyade bir klonu önyükleyen görsel farkındalık verir.
  • update-grub Grub'u klonlanmış bölüme işaret eden yeni menü seçenekleriyle güncellemek için çalıştırılır.
  • Klonlanmış dosya /etc/update-manager/release-upgradesdeğişikliğine değiştirilir Prompt=neveriçin Prompt=lts. do-release-upgrade -dKlonu önyüklediğinizde ve bunu yaptığınızda Ubuntu 16.04'ün 18.04'e yükseltilmesine izin verir.
  • Klonlamadan önce bir onay ekranı görüntülenir (sonraki bölümde gösterilmiştir) ve devam etmek için y / Y yazmanız gerekir.

Onay Ekranı

Bir hedef klon bölümü seçildikten sonra, önce ext4bölüm türü olduğu doğrulanır ve önceden bağlanmamıştır. Bu test geçilirse, bir onay mesajı görünür:

=====================================================================
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: 

Bu örnekte, yeniden klonlama için önceki bir klon seçilmiştir. Klondaki kullanılabilir alan bir sessiz noktadır çünkü zaten yeterli alan olduğunu zaten biliyoruz.

Birden fazla Ubuntu kurulumunuz varsa, lütfen /(root) olarak monte edilmiş ve şu anda önyüklenen Ubuntu'yu klonlamak için doğru bölümü seçtiğinizden emin olun.

Bu, yveya dışında herhangi bir tuşa basarak iptal etmek için son şansınızdır Y.


Çıktı listesi

Komut dosyasını çalıştırdığınızda bu çıktıyı alırsınız (yukarıda listelenen çıktılar hariç):

=====================================================================
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 yeni klon için durum göstergesi

İlk kez klonlarken, rsyncoluşturulan tüm dosyaların% 0 ila% 100'ünü günceller. Klon boş olduğu için hiçbir dosya silinmeyecek veya değiştirilmeyecek:

clone-ubuntu.sh boş klon.gif

rsync tekrar takarken durum göstergesi

rsyncReclones olduğunda asla vurmaz 100%çünkü değişmeyen dosyalar kopyalanmaz. Güncelleme rsyncişleminde, kopyalanacak bir sonraki dosyanın taranması ve klonda oluşturulan ve orijinalde hiç bulunmayan yeni dosyaları silmenin gecikmesi olacaktır :

klon-ubuntu-rsync.gif


Bash betiği - 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

Yukarıdaki bash kodunu kopyalayıp adlı yeni bir dosyaya yapıştırın /usr/local/bin/clone-ubuntu.sh. Ardından aşağıdakileri kullanarak yeni dosyayı yürütülebilir yapın:

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

Komut dosyasını aramak için şunu kullanın:

sudo clone-ubuntu.sh

16.04 LTS klonu Ubuntu 18.04 LTS'ye nasıl yükseltilir

Bu, birçok kişinin ilgisini çekebilecek bir "bonus" bölümdür.

Makinenizi yeniden başlatın. grubMenü klonlanmış bölümü için yeni bir menü seçeneği işaret içerecektir. Klonun Gelişmiş Seçenekler menüsünden belirli bir çekirdek sürümünü de seçebilirsiniz .

Klonlanmış 16.04 LTS'yi 18.04 LTS'ye dönüştürmenin bir yolu çalıştırmaktır:

sudo do-release-upgrade

Not -dbayrağı 26 Temmuz 2018 öncesinde gerekli ama artık gerekli değildir edildi.

18.04 yükseltme onayını dikkatle okuyun .

Devam etmeden önce etkin olmayan ekran kilidinin kapalı olduğundan emin olun. Bilgisayarınız klavye hareketsizliği nedeniyle kilit ekranına girerse yükseltme işlemi çökebilir.

18.04 yükseltme işleminin özeti

Farklı kullanıcılar farklı uygulamalar yüklediğinden bu bölüm makineye özel olacaktır. İşte notlara ve belleğe dayalı kısa bir özet:

  1. devam etmek için onay: ENTER
  2. paketler kaldırılacak: Y
  3. longind.conf'u değiştirin: Y
  4. '/Etc/sane.d/dll.conf' yapılandırma dosyası, varsayılan N, Y al
  5. '/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf' Varsayılanı al N
  6. '/Etc/pulse/default.pa' yapılandırma dosyası varsayılan N, Y al
  7. '/Etc/grub.d/30_os-prober' 'yapılandırma dosyası varsayılan N, N al
  8. Tam ekran grub menü yapılandırması görüntülenir. Alma seçeneği: yerel sürümü şu anda yüklü tutun
  9. '/Etc/cron.d/anacron' yapılandırma dosyası, varsayılan N, Y değerini alıp
  10. Birden çok kez hata mesajı: /sbin/ldconfig.real: Uyarı: açılamayan yapılandırma dosyasını yoksaymak: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: Böyle bir dosya veya dizin yok
  11. Standart olmayan: '/etc/vnstat.conf' yapılandırma dosyası (ekran farkları 1.13 ve 1.18) Y alır
  12. 220 paket kaldırılacak. (saatler sürebilir) Y girin
  13. Yükseltmeyi tamamlamak için yeniden başlatma gerekir. Y al

Adım 10 çoğu insanın asla görmeyeceğini unutmayın. Ubuntu 16.04 üzerinde eski bir nVidia sürücü kurulumum var. Bu pakete dahil edilmiştir, çünkü benzer eski paketlerin hiçbir zaman tamamen kaldırılmamış olabilir.

Grub, önyükleme menüsünü UEFI altında klonlayacak şekilde değiştirdi

18.04 yükseltmelerinden farklı olarak 18.04.1 yükseltmesinin Grub UEFI yapılandırmasını, bu cevaba göre orijinal grub menüsü yerine klonun grub menüsünü kullanacak şekilde değiştirdiğini gördüm: Çift önyükleme ve /boot/grub/grub.cfg dosyaları - hangisi Kullanılmış?

$ 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.

sudo update-grubOrijinal bölüm önyüklendikten sonra çalıştırmak grub.cfg, grub tarafından yüklenen değişikliği değiştirmek için yeterli değildir . sudo grub-installGrub'u orijinal bölümün yapılandırmasını kullanmaya zorlamak için kullanmanız gerekir .

Hem orijinal bölüm hem de klon bölümü update-grubkendi /boot/grub/grub.cfgdosyalarını korumak için kullanılabilir, ancak önyükleme sırasında yalnızca bir tanesi kullanılabilir.

Tabii ki grubun Clone grub menüsünü kullanmak istiyorsanız, orijinalin bölümünde yukarıdaki adımları uygulamayın.


Geçmişi düzenle

Düzenle 6 Mayıs 2018 - Boş bir klon (hedef) bölümü için bilgi ekranı düzeltildi.

Düzenleme 26 Ağustos 2018 - Kullanım --inplaceile opsiyon rsyncböyle bir 2 GB çöp dosyası olarak o kadar büyük dosyaların kopyalama işlemi sırasında klonu üzerinde yinelenmez. Bu, "disk alanı yetersiz" hatasına yol açabilir. Dışında açıklama /etc/cron.dkullanıcıların saklamak veya tamamen farklı bir dizin istemek istiyorum çünkü geçersiz kılmaları. Güncelleme talimatları kullanmak do-release-upgradeolmadan -dUbuntu 18.04.1 LTS şimdi serbest bırakılır, çünkü bayrağı.


1
+1. Yararlı bir araç için teşekkürler :-)
sudodus

1
@sudodus Umarım insanlar 18.04 güncellemesiyle tam olarak girmeden önce bu aracı kullanırlar. En azından, bunu bir öğretici olarak kullanabilir ve Canlı USB önyükleme kullanarak adımları manuel olarak tekrarlayabilirler. İnsanların yepyeni 18.04'te yaşadıkları birçok hatayı okumak trajiktir çünkü ilk önce test etmeden yükseltmişler ve önceki 16.04 , 17.04 veya 17.10 kurulumlarını silerek taahhüt etmişlerdir . Ne yazık ki onlarca yıldır benzer şeyler gördüm. Oy verdiğiniz için teşekkür ederiz! Bu tür çabalara harcanan çabayı güçlendirmeye yardımcı oluyor clone-ubuntu.shAma yine de bunu 4 kez kendim kullandım!
WinEunuuchs2Unix

1
Senaryonuzu henüz kullanmadım ama çok faydalı olduğunu anlıyorum ve kullanmayı düşünüyorum. - Uzun süredir kullandığım 8.04'ten 10.04'e 12.04'e geçebildim. Ancak 14.04'ten 16.04'e yükseltmeye başladığımda başarısız oldum. İyi yedeklerim vardı, bu yüzden 16.04'lük yeni bir kurulum yaptım ve daha sonra kopyalandım, neleri saklamak istedim ve ince ayarlar, komut dosyaları, takma adlar ve yüklü programlar için kontrol ettim. - Bu arada, kalıcı canlı sürücüler 'home-rw' oluşturmak ve yükseltmek için bir komut dosyası üzerinde çalışıyorum . Denemek hoş geldiniz :-)
sudodus

1
Bağlantınızdaki küçük yazım hatası: Hepsini 8.04 LTS'de test ettim , sonunda 18.04 LTS okumalı . Aracınız, Ubuntu 16.04'lerini klonlamak için yeterli HDD alanına sahip olmayan birçok kişi için 1 numaralı gitti. HDD'lerinde yeni bir bölüm oluşturmaktan da (daha yavaş olsa da) daha kolaydır.
WinEunuuchs2Unix

Yazım hatası düzeltildi, teşekkürler :-) Bir HDD'ye klonlama (veya içeriği kopyalama) konusunda haklısınız. Ancak kalıcı canlı sistemlerini cebinde taşımak isteyen insanlar için, aracımla yapmak uygun.
sudodus

3

Önceki sürümlerden 18.04 LTS'ye yükseltme ile ilgili sorunlar

Önceki sürümlerden 18.04 LTS'ye yükseltmek hiç de kolay değil. Geçmişte bu tür bir yükseltmeden daha fazla sorun olup olmadığını bilmiyorum, ancak yükseltmeyi bırakan insanlar artık kendileri için bir risk alıyor . Öte yandan , hataları bulurlar ve hatalar bildirilirse , yükseltme aracının geliştirilmesine ve Ubuntu 18.04 LTS sisteminin kendisinde hata ayıklamaya yardımcı olur.

Bu , yükseltme ilk resmi sürümle (18.04.1 LTS) resmi olarak serbest bırakılıncaya kadar bekleyecek kadar sabırlı olan kişilerin daha sorunsuz bir sürüş elde edeceği anlamına gelir .

Tam yükseltme yapmadan önce test ediliyor ...

@ WinEunuuchs2Unix'in burada açıkladığı yöntem, 18.04 LTS'ye yükseltmenin mevcut [daha fazla veya daha az değiştirilmiş] işletim sisteminizle bilgisayar donanımınızla çalışıp çalışmadığını gerçek sistemin bir kopyasıyla test etmeyi mümkün kılar.

Bu, işletim sistemi bozulmuş birkaç felaketi önleyebilir.

Henüz @ WinEunuuchs2Unix'in senaryosunu kullanmadım, ama çok yararlı olduğunu anlıyorum ve kullanmayı düşünüyorum. Uzun süredir kullandığım 8.04'ten 10.04'e 12.04'e geçebildim. Ancak 14.04'ten 16.04'e yükseltmeye başladığımda başarısız oldum ve hataları bulamadım.

... ve sorun çıkarsa, yeni bir kurulum yapın

İyi yedeklerim vardı , bu yüzden 16.04'lük yeni bir kurulum yaptım ve daha sonra kopyalandım, neleri saklamak istedim ve ince ayarlar, komut dosyaları, takma adlar ve yüklü programlar için kontrol ettim. @ WinEunuuchs2Unix'in yöntemini kullansaydım, sorunu erken görmüştüm, doğrudan yeni bir kurulum yapmış olurdum.

Kalıcı bir canlı sistemi yükseltme

Kalıcı canlı sistemler, bazen test için kullanılan, ancak uzun süre kullanılan çok taşınabilir Ubuntu sistemlerini elde etmek için kullanılır.

Yüklü bir sistemde olduğu gibi böyle bir sistemi güncellememeniz ve yükseltmemeniz bilinen bir sorundur, çünkü er ya da geç bozulacaktır. Ayrıca, bindirme sistemi başlatılmadan önce başlatıldıkları için iso dosyasıyla birlikte gelen çekirdek ve çekirdek sürücülerine takılı kalırsınız.

Ancak /home, ayrı bir 'ev' bölümü ile yeni bir kurulum yaptığınızda dizini olabildiğince saklamak genellikle mümkündür . Bir home-rwbölüm oluşturursanız , kalıcı bir canlı sistem önyükleme sırasında otomatik olarak bulur ve kullanır.

Mk-persistent-live_with_home-rw , bir bölümle kalıcı bir canlı sistem oluşturabilenhome-rw ve daha sonra yükseltebilecek bir shellscript geliştiriyorum ve test ediyorum ,

  • iso dosyasını daha yenisiyle değiştirin. En azından yeni bir iso dosyası yayınlandığında yükseltmelisiniz, ancak ayda bir kez bir LTS sistemini yükseltebilir ve test izleyicisindeki mevcut günlük iso dosyalarını kullanabilirsiniz ,

  • Yeni iso dosyası için grub değiştir.

  • casper-rwişletim sisteminin değişikliklerini saklayan dosyayı silin (yeniden biçimlendirin) ( sisteme eklediğiniz program paketlerini yeniden yüklemeniz gerekir),

  • korumak home-rw, kişisel dosyalar, ayarlar ve ince ayarlarla bölümü.

  • Daha fazla ayrıntı için bu bağlantıya bakın.

Ek bağlantı

Ubuntu'nun en son ve en büyük sürümünü test etmek isteyenler için genel ipuçları aşağıdaki bağlantıda bulunabilir,

Ubuntu'nun test ve geliştirilmesine nasıl katılabilirsiniz?


1
Ek bağlantı hoş bir dokunuş olduğunu. Sorun bildiren daha fazla kişi, diğerleri için çözülecek daha fazla sorun.
WinEunuuchs2Unix

1
LTS kullanıcıları (doğaları gereği temkinli) için ilk puanın yayınlanmasını beklemek için çok iyi bir nokta 18.04.1. Daha büyük organizasyonlar için yine de 16.04'ü bir test bölümüne kopyalayıp personel eğitimi amacıyla 18.04'e yükseltmek isteyebilirler. Kullanıcılar alışkın oldukları verilere erişebilir. Elbette BT personeli, 26 Temmuz'un ilk puan sürümünden aylar önce klonlanmış veriler üzerinde yapılan kapsamlı testlerden de faydalanacak.
WinEunuuchs2Unix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.