buntu 18.04 2018年4月26日にリリースされ、プログラムをアップグレードしてデータを変換するために試してみたいが、バグがある場合はコミットしたくない。
Windowsを410 GBから385 GBに縮小し、Ubuntu 16.04を再起動し、gparted
を実行して、「Ubuntu18.04」というラベルの新しい25 GBパーティションを作成しました。 Ubuntu 16.04でrm-kernels
を実行し、約20個のカーネルを削除して、約10 GBを削除しました。
ここで、新しいパーティションに16.04 LTSを取り込み、それに新しいGrubメニューオプションを作成するスクリプトが必要です。関連するディレクトリのみをコピーする必要があります。たとえば、/sys
、/run
、/proc
、および/dev
はブート時に作成される仮想ディレクトリであり、コピーしないでください。
また、クローンを起動した後にクローンデータの毎日のバックアップが実行されないように、/etc/fstab
に正しいUUIDとcron
再起動ジョブを無効にしてパッチを適用する必要があります。
私は、今後数週間/数か月にわたって何度もスクリプトを実行すると予想しています。そのため、クローン作成プロセスは簡単に再現できる必要があります。
同じスクリプトを使用して、実稼働システムに影響を与えることなく、セキュリティアップデートと新しいUbuntu Kernel Teamアップデートをテストできます。
clone-ubuntu.sh
bashスクリプトは、18.04 LTSにアップグレードするために16.04 LTSをシームレスかつ安全にパーティションに複製します。
考慮すべき重要な点:
ext4
パーティションを作成する必要がありますclone-ubuntu.sh
を呼び出すとき、パーティションはマウントできません。スクリプトは自動的にパーティションをマウントおよびアンマウントします。rsync
は、/
からクローンパーティションにファイルをコピーするために使用されます。 clone-ubuntu.sh
を初めて実行する場合、数分かかります。 2回目にスクリプトを実行すると、ファイルの変更のみが更新され、1分もかかりません。/
をミラーリングするためにdeletedになりますファイルとディレクトリ。/etc/cron.d
(リブート)ジョブは、/etc/cron.d/hold
という新しいサブディレクトリに移動されます。クローンを起動したら、Sudo crontab -e
を実行して、選択したcronジョブが実行されないようにしてください。/etc/fstab
は、それが存在するパーティションの適切なUUIDで変更されます。/boot/grub/grub.cfg
は、適切なUUIDで変更され、クローンブートが正常に行われます。クローンファイルのquiet splash
がnosplash
に変更され、スクロールターミナルメッセージングが得られます。これにより、「Real」バージョンではなく、クローンを起動する視覚的な認識が得られます。update-grub
を実行して、クローンされたパーティションを指す新しいメニューオプションでGrubを更新します。/etc/update-manager/release-upgrades
は、Prompt=never
をPrompt=lts
に変更するように変更されます。クローンを起動してdo-release-upgrade -d
を実行すると、Ubuntu 16.04を18.04にアップグレードできます。ターゲットクローンパーティションを選択すると、最初に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
が次のファイルのコピーをスキャンし、クローンで作成された元のファイルには存在しなかった新しいファイルを削除するときに、更新の進行に遅延が生じます。
clone-ubuntu.sh
#!/bin/bash
# NAME: clone-ubuntu.sh
# PATH: /usr/local/bin
# DESC: Written for AU Q&A: https://askubuntu.com/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://askubuntu.com/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
これは、多くの人にとって興味のある「ボーナス」セクションです。
マシンを再起動します。 grub
メニューには、クローンされたパーティションを指す新しいメニューオプションが含まれます。クローンのAdvanced Optionsメニューから特定のカーネルバージョンを選択することもできます。
クローン化された16.04 LTSを18.04 LTSに変換する1つの方法は、次を実行することです。
Sudo do-release-upgrade
-d
フラグは2018年7月26日より前に必要でしたが、もう必要ありません。
18.04アップグレードの確認を注意深く読んでください。
続行する前に、非アクティブな画面ロックがオフになっていることを確認してください。キーボードの非アクティブが原因でコンピューターがロック画面に移行すると、アップグレードプロセスがクラッシュする可能性があります。
さまざまなアプリがさまざまなユーザーによってインストールされるため、このセクションはマシン固有です。メモと記憶に基づいて作成した簡単な要約を次に示します。
ほとんどの人が見ることのないステップ10に注意してください。 Ubuntu 16.04に古いnVidiaドライバーをインストールしていますが、完全に削除することはできませんでした。同様の古いパッケージが完全には削除されない可能性があるため、含まれています。
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によってロードされるgrub.cfg
を変更するには不十分です。 Sudo grub-install
を使用して、grubに元のパーティションの設定を強制的に使用させる必要があります。
元のパーティションとクローンパーティションの両方でupdate-grub
を使用して独自の/boot/grub/grub.cfg
ファイルを維持できますが、ブート中に使用できるのは1つだけです。
もちろん、grubでCloneのgrubメニューを使用する場合は、元のパーティションで上記の手順を実行しないでください。
2018年5月6日編集-空のクローン(ターゲット)パーティションの情報表示が修正されました。
2018年8月26日編集-rsync
で--inplace
オプションを使用して、コピー中にクローンで2 GBのごみ箱ファイルなどの大きなファイルが複製されないようにします処理する。これにより、「ディスク容量不足」エラーが発生する可能性があります。 /etc/cron.d
のオーバーライドはコメントアウトしてください。ユーザーが別のディレクトリを保持したい場合や、別のディレクトリが必要な場合があるためです。 Ubuntu 18.04.1 LTSがリリースされたため、do-release-upgrade
フラグなしで-d
を使用するように手順を更新します。
以前のリリースから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システムを取得するために使用されます。Ubuntuシステムは、テストに使用されることもあれば長期間使用されることもあります。
既知の問題であり、インストールされたシステムのようにシステムを更新およびアップグレードしないでください。それは遅かれ早かれ破損するためです。さらに、オーバーレイシステムが起動する前に起動されるため、isoファイルに付属するカーネルとカーネルドライバーにこだわっています。
ただし、別の「ホーム」パーティションを使用して新規インストールを行う場合、通常、/home
ディレクトリを保持することができます。 home-rw
パーティションを作成すると、永続的なライブシステムはブート中に自動的にそれを見つけて使用します。
私はシェルスクリプトを開発およびテストしています、mk-persistent-live_with_home-rw、作成できるhome-rw
パーティションを持つ永続的なライブシステム、および後でアップグレードできる
isoファイルを新しいものに置き換えます。少なくとも、新しいisoファイルがリリースされたらアップグレードする必要がありますが、LTSシステムを月に1回アップグレードし、 testing tracker から現在の毎日のisoファイルを使用することもできます。
新しいisoファイルのgrubを変更します。
オペレーティングシステムの変更を保存するcasper-rw
ファイルをワイプ(再フォーマット)します(したがって、システムに追加したプログラムパッケージを再インストールする必要があります)。
home-rw
パーティションを個人用ファイル、設定、および調整とともに保存します。
詳細については、 このリンク を参照してください。
Ubuntuの最新かつ最高のバージョンをテストしたい人向けの一般的なヒントは、次のリンクにあります。