如何在没有实时启动介质的情况下将操作系统移动/复制到新驱动器?

如何在没有实时启动介质的情况下将操作系统移动/复制到新驱动器?

我认真使用 Linux 才几个月;尽管有数百篇关于该主题的文章,但我找不到将操作系统复制到另一个驱动器的简单解决方案。

首先我尝试了根的直接副本,显然这是失败的。

使用我的基本理解,我尝试了以下操作:

  1. 获取新的 SSD,插入
  2. 类型lsblk
  3. 查看驱动器名为 sdb(例如)
  4. 输入 sudo mkfs.ext4 /dev/sdb
  5. 使用fdisk创建分区(例如sdb1)
  6. 使用 fdisk 将 GPT 放在分区 (sdb1) 上
  7. 复制内容:sudo rsync -WavxHAX / --exclude={"/media/*"} /media/Rob/3a9142f5-8916-406e-87b0-4ec87d7a3d12/

(假设驱动器安装在介质中)我可能还跳过了安装步骤,例如:

sudo mount /dev/sdb1 /mnt

这是凭记忆写的,步骤可能是乱序尝试的,例如创建GPT然后将分区格式化为ext4;但我无论如何也想不通。无论如何,上面概述了基本概念;无需额外下载程序或实时 USB。

有人可以告诉我如何实现这一目标吗?

答案1

假设您的系统已开启sda你的新驱动器是深圳发展银行如果有足够的容量,我建议您考虑使用 dd 来获取功能相同的操作系统副本:

dd if=/dev/sda of=/dev/sdb bs=128M

您可能需要bs根据您的磁盘大小/首选项调整(块大小)参数。请注意不要混淆:if用于源,of用于目的地

复制完成后,将 BIOS/EFI 设置更改为从 sdb 启动后,就可以立即使用 sdb 磁盘 - 您必须首先在那里识别它。

答案2

由于 /dev /proc /sys 中已安装的内容,因此您无法在运行时复制操作系统,

但 ext4 允许我们将分区挂载到不同的挂载点,

并且您还可以绑定已经安装的文件夹。

# create mbr table on new SSD printf '%s\n' o w |sudo fdisk /dev/sdb;

# create partition on it printf '%s\n' n p 1 '' '' y w |sudo fdisk /dev/sdb;

# write ext4 fs on new partition sudo mkfs.ext4 /dev/sdb1;

# create folder where to bind / (root) sudo mkdir my_os; # mount new partition sudo mount /dev/sdb1 /mnt/; # mount|bind actual system to /mnt sudo mount --bind / my_os/; # like it will clone / to my_os but excluding sub mountpoints /dev /proc /sys # copy the system sudo cp -arxpf my_os/* /mnt/;

# unmount my_os sudo umount my_os;

# remove created folder my_os sudo rm -r my_os;

# change partition UUID inside new system oldUUID="6e92d1d9-ca30-42d9-9e14-c749d0f349b5"; newUUID="$(eval $(sudo blkid /dev/sdb1|awk '{print $2}') ; echo $UUID)";

# loop over files that contains old UUID replace oldUUID by newUUID sudo grep -rl "${oldUUID}" /mnt/{etc,boot} | while read f;do sudo sed -i --follow-symlinks "s/${oldUUID}/${newUUID}/g" "${f}" done

现在,如果您想将其用作双启动,那么您只需要更新 grub

sudo update-grub;

如果您想在其他电脑上使用,那么您需要为该硬盘安装 grub 才能启动,您有两种方法:

  • 第一的

通过将当前的 grub 安装到新硬盘上,(有点冒险)

sudo grub-install /dev/sdb;
sudo update-grub;
# unplug new SSD
sudo grub-install /dev/sda;
sudo update-grub;
  • 第二

通过 chroot 进入 SSD 并安装其 grub,然后从那里更新!

# mount SSD in not mounted to /mnt
sudo mount /dev/sdb1 /mnt/; 
# prepare chroot envirement
sudo mount -t proc /proc /mnt/proc;
sudo mount -t sysfs /sys /mnt/sys;
sudo mount --rbind /dev /mnt/dev;
sudo cp -f /etc/hosts /mnt/etc/;
sudo cp -f /etc/resolv.conf /mnt/etc/resolv.conf;
sudo chroot /mnt rm /etc/mtab 2> /dev/null ;
sudo chroot /mnt ln -s /proc/mounts /etc/mtab ;
# get SSD path by UUID , probably it's /dev/sdb 
grub_install_target="$(sudo chroot /mnt blkid |grep "${newUUID}"|awk -F: '{print $1}')";
grub_install_target="${grub_install_target:0:8}";
((${#grub_install_target})) || echo you cannot continue;
# install grub and update it
sudo chroot /mnt grub-install "${grub_install_target}";
sudo chroot /mnt update-grub;
# unmount SSD before unluging it 
sudo umount -fl /mnt;

当您启动新副本时,谷歌将添加交换文件(可选)

但正如有人告诉您的那样,全新安装非常快速且良好,如果您无法使用 USB,请考虑 grub-imageboot 或 grml-rescueboot,您可以从实际硬盘驱动器启动 iso,然后将其安装到新的 SSD 上。

祝你好运

相关内容