注意:我的/boot文件夹没有和Ubuntu系统其他分区放在同一个物理硬盘上,这个设置和大多数的默认配置并不一样,因此本文章只是个人记录而非教程。
将Ubuntu 20.04从较小容量硬盘迁移到较大容量硬盘的过程分为几个步骤。以下是详细步骤:
1. 准备新的大容量硬盘。确保已经正确地安装和连接到计算机上。
2. 从Ubuntu 20.04的安装介质(例如USB驱动器)启动计算机。可以使用UltraISO制作Linux的硬盘镜像。
3. 在启动菜单中选择"Try Ubuntu"(尝试Ubuntu)而不是安装。
4. 打开终端并安装gparted
分区编辑器(如果尚未安装):
sudo apt updatesudo apt install gparted
5.使用gparted
创建新硬盘上的分区。首先,通过以下命令启动gparted
:
sudo gparted
使用gparted
为新硬盘创建一个与旧硬盘相同的分区布局。确保为/boot
,/
(root)和swap
分区创建相应的分区。如果有/home
分区或者其他分区,也需要对应创建。
6. 使用命令行进行各分区的搬家
1)复制根目录分区
sudo dd if=/dev/sdX1 of=/dev/sdY1 bs=64K conv=noerror,sync status=progress
其中,/dev/sdX1
是旧硬盘上的根目录分区,/dev/sdY1
是新硬盘上的根目录分区。
2)复制/home
分区
sudo dd if=/dev/sdX2 of=/dev/sdY2 bs=64K conv=noerror,sync status=progress
其中,/dev/sdX2
是旧硬盘上的/home
分区,/dev/sdY2
是新硬盘上的/home
分区。
3)复制/var
分区
sudo dd if=/dev/sdX3 of=/dev/sdY3 bs=64K conv=noerror,sync status=progress
其中,/dev/sdX3
是旧硬盘上的/var
分区,/dev/sdY3
是新硬盘上的/var
分区。
4)复制和设置swap
分区
a.使用dd
命令复制swap
分区:
sudo dd if=/dev/sdX4 of=/dev/sdY4 bs=64K conv=noerror,sync status=progress
其中,/dev/sdX4
是旧硬盘上的swap
分区,/dev/sdY4
是新硬盘上的swap
分区。
b.使用mkswap
命令在新硬盘上的swap
分区创建swap签名:
sudo mkswap /dev/sdY4
c.更新/etc/fstab
文件以引用新的swap
分区UUID。首先,获取新swap
分区的UUID:
sudo blkid /dev/sdY4
然后,使用文本编辑器(例如nano
)打开/etc/fstab
文件(见后文常见问题1):
sudo nano .../etc/fstab # 仅作示例,需要挂载新硬盘并在对应硬盘上操作
在/etc/fstab
文件中找到旧swap
分区的UUID,并将其替换为新swap
分区的UUID。保存更改并关闭文件(Ctrl+X后选择Y)。
7. GParted修复unallocated空间
使用dd将/home等分区转移至新硬盘后,GParted显示新硬盘上出现了unallocated空间,是因为dd
会精确复制源分区的大小,所以如果新硬盘上的分区比源分区大,那么就会产生未分配的空间。
解决问题:在GParted中选择对应红色感叹号的硬盘选择Check并自动修复。
注意:如果其他硬盘安装了Windows系统,由于Windows系统的保留也会出现红色感叹号的硬盘,请忽略,只修复安装了Linux系统的对应硬盘位置。
8. 使用boot-repair自动修复引导
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update sudo apt-get install -y boot-repair && boot-repair
选择Advanced Options,选择对应引导所在的硬盘,并实行自动修复。
常见问题1:如何编辑大容量硬盘(系统迁移的目标硬盘)上的/etc/fstab
文件
需要先挂载新硬盘上的根分区。
1. 创建一个临时挂载点,例如 /mnt/new_root
sudo mkdir /mnt/new_root
2. 挂载新硬盘上的根分区
sudo mount /dev/sdY1 /mnt/new_root
其中,/dev/sdY1
是新硬盘上的根分区。请根据实际情况替换Y
。
3. 现在,可以编辑目标大容量硬盘上的/etc/fstab
文件
sudo nano /mnt/new_root/etc/fstab
4. 更新/etc/fstab
文件中的UUID,然后保存并关闭文件。(由于dd拷贝,新旧硬盘的UUID应该是对应一致的,经过检查如果确实如此,可以省略此步)
5. 最后,卸载新硬盘上的根分区
sudo umount /mnt/new_root
完成这些步骤后,目标大容量硬盘上的/etc/fstab
文件已更新,以正确挂载新硬盘上的/home
、/var
和/swap
分区。
常见问题2:在迁移完Ubuntu系统后,swap空间依然为迁移前旧硬盘的大小
以下是如何调整swap
分区大小的步骤:
1. 关闭旧硬盘上的swap
分区:
sudo swapoff -a
或者
sudo swapoff /dev/sdX4
其中,/dev/sdX4
是旧硬盘上的swap
分区。请根据实际情况替换X
。
- 更新
/etc/fstab
文件以引用新的swap
分区UUID。
在/etc/fstab
文件中找到swap
分区的配置行,或者如果不存在,请创建一个新行。确保该行遵循以下格式:
UUID=你的swap分区UUID none swap sw 0 0
将swap分区UUID
替换为第1步中获得的UUID(UUID可以通过Ubuntu自带的“磁盘”工具获得)。
例如:
UUID=12345678-90ab-cdef-1234-567890abcdef none swap sw 0 0
保存更改并关闭/etc/fstab
文件。
3. 重新启动计算机:
sudo reboot
现在,每次重启时,swap
分区应该自动挂载。
以上是引用大佬https://blog.csdn.net/wenquantongxin/article/details/130192728
以下是我个人实操:
不重装系统的硬盘更换方式
这两天折腾了下Ubuntu的硬盘扩容。
把500G的升级成了2000G的。
方式1(失败了)
DiskGenius 硬盘备份、还原
因为ITX只能插两个硬盘,所以刚开始我想分两步:
500G的Ubuntu→1000G的Windows→2000G的Ubuntu
刚开始用DiskGenius,先是硬盘备份到本地,只能选择按文件备份(DiskGenius还提示说这样防止碎片),但是按文件备份好慢啊,等了俩小时备份好了,又等了俩小时把备份硬盘还原到2000G的硬盘中。
但是启动的时候报错:
systemd-udevd.service: Failed to excute command: No such file or directory
grub文件生成
救援模式进不去,网上也搜不到。我查了下,大概意思就是文件损坏了。
那我想就把引导启动的 grub 文件修复一下呗。
于是使用刻录好Ubuntu的U盘启动,选择Try it,而不是安装。
# 挂载系统分区
sudo mount /dev/sda1 /mnt
# 挂载必要的虚拟文件
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
# 切换root环境
sudo chroot /mnt
# 重新生成启动配置
grub-mkconfig -o /boot/grub/grub.cfg
# 重启
sudo reboot
重启之后,Ubuntu的选择页面变成了Debian的了,颜色也由灰色变成了蓝色,但是依旧不解决问题。
仍旧有服务无法启动
apt更新
那我想把他报错的systemd更新一下好了。
# 挂载系统分区
sudo mount /dev/sda1 /mnt
# 挂载必要的虚拟文件
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
# 切换root环境
sudo chroot /mnt
进入虚拟环境之后,apt update && apt upgrade, 但是网络有点问题。
发现是网络配置没有继承,于是通过 mv /etc/resolv.conf /mnt/etc/resolv.conf 解决了。
看来chroot也不是很好用,很多系统加载的时候的配置,都不会自动生成,也不会使用宿主机的环境。
再之后虽然apt upgrade没有问题,但是apt update报错python环境有问题,无法完成指令。
没办法,能力不足以修复系统
方式2(success)
后来我想着用启动盘,直接500G的Ubuntu→2000G的Ubuntu拷贝过去就行了。
刚开始我用的老毛桃,里面有DiskGenius软件,我想着这样通过硬盘克隆,应该跟dd命令没什么区别。
但跟方式1产生了一样的错误
于是我使用Ubuntu的启动盘,这次我使用dd命令 sudo dd if=/dev/sdX1 of=/dev/sdY1 bs=128K conv=noerror,sync status=progress
不超过5分钟,就将500G的硬盘拷过去了(是的,进度条提示是500G,而不是硬盘中的60G文件。dd命令应该是直接硬件层面盘对盘拷贝,无需考虑虚拟磁盘中的文件系统),这才是固态硬盘的正常速度嘛!
教程还让改一下复制后磁盘的 /etc/fstab 里的内容,但是我想测试一下还会报什么样的环境问题,就直接重启试了下,没想到直接点亮了。
所以我猜方式1的问题主要在于系统格式不匹配,Ubuntu的Ext4格式读入Windows的时候,被转义了。所以系统就寄了。
Linux也不愧是一切皆是文件,直接磁盘拷过去,系统就复制过去了。
搞定之后的磁盘空间就是这样
磁盘UUID直接自动配置好了