clone-ubuntu.shBash 脚本

clone-ubuntu.shBash 脚本

由于我的笔记本电脑 ( ) 的原始 SSDsdb相对较小(100GB),因此我最近安装了另一个sda容量更大的 SSD ( )(500GB)。我的想法是使用命令将旧 SSD ( ) 克隆sdb到新 SSD ( sda)上dd,因此我从 live-usb-ubuntu-stick 运行了以下命令:

sudo dd if=/dev/sdb of=/dev/sda bs=64K

以便将sdb(旧 SSD)的内容复制到sda(新 SSD)上。

运行此命令后,我无法从两个 SSD 中的任何一个启动(这两个 SSD 仍安装在笔记本电脑中)。然后我运行了该boot-repair命令,现在当我从启动时,GRUB 可以正常启动sda。GRUB 为我提供了以下选项:

 - Ubuntu
 - Windows 7
 - Ubuntu (on /dev/sda5)
 - Windows 7 (on /dev/sda2)

问题是,当我想在较新的 SSD 上启动 Ubuntu 版本(Ubuntu (on \dev\sda5)GRUB 中的选项)时,GRUB 仍会在旧 SSD 上加载 Ubuntu 安装\dev\sdb5

我想我可能需要\boot\grub对文件进行手动\etc\fstab更改sda

\etc\fstab目前有以下内容(上\dev\sda):

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdb5 during installation
UUID=c4055038-09dd-417e-88f1-228ffcf873c1 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sdb6 during installation
UUID=9c79ac5d-78a8-4ab7-9141-8397cb686e25 none            swap    sw              0       0

编辑:

当我在 GRUB 中选择并在终端中Ubuntu (on \dev\sda5)运行时,我得到以下内容:lsblk

sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   102M  0 part 
├─sda2   8:2    0  78.3G  0 part 
├─sda3   8:3    0     1K  0 part 
├─sda5   8:5    0 195.8G  0 part 
└─sda6   8:6    0   7.9G  0 part 
sdb      8:16   0 119.2G  0 disk 
├─sdb1   8:17   0   102M  0 part 
├─sdb2   8:18   0  78.3G  0 part 
├─sdb3   8:19   0     1K  0 part 
├─sdb5   8:21   0  31.8G  0 part /
└─sdb6   8:22   0   7.9G  0 part [SWAP]

答案1

clone-ubuntu.shBash 脚本

使用clone-ubuntu.sh会快速完成您想要的操作。下面包含解决您问题的相关代码片段,但请访问链接查看完整图片。

克隆类似dd

克隆类似dd,但无需重新启动到 Live USB。虚拟文件系统会自动跳过以节省时间并消除错误。如果需要,可以重新运行该脚本(例如,您正在测试 Ubuntu 升级/更新),并且第二次运行速度更快:

rsync -haxAX --stats --delete --info=progress2 --info=name0 --inplace  \
      /* "$TargetMnt"                                                   \
      --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

更新/etc/fstab

使用lsblk确定源和目标 UUID 来自动在新克隆中进行更改:

# 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

使用新条目更新grub菜单

Grub 需要知道正确的 UUID 并clone-ubuntu.sh自动为您生成:

# 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

概括

包含相关的 bash / shell 命令,因此您可以手动执行相同的步骤,以成功克隆并按预期启动和运行。

相关内容