我认真使用 Linux 才几个月;尽管有数百篇关于该主题的文章,但我找不到将操作系统复制到另一个驱动器的简单解决方案。
首先我尝试了根的直接副本,显然这是失败的。
使用我的基本理解,我尝试了以下操作:
- 获取新的 SSD,插入
- 类型lsblk
- 查看驱动器名为 sdb(例如)
- 输入 sudo mkfs.ext4 /dev/sdb
- 使用fdisk创建分区(例如sdb1)
- 使用 fdisk 将 GPT 放在分区 (sdb1) 上
- 复制内容:
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 上。
祝你好运