分区安装Ubuntu系统

我的电脑经过长期使用,硬盘分区杂乱,安装了windows和两个ubuntu。我的常用ubuntu崩溃了,多次尝试也没有修复,乘着这次重装系统,打算直接全部推到,从格式化SSD开始。

数据备份

我之前是将系统和用户数据全部安装在一个分区的,就好像比windows下只有一个C盘,系统和用户数据都在一个盘,一旦崩溃就非常棘手。

重装之前,我必须把用户数据备份。我另一个ubuntu系统还可以进入,如果没有可以用U盘启动盘进入另一个系统,访问数据所在的分区,将数据复制到移动硬盘。

其他两个系统没有重要数据,就不备份,后面直接全部清除。

删除分区

首先我使用winPE系统进入PE系统,使用DiskGenius分区软件,发现我的SSD盘存在大量的分区,全部删除并使用数据清除,最后点击左上角的应用,才算是开始执行。最后整个SSD都变成了一整块未分配的区域。

制作硬盘镜像

制作硬盘镜像可以参考:2、制作硬盘镜像

Ubuntu安装

Ubuntu的安装参考:安装Ubuntu系统

但是区别在于分区步骤。在上面的教程中,只分了一个区挂在/目录,因为它没有删除EFI分区,并且将/系统和/home用户区都安装在了一个分区。

但是上面将整个SSD都清理了,加上我们分离系统和用户的需求,所以需要创建三个区:

首先创建EFI分区。因为上面清理了1T的SSD,所以可以看到有一个约1T的free space,点击加号创建分区,大小选择512MB(很大了,绰绰有余),用途选择EFI System Partition,点击OK。

同样的创建一个大约200GB的分区,挂载点选择/,用于装系统。这个200GB是根据经验来的,我统计了我之前的系统,发现系统占用91GB,用户数据占用400GB。所以这次我给系统分区设置200GB也绰绰有余了。

最后就是用户分区了,我不打算安装其他系统了或者有其他用途,所以将剩余的磁盘空间全部分成用户区。挂载点选择/home

最终可以看到,1T的SSD分成了三个区nvme0n1p1、nvme0n1p2、nvme0n1p3。分别用作EFI区、系统区、用户区。

接下来,我们选中nvme0n1p2也就是/挂载区,执行下一步安装。后续和上面教程一样了。

安装成功后:

bash 复制代码
df |grep nvme  # 查询占用情况
/dev/nvme0n1p2  196G   24G  163G   13% /
/dev/nvme0n1p1  516M  6.1M  510M    2% /boot/efi
/dev/nvme0n1p3  719G  122G  560G   18% /home

可以看到分区情况、挂载点和使用情况。

备份

现在我们安装好系统并且配置好环境后,需要进行系统备份。备份主要分成两部分:

  • /分区备份,这是系统分区,当系统无法启动或者其他故障,可以直接将备份覆盖该分区,快速恢复到之前的系统状态
  • /home这是用户数据分区,这一块就是自己弄个移动硬盘经常拷贝数据即可。可以写一个脚本定时备份,参考:Ubuntu增量备份和定时执行

现在已知系统分区在nvme0n1p2:

可以使用dd制作镜像,其中if输入文件,of是输出文件:

bash 复制代码
sudo dd if=/dev/nvme0n1p2 of=/media/backup/root_backup.img bs=4M status=progress

备份是最好退出所有程序,保证备份期间数据的一致性。

恢复时,或者重装SSD时:

bash 复制代码
sudo dd if=/media/backup/root_backup.img of=/dev/nvme0n1p2 bs=4M status=progress

然后更新GRUB,然后重启系统:

bash 复制代码
sudo mount /dev/nvme0n1p1 /boot/efi
sudo grub-install /dev/nvme0n1
sudo update-grub

dd实际上是复制整个分区,但是比如200GB分区,实际文件只占用90GB。所以可以使用partclone拷贝已用空间:

bash 复制代码
# 备份
sudo apt install partclone
sudo partclone.ext4 -c -s /dev/nvme0n1p2 -o /media/backup/root_backup.pcl

# 恢复
sudo partclone.ext4 -r -s root_backup.pcl -o /dev/nvme0n1p2

还有可以使用fsarchiver压缩备份,支持恢复到不同大小分区:

bash 复制代码
# 备份
sudo apt install fsarchiver
sudo fsarchiver savefs /media/backup/root_backup.fsa /dev/nvme0n1p2

# 恢复
sudo fsarchiver restfs /media/backup/root_backup.fsa id=0,dest=/dev/nvme0n1p2

引导问题

上面装系统时可以看到,分了三个分区,其中有一个EFI分区负责引导。如果我们格式化或者恢复或新SSD上恢复镜像,在EFI中的引导是没有一起的,因为我们没有对EFI分区数据做任何备份。单独的在新SSD中写入系统分区和数据分区数据,是无法启动的。

现在已知我的分区情况如下:

bash 复制代码
user@user-System-Product-Name:/$ df -h|grep nvme
/dev/nvme0n1p2  196G   24G  163G   13% /
/dev/nvme0n1p1  516M  6.1M  510M    2% /boot/efi
/dev/nvme0n1p3  719G  132G  551G   20% /home

系统崩溃,只恢复/系统分区

bash 复制代码
# 写入系统数据到分区
sudo dd if=/media/backup/root_backup.img of=/dev/nvme0n1p2 bs=4M status=progress

# 挂载EFI分区
sudo mount /dev/nvme0n1p1 /boot/efi

# 安装grub并更新
sudo grub-install /dev/nvme0n1  # 注意是整个磁盘,不是某个分区
sudo update-grub

# 重启
sudo reboot

格式化SSD,恢复/系统分区和/home用户分区数据

bash 复制代码
lsblk
# 确保:
# /dev/nvme0n1p1 → EFI 512MB
# /dev/nvme0n1p2 → / 分区
# /dev/nvme0n1p3 → /home 分区
# 如果没有 EFI 分区,需要新建(FAT32,512MB,标记 EFI),按照Ubuntu安装章节创建分区

# 恢复系统数据
sudo dd if=/media/backup/root_backup.img of=/dev/nvme0n1p2 bs=4M status=progress

# 恢复用户数据
sudo dd if=/media/backup/home_backup.img of=/dev/nvme0n1p3 bs=4M status=progress

# 挂载EFI并安装GRUB
sudo mount /dev/nvme0n1p1 /boot/efi
sudo grub-install /dev/nvme0n1
sudo update-grub

# 重启

未分区的全新SSD

首先进行分区规划,按照安装系统时的参数:

分区 大小 挂载点 文件系统
p1 512MB /boot/efi FAT32 (EFI)
p2 120GB / ext4
p3 剩余 /home ext4
bash 复制代码
# 恢复系统数据
sudo dd if=/media/backup/root_backup.img of=/dev/nvme0n1p2 bs=4M status=progress

# 恢复用户数据
sudo dd if=/media/backup/home_backup.img of=/dev/nvme0n1p3 bs=4M status=progress

# 挂载EFI并安装GRUB
sudo mount /dev/nvme0n1p1 /boot/efi
sudo grub-install /dev/nvme0n1
sudo update-grub

# 重启
sudo reboot

关于生成引导的理解

首先启动系统是UEFI固件会到EFI分区去寻找启动文件。

EFI分区在一个SSD中只存在一个,如果是一个未分区的全新SSD,在分区时就创建一个FAT32,大约几百MB的分区,类型选择EFI。如果已经存在EFI(一般装过系统的都会有EFI分区),则安装多个系统都会将自己的引导分拣写入到EFI分区中。那么启动后UEFI在EFI找到多少个启动程序,就会显示多少个,用户自己选择即可。

ubuntu中的流程是:根据/boot/grub数据生成启动文件,写入到/boot/efi,而/boot/efi像指针,指向了实际的EFI分区。所以/boot/efi就像是一个桥梁,给grub向EFI分区写入数据创建一个桥梁。

从上面的指令也可以看到,首先是进行了挂载,将/boot/efi这个空指针指向一个实际分区EFI。

然后使用grub-install生成启动程序,写入到EFI分区。可以看到生产grub时给的地址是/dev/nvme0n1整个磁盘,声明在这个磁盘上注册启动项。

所以可以看到,如果换了SSD,/boot/grub数据是随着系统数据一起的,只需要设置新SSD的EFI分区指向(挂载)/boot/efi,然后使用grub-install向EFI写入引导既可。

至此我们理解了这一块的知识,在实践中会遇到一些问题,比如安装了多个系统,删除某些系统且删除其分区后,再启动时仍然存在他们启动项,但是选择后进入只有黑色终端框(比如ubuntu的grub对话框)。我们就可以根据上面的原理进入EFI分区找到他们的引导文件删除。因为他们只是删除了系统分区,而EFI分区是独立的,没有同步删除他们的引导向。

如何访问EFI分区文件?方法很多,我是通过Ubuntu安装盘进入Try模式,进入将EFI分区挂载到一个临时目录,通过这个目录进入后删除了引导项。

常见问题

U盘启动后选择Try or Install Ubuntu后黑屏,按e编辑启动参数,将quiet splash ---修改为quiet splash nomodeset,按ctrl+x启动。这主要是NVIDIA显卡造成的,安装好系统后安装NVIDIA驱动一般都可以解决。

相关推荐
江湖有缘7 分钟前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿16 分钟前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙20 分钟前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
有续技术1 小时前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.1 小时前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她1 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall1 小时前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊1 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德2 小时前
CMAKE备忘录
linux·运维·服务器
9624562 小时前
跨域与私有网络访问限制排查实录
运维·服务器·网络