linux(双系统电脑)缩小根目录分区、给/home单独分区的简单方法

linux(双系统电脑)缩小根目录分区、给/home单独分区的简单方法​

电脑配置:x86_64,有1T的固态硬盘。Windows 10+kali linux双系统电脑。

$ uname -r
6.1.0-kali5-amd64

在操作之前有 300G 作为一整个根目录安装 kali,文件系统 为 ext4,没有给 /home 单独分区。现在整个根目录大约使用了 36G,其中 /home 大约有15G;希望缩小根目录到 100G,产生的新的200G空间,其中 100G 给 /home 单独分区,剩余的100G留作备用。

网上查到的教程,命令行方式大多数看着感觉有点吓人,不怎么靠谱,而 gparted 无法直接缩小根分区大小。这里分享一种简单的、图形化的方法,看起来不是那么吓人。

给 /home 单独分区是为了便于捣鼓操作系统,如果操作系统寄了,重装系统也能保证家目录下的数据不丢失。未来也可以和其他多个 linux 共享 /home 分区。

基础知识

使用 gparted 管理磁盘空间,这是linux的一个图形化的磁盘管理工具。界面和 windows 的磁盘管理器有点类似,功能也相似但是更强大(毕竟windows的磁盘管理器没法操作 ext4)。但是无法直接对当前操作系统的根目录缩减大小,我猜是因为工作的时候没法直接动。因此我猜测可以使用别的操作系统

UUID 是磁盘分区的编号,linux启动的时候需要用到该内容。在本人的电脑里,/etc/fstab 和 /boot/grub/grub.cfg 里标志了系统启动的时候需要使用正确的 UUID 才能挂载根目录。修改分区可能会对对应分区的 UUID 产生影响,因此需要修复上述的两个文件。

live cd 是 linux 的一种ram os,意思是操作系统运行的时候,整个操作系统的文件存储在内存里,不需要修改硬盘数据。一般用于修复受损的 linux 操作系统。

我的整体方案是:

  1. 制作 live cd 启动盘
  2. 进入 live cd 系统,修改电脑硬盘分区
  3. 修改系统文件
  4. 重启操作系统

在操作之前需要确定根目录安装在哪个分区,通过lsblk能够看到。

$ lsblk 
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 931.5G  0 disk 
├─nvme0n1p1 259:1    0   128M  0 part 
├─nvme0n1p2 259:2    0   260M  0 part /boot/efi
├─nvme0n1p3 259:3    0 188.8G  0 part /mnt/win/C
├─nvme0n1p4 259:4    0   300G  0 part /mnt/win/E
├─nvme0n1p5 259:5    0 141.3G  0 part /mnt/win/D
├─nvme0n1p6 259:6    0  1000M  0 part 
├─nvme0n1p7 259:7    0   299G  0 part /
└─nvme0n1p8 259:8    0   977M  0 part [SWAP]

我的是 /dev/nvme0n1p7,需要记住这一点。也可能是诸如 /dev/sdax的形式。

制作 live cd 启动盘

下载 live cd 的 ISO 镜像,不一定要与原操作系统相同,但是要有 gparted 工具(我不知道没有 gparted live cd 的能不能登录之后使用网络下载,我猜应该可以),比如 kali 的 live cd 就有。不过 kali livecd 太大,可以使用 512MB 的 GParted Livecd;GParted Livecd 功能太简陋,可以使用作者自己制作的,大小 1.6GB。

kali live cd 下载地址(中科大源,不是官方源,从这里下载网速快):链接,根据电脑硬件,选择 live iso

制作启动盘,方法很多。需要找一个空白U盘制作。我使用的是ventory(官网链接),因为制作多个系统的启动盘很方便,基本上就是无脑操作,占用U盘的空间就是 iso 占的空间,剩下的空间还能装自己的东西。

可以参考这个教程,在 U 盘安装 ventory 之后,打开U盘,把下载的 iso 拖进 U 盘就行了。

进入 live cd 系统

U盘插入电脑,选择U盘启动(这一步安装过电脑系统的人应该都很熟悉),选择 live-cd 的 iso,一路默认选项进入 live cd 系统。打开终端。

首先拍照记录硬盘各分区的 UUID,命令是 sudo blkid | sort

执行 gparted 命令,修改之前记住的 /dev/nvme0n1p7 的大小。建议留出的空间都放在后边(也就是说,“之前的可用空间”填0,多出来的都放在之后的可用空间),因为这样 UUID 大概率不变:

选好之后点击调整大小,然后点击上边的对号执行操作。

需要有一定的时间。

执行 lsblk 发现大小已经变了,blkid 发现根目录系统的 UUID 没有变化:

如果变化,那么需要挂载根目录,进去修改 /etc/fstab 和 /boot/grub/grub.cfg ,把原来根目录分区的 UUID 改成新的。如果像我之前那样,调整大小之后新的分区在原有分区位置的前端,那么 UUID 应该不变。

重启操作系统并迁移 /home

重启后发现能正常进入操作系统,说明根目录没有问题。现在需要的就是对剩余空间进行分区并挂载到 /home ,这里仍然使用 gparted

选择未分配,右键新建,调整后点击添加:

点击上边的对号,完成新建分区。

此时出现了新的 /dev/nvme0n1p9 ,这就是计划的 /home 分区的位置。

blkid,确认其他分区的 UUID 都没有变化:(如果发生变化,那我也不知道怎么办)

复制上边的 /dev/nvme0n1p9 的 UUID 内容。

sudo vim /etc/fstab 修改 /etc/fstab 文件,添加一行:

UUID 是上面复制的 UUID;这个会在重启之后生效并自动挂载。

把 /home 的内容复制进去:

$ sudo mkdir /mnt/tmp # 创建临时目录
$ sudo mount /dev/nvme0n1p9 /mnt/tmp/ # 挂载新的目录
$ sudo rsync -av /home/* /mnt/tmp/ # 复制家目录下的全部文件
$ umount /mnt/tmp # 关闭挂载

现在需要把旧的 /home 重命名,否则重启之后挂载硬盘的 /home 会和根目录的 /home 产生冲突。但是显然在有普通用户登录的时候是无法这样操作的,因为需要读写 /home 目录。因此需要退出普通用户,用 root 的纯命令行解决。

首先登录 root 用户并退出全部普通用户。这里我的方法是,按 ctrl+shift+F1 进入 tty1 的纯命令行界面,登录 root 用户:

依次执行命令:

w # 查看有哪些普通用户。如果有命令行界面的用户,则直接 logout 退出。
ps -e | grep -i xorg # 我是 xfce 桌面,感觉这是唯一有效退出图形界面普通用户的方法。
kill xxxx # 关闭上面的进程 PID 从而退出所有普通用户
mv /home /home.back # 给 home 留出来名字,不删除是为了做备份
mkdir /home # 新建挂载点
mount /dev/xxx /home # 把刚刚新建的 home 分区挂回去

之后按 ctrl+alt+F7 进入图形界面,登录普通用户,发现能正常登陆。

重启也能正常登陆。至此迁移完毕,可以把 /home.back 删除。

posted @ 2024-06-26 20:16  KZ25T  阅读(17)  评论(0编辑  收藏  举报