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 操作系统。
我的整体方案是:
- 制作 live cd 启动盘
- 进入 live cd 系统,修改电脑硬盘分区
- 修改系统文件
- 重启操作系统
在操作之前需要确定根目录安装在哪个分区,通过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 进入图形界面,登录普通用户,发现能正常登陆。文章来源:https://www.toymoban.com/news/detail-645710.html
重启也能正常登陆。至此迁移完毕,可以把 /home.back 删除。文章来源地址https://www.toymoban.com/news/detail-645710.html
到了这里,关于linux(双系统电脑)缩小根目录分区、给/home单独分区的简单方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!