Bash скрипт для резервного копирования / клонирования Ubuntu в другой раздел
Ubuntu 18.04 вышла 26 апреля 2018 года, и я хочу попробовать обновить мои программы и преобразовать мои данные, но не хочу фиксировать их, если есть ошибки.
Я сократил Windows с 410 ГБ до 385 ГБ, перезагрузил Ubuntu 16.04 и запустил gparted
создать новый раздел размером 25 ГБ с надписью "Ubuntu18.04". Я побежал rm-kernels
и удалил около 20 ядер для устранения около 10 ГБ в Ubuntu 16.04.
Теперь я хочу скрипт, который заполнит новый раздел 16.04 LTS и создаст для него новую опцию меню Grub. Только соответствующие каталоги должны быть скопированы. Например /sys
, /run
, /proc
а также /dev
являются виртуальными каталогами, созданными во время загрузки и не должны копироваться.
Я также хочу /etc/fstab
исправлен с правильным UUID и cron
Задания перезагрузки отключены, так что ежедневные резервные копии клонированных данных не запускаются после загрузки клона.
Я ожидаю запуска сценария много раз в течение следующих нескольких недель / месяцев. Таким образом, процесс клонирования должен легко повторяться.
Этот же сценарий можно использовать для тестирования обновлений безопасности и новых обновлений Ubuntu Kernel Team без влияния на производственные системы.
2 ответа
Скрипт Bash для клонирования активного раздела Ubuntu в раздел клонирования
clone-ubuntu.sh
Скрипт bash легко и безопасно скопирует 16.04 LTS в раздел для обновления до 18.04 LTS:
Важные моменты для рассмотрения:
- Вы должны создать пустой
ext4
достаточно большой раздел, чтобы вместить клон Ubuntu 16.04 - При вызове скрипта
clone-ubuntu.sh
раздел не может быть смонтирован. Скрипт автоматически монтирует и размонтирует раздел. - Команда
rsync
используется для копирования файлов из/
к разделу клон. Первый раз, когда вы запускаетеclone-ubuntu.sh
это займет несколько минут. При втором запуске сценария обновляются только изменения файла, и это должно занять менее минуты. - Вы можете запустить этот скрипт и перезагрузиться несколько раз. Любые новые данные на цели-клоне будут удалены для отражения текущего
/
файлы и каталоги. - Все Крон
/etc/cron.d
(перезагрузка) задания перемещаются в новый подкаталог с именем/etc/cron.d/hold
, После загрузки клона не забудьте запуститьsudo crontab -e
чтобы предотвратить запуск выбранных заданий cron. - Клонированный файл
/etc/fstab
изменяется с соответствующим UUID для раздела, на котором он находится. - Клонированный файл
/boot/grub/grub.cfg
изменен с соответствующим UUID для успешной загрузки клона. Клонированный файлquiet splash
изменено наnosplash
так что вы получаете прокрутку сообщений терминала. Это дает визуальную осведомленность о загрузке клона, а не "реальной" версии. update-grub
запускается для обновления Grub новыми пунктами меню, указывающими на клонированный раздел.- Клонированный файл
/etc/update-manager/release-upgrades
модифицируется, чтобы изменитьPrompt=never
вPrompt=lts
, Когда вы загружаете клон и выполняетеdo-release-upgrade -d
это позволяет обновлять Ubuntu 16.04 до 18.04. - Перед клонированием отображается экран подтверждения (показанный в следующем разделе), и вы должны нажать y / Y, чтобы продолжить.
Экран подтверждения
После выбора целевого раздела-клона он сначала проверяется на ext4
Тип раздела и еще не смонтирован. Если этот тест пройден, появится подтверждающее сообщение:
=====================================================================
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:
В этом примере для клонирования был выбран предыдущий клон. Свободное место на клоне - это немая точка, потому что мы уже знаем, что свободного места достаточно.
Если у вас несколько установок Ubuntu, убедитесь, что вы выбрали правильный раздел для клонирования загруженной в данный момент Ubuntu, смонтированной как /
(корень), чтобы.
Это ваш последний шанс отменить, нажав любую клавишу, кроме y
или же Y
,
Вывод списка
Когда вы запустите скрипт, вы получите следующие выходные данные (исключая выходные данные, перечисленные выше):
=====================================================================
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
отображение статуса нового клона
При первом клонировании, rsync
даст обновление от 0 до 100% всех созданных файлов. Файлы не будут удалены или изменены, поскольку клон пуст:
rsync
отображение статуса при откидывании
когда rsync
откладывает это никогда не попадает 100%
потому что файлы, которые никогда не менялись, не копируются. Будут задержки в процессе обновления, так как rsync
сканирует следующий файл для копирования и удаляет новые файлы, созданные в клоне, которых никогда не было в оригинале:
Скрипт bash - clone-ubuntu.sh
#!/bin/bash
# NAME: clone-ubuntu.sh
# PATH: /usr/local/bin
# DESC: Written for AU Q&A: https://Ask-ubuntu.ru/questions/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:
# https://Ask-ubuntu.ru/questions/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
Скопируйте приведенный выше код bash в новый файл с именем /usr/local/bin/clone-ubuntu.sh
, Затем сделайте новый файл исполняемым, используя:
sudo chmod a+x /usr/local/bin/clone-ubuntu.sh
Для вызова скрипта используйте:
sudo clone-ubuntu.sh
Как обновить клон 16.04 LTS до Ubuntu 18.04 LTS
Это "бонусный" раздел, который может заинтересовать многих людей.
Перезагрузите свою машину. grub
Меню будет содержать новый пункт меню, указывающий на клонированный раздел. Вы также можете выбрать конкретную версию ядра в меню расширенных настроек клона.
Один из способов преобразовать клонированный 16.04 LTS в 18.04 LTS - запустить:
sudo do-release-upgrade
Обратите внимание -d
Флаг требовался до 26 июля 2018 года, но больше не нужен.
Внимательно прочитайте подтверждение обновления 18.04.
Прежде чем продолжить, убедитесь, что неактивная блокировка экрана отключена. Процесс обновления может произойти сбой, если ваш компьютер выходит на экран блокировки из-за неактивности клавиатуры.
Резюме процесса обновления 18.04
Этот раздел будет зависеть от конкретной машины, поскольку разные пользователи устанавливают разные приложения. Вот краткое резюме, которое я сделал на основе заметок и памяти:
- подтверждение для продолжения: ENTER
- пакеты будут удалены: Y
- заменить longind.conf: Y
- Файл конфигурации '/etc/sane.d/dll.conf', по умолчанию N, взять Y
- '/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf' принять значение по умолчанию N
- Файл конфигурации '/etc/pulse/default.pa' по умолчанию N, взять Y
- Файл конфигурации '/etc/grub.d/30_os-prober''по умолчанию N, взять N
- Появится полноэкранное меню grub. Выберите вариант: сохранить локальную версию установленной
- Файл конфигурации '/etc/cron.d/anacron', по умолчанию N, возьмите Y, чтобы увидеть, что
- Сообщение об ошибке несколько раз: /sbin/ldconfig.real: Предупреждение: игнорирование файла конфигурации, который нельзя открыть: /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf: Нет такого файла или каталога
- Нестандартный: файл конфигурации '/etc/vnstat.conf' (разница в отображении 1.13 против 1.18) принимает значение Y
- 220 пакетов будут удалены. (может занять несколько часов) введите Y
- Для завершения обновления требуется перезагрузка. Возьми Y
Обратите внимание, шаг 10, большинство людей никогда не увидят. У меня на Ubuntu 16.04 установлена старая версия драйвера nVidia, которую я так и не смог полностью удалить. Он включен, потому что у вас могут быть похожие старые пакеты, которые никогда не удаляются полностью.
Grub меняет загрузочное меню на клонирование под UEFI
В отличие от обновлений 18.04, я обнаружил, что обновление 18.04.1 изменило конфигурацию Grub UEFI, чтобы использовать меню клона grub вместо исходного меню grub в соответствии с этим ответом: Двойная загрузка и файлы /boot/grub/grub.cfg - который является используемый?
$ 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-grub
после загрузки исходного раздела недостаточно изменить grub.cfg
загружается grub. Вам нужно использовать sudo grub-install
заставить grub использовать конфигурацию исходного раздела.
И оригинальный раздел и раздел клона могут использовать update-grub
поддерживать свои собственные /boot/grub/grub.cfg
файл, но только один может быть использован во время загрузки.
Конечно, если вы хотите, чтобы grub использовал меню grub в Clone, не делайте описанных выше шагов с оригинальным разделом.
Редактировать историю
Редактировать 6 мая 2018 г. - Исправлено отображение информации для пустого клонового (целевого) раздела.
Изменить 26 августа 2018 года - Использование --inplace
вариант с rsync
поэтому большие файлы, такие как корзина размером 2 ГБ, не дублируются при клонировании в процессе копирования. Это может привести к ошибке "недостаточно места на диске". Закомментируйте /etc/cron.d
переопределяет, потому что пользователи могут хотеть сохранить или хотеть другой каталог вообще. Обновить инструкции по использованию do-release-upgrade
без -d
флаг, потому что Ubuntu 18.04.1 LTS теперь выпущен.
Проблемы с обновлением с предыдущих выпусков до 18.04 LTS
Нелегко перейти с предыдущих выпусков на 18.04 LTS. Я не знаю, было ли в прошлом больше проблем, чем такое обновление, но люди, которые выпускают обновление сейчас, рискуют для себя. С другой стороны, они находят ошибки, и если сообщать об ошибках, это поможет разработать инструмент обновления, а также отладить саму систему Ubuntu 18.04 LTS.
Это означает, что люди, которые достаточно терпеливы, чтобы дождаться официального выпуска обновления с первым выпуском (18.04.1 LTS) , получат более плавную езду.
Тестирование перед полным обновлением...
Метод, описанный здесь @WinEunuuchs2Unix, позволяет проводить тестирование с копией реальной системы, если обновление до 18.04 LTS будет работать с вашей текущей [более или менее измененной] операционной системой с аппаратным обеспечением вашего компьютера.
Это может предотвратить несколько бедствий с поврежденной операционной системой.
Я еще не использовал скрипт @WinEunuuchs2Unix, но я понимаю, что он очень полезен, и я намерен его использовать. Мне удалось обновить с 8.04 до 10.04 до 12.04, который я использовал долгое время. Но когда я решил перейти с 14.04 на 16.04, я не смог найти ошибки.
... а если проблемы, сделай новую установку
У меня были хорошие резервные копии, поэтому я сделал новую установку 16.04 и позже скопировал, что я хотел сохранить и проверил на наличие твиков, скриптов, псевдонимов и установленных программ. Если бы я использовал метод @WinEunuuchs2Unix, я видел проблему раньше, я бы сделал новую установку напрямую.
Обновление постоянной живой системы
Постоянные живые системы используются для получения очень переносимых систем Ubuntu, которые иногда используются для тестирования, но иногда используются в течение длительного времени.
Это известная проблема, что вы не должны обновлять и обновлять такую систему, как вы делаете это с установленной системой, потому что она рано или поздно будет повреждена. Кроме того, вы застряли с ядром и драйверами ядра, которые поставляются с iso-файлом, потому что они запускаются до запуска системы оверлеев.
Но обычно можно сохранить /home
каталог, как вы можете, когда вы делаете новую установку с отдельным "домашним" разделом. Если вы создаете home-rw
Постоянно работающая система автоматически найдет и использует ее во время загрузки.
Я занимаюсь разработкой и тестированием сценария mk-persistent-live_with_home-rw, который может создать постоянную живую систему с home-rw
раздел, и это может позже обновить его,
замените iso-файл более новым. По крайней мере, вы должны обновить при выпуске нового iso-файла, но вы также можете обновлять систему LTS раз в месяц и использовать текущие ежедневные iso-файлы с трекера тестирования,
изменить grub для нового iso-файла.
стереть (переформатировать)
casper-rw
файл, в котором хранятся модификации операционной системы (поэтому необходимо переустановить пакеты программ, которые вы добавили в систему),сохранить
home-rw
раздел с вашими личными файлами, настройками и настройками.Смотрите эту ссылку для более подробной информации.
Дополнительная ссылка
Общие советы для людей, которые хотят протестировать последнюю и лучшую версию Ubuntu, можно найти по следующей ссылке: