Ubuntu重新分区

/ 0评 / 0

前言

我在前段时间把电脑换成了Ubuntu系统,由于对Linux系统不是很熟悉,我并没有对系统分区进行自定义设置,而是把所有硬盘分区合并为一个分区,然后使用系统推荐设置进行了安装。但接下来发生的一件事让我意识到我不得不对我的系统重新进行分区。

这件事情的源头是我解压一个rar压缩包,它只有1GB左右的大小,而解压它花费了我无限长的时间,关键在于我使用了图形界面进行解压操作,因此我得不到任何报错信息,只有一个永远完成不了的进度提示。我以为它会解压完成,只是时间问题,但是等了很久它依旧在解压中,于是我点击取消,然后系统卡住了,我进行任何操作都没有反应,于是我长按电源键进行了强制关机(我当时并不知道在Linux系统中强制关机意味着什么,否则我绝对不会那样做)。

再次启动时电脑无法进入图形界面,只在窗口上输出一串英文,大概意思是我的磁盘有问题,该不会文件系统损坏了吧?!我所有的数据都在电脑里呀。于是网上找各种方法,大部分是叫我进入恢复模式,然后运行磁盘修复工具。但我安装系统时并没有对磁盘进行分区,因此我一旦进入恢复模式,就会挂载磁盘,而系统是不允许在挂载磁盘的情况下修复磁盘的...

就在我快绝望时,我又查看了一下系统磁盘信息,我注意到磁盘使用情况竟然达到了100%。这也太令人奇怪了,难道是系统运行时使用空文件锁住了剩余所有空间,因为我强制关机系统来不及释放该文件导致没有空间来启动系统?

我尝试着输入 ls -l / 来看看文件系统是否损坏,然后输出了根目录下所有的文件夹,看来一切正常,我的数据还在。但是突然我看到根目录下有一个叫 swapfile 的文件,它的大小有200多GB!看来填满我硬盘的就是它!

网上搜了一下,原来它是Ubuntu系统的内存交换文件,在系统内存不足时会将不常用的内存写入交换文件以腾出内存空间给其他程序使用。在这次解压时,由于程序陷入死循环,内存不断增长,溢出后被写入交换文件,如此往复,直到交换文件填满我的整个硬盘,就导致系统内存占用100%、系统卡住,然后系统被强制关闭,交换文件来不及释放,再次启动时系统发现磁盘满了,于是无法启动。

现在问题的原因大致猜到了,我使用 rm /swapfire 删除了该交换文件,然后退出grub界面,重新启动后,我看到了我的桌面登录界面,登录进去后发现我的文件也都还在,只是那个压缩包被解压出来的文件夹有15GB大小,里面是一个无限深入的重复的目录结构(后来发现这是由于我的系统没有安装unrar,安装后可以正常解压)

现在我的电脑系统总算正常了,但这时已是凌晨1点,先睡觉吧,有空这系统还得折腾一下重新分个区,避免类似此次交换文件填满磁盘的问题...


写到这我才发现,这前言简直可以单独作一篇记录了,但由于这件事和我后面对我的Ubuntu系统进行重新分区关系密切,也就不把它们分开了。

对Ubuntu进行重新分区

事后我凑合着用了半个月,我对我的Ubuntu系统进行了重新分区。

确定分区方案

首先,需要有一个明确的分区方案(其实首先应该备份数据,因为数据比较多嫌麻烦所以跳过了,但后面证明不备份数据是错误的决定),因为分区操作一旦开始,就不能逆转。

我的电脑只有一块256GB的固态硬盘,网上查阅了一些资料,结合我自己的实际情况,做出如下分区方案:

挂载点 分区大小 文件格式 备注
/boot/efi 500MiB FAT32 系统引导分区,安装Ubuntu时自动设置的分区
/ 125.5GiB Ext4 用于系统文件、程序的存放
/home 100GiB Ext4 用于存放用户文件
swap 10GiB Swap 交换分区,用于内存交换,设置比内存大一点

你可能看到它们的总和并不是256GB,这背后的原因是GiB和GB的关系,感兴趣可以自行了解。

进行分区

先安装GParted

sudo apt install gparted

然后插入Ubuntu启动盘,选择从U盘启动,进入后选择试用Ubuntu

找到GParted并打开,查看系统磁盘信息。

将系统硬盘卸载,并从最大的分区分出110GiB,再从这110GiB中分出10GiB

将100GiB那块格式化成Ext4格式并建立分区

将10GiB那块格式化成swap格式并建立分区

在media下面新建home文件夹

sudo mkdir /media/home

将100GiB分区挂载到 /media/home,磁盘地址(/dev/sda3)可以使用GParted查看

sudo mount /dev/sda3 /media/home

复制home目录到新分区(不要直接用cp,会导致.gvfs文件无法复制过去,我就是因为使用了cp,又因为没有备份家目录,导致桌面图标完全混乱,任务栏也无法使用,最后只能升级到Ubuntu22.04才解决问题)

sudo rsync -aXS --exclude=‘/*/.gvfs’ /home/. /media/home

重启系统

修改fstab文件

sudo vim /etc/fstab

修改为如下,其中uuid使用GParted查看,分别给家目录、交换分区绑定好新分区

# /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/sda2 during installation
UUID=a1a889cd-8324-49e5-85dc-e8168616eeac  /  ext4  errors=remount-ro  0  1

# /home
UUID=8d1a12d4-9d83-4a42-9314-52542091fa74  /home  ext4  defaults  0  0

# /boot/efi was on /dev/sda1 during installation
UUID=EFE1-9144  /boot/efi  vfat  umask=0077  0  1

# /swapfile
# 将原来swapfile的注释掉
# /swapfile  none  swap  sw  0  0
UUID=1898641b-7809-471e-bfe1-14976b7f26b8  none  swap  sw  0  0

将主目录重命名,并创建空的家目录

sudo mv /home /old_home && sudo mkdir /home

重启系统

或者重新挂载磁盘,不需要重启,除非你有加密文件系统

sudo mount -a

然后使用一段时间后,如果你的系统一切正常,可以删除旧的家目录

sudo rm -r /old_home

至此完成Ubuntu系统的重分区

结语

由于最近比较忙,一直没来得及总结,部分步骤已经记不太清(所以要及时总结),总之遵循一个原则:先把文件备份好,因为Linux系统一切皆为文件,所以只要你把文件备份好了,哪怕分区失败,只需要把文件复制回去就可以了。

参考:https://help.ubuntu.com/community/Partitioning/Home/Moving

发表回复