Kylin+Windows 10Pro+Ubuntu 24.04 LST 三系统为Ubuntu系统磁盘扩容,挂载home目录,以及修复UUID输入错误产生的BUG

本机情况

当前主机包含三种操作系统,Kylin+Windows10+Ubuntu 24.04。其中每个分区磁盘都享有共同路径前缀:/dev/nvme0n1p*。其中*从1至7分别表示7个分区磁盘:

  1. p1的目录是boot/efi,是作为启动盘存在。
  2. p2内部存储着efi、grub目录、config-5.4.1-110-generic、initrd.img、initrd.img.old、initrd.img-5.4.18-110-generic、System.map-5.4.18-110-generic、vmlinuz、vmlinuz、vmlinuz.old、vmlinuz-5.4.18-110-generic。
  3. p3内部有bin、boot、cdrom、data、dev、etc、home、lib、lib32、lib64、libx32、media、mnt、opt、proc、root、run、sbin、sbuild-nonexistent、srv、sys、tmp、usr、var,其中bin目录下存在com.kylin.PhoneControl.py文件。
  4. p4内部仅存在3个文件夹home、root、usershare,其中home文件夹下有kylin文件夹,/home/kylin/路径下有以下子文件夹,公共的、模板、视频、图片、文档、下载、音乐、桌面。
  5. p5内部为windows C盘的内容。
  6. p6新家卷内部为windows D盘内容。

综上所示,p3/p4为银河麒麟(Kylin)系统的根分区与/home目录挂载磁盘。p5/p6为windows C/D盘。而当前ubuntu的根分区为p7。

同时,本贴记录时间已在挂载成功之后,故指令执行结果并未截图,如若存在步骤缺失,欢迎在评论区截图讨论。

解决方案

总体思路

保留 Kylin 与 Windows 的前提下,从可用磁盘空间约197 GB Windows 的 D 盘p6,划出一块空间,建立新的 ext4 分区专供 Ubuntu 数据(挂载为/home或 /mnt/data)。

设计目的

  1. 不变动正在使用的 Ubuntu 根分区(p7);
  2. 不破坏 Kylin(p3/p4);
  3. 用 D 盘的巨大空闲腾出 80–200 GB 给 Ubuntu,解除长期根分区压力。

具体步骤

Step1:做个只读确认

不改动系统,只确认现状:

lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,FSUSE%,UUID,LABEL
cat /etc/fstab

Step2:收缩Windows 里的 D 盘

  1. 以管理员权限打开“磁盘管理”(diskmgmt.msc)

  2. 右键 “新加卷 (D:)” → “压缩卷…”

  3. 输入你想给 Ubuntu 的大小(建议 100–150 GB),执行。

  4. 完成后会得到一段 未分配空间(紧邻p6的右侧)。

Step3:在 Ubuntu 里创建新分区

  • 安装并打开 GParted(或“磁盘”工具):
sudo apt-get install -y gparted
sudo gparted
  • 选中那块 未分配空间 → 右键“新建”
    1. 分区类型:主分区(GPT 下都是分区条目即可)

    2. 文件系统:ext4

    3. 对齐到 MiB(默认即可)

    4. 选中应用

  • 记下新分区设备名(通常会是 /dev/nvme0n1p8)和它的 UUID

sudo blkid /dev/nvme0n1p8

注意:UUID非常重要!请务必纸笔记录需要挂载/home目录磁盘的UUID,如若输入错误,后续在GRUP界面进行补救时,可以通过记录的UUID进行修复。

Step4:将整个/home目录迁到新分区

  • 挂载并复制
sudo mkdir -p /mnt/p8
sudo mount /dev/nvme0n1p8 /mnt/p8
sudo rsync -aHAX --info=progress2 /home/ /mnt/p8/
  • 写入fstab
  • 注意:此处输入的UUID务必和所需要挂载/home磁盘的UUID一一对应
  • 注意:<UUID>与/home之间存在两个空格,/home与ext4之间也存在两个空格,ext4与defaults之间也存在两个空格,remount-ro与0以及0与2之间也存在两个空格
echo 'UUID=<UUID>  /home  ext4  defaults,noatime,errors=remount-ro  0  2' | \
  sudo tee -a /etc/fstab
  • 切换挂载点并生效
sudo mv /home /home_old
sudo mkdir /home
sudo mount -a
df -h /home   # 应看到 /home 挂在 p8
  • 验证无误后清理旧数据
sudo rm -rf /home_old
df -h /

本贴遇见的BUG:

整个流程中,最容易出现BUG的步骤为UUID的的输入。注意!任何一个字符的错误都有可能导致在使用tee指令写入/etc/fstab后,在执行mount指令时,出现目录绑定磁盘的报错。

BUG的解决方案:

临时编辑 GRUB,进 root shell

  • Step1:在 GRUB 主菜单,选中正常的 Ubuntu 启动项,按 e 进入编辑界面。

  • Step2:找到以 linux 开头很长的那一行,把其中的ro quiet splash 替换或在末尾追加

rw init=/bin/bash
  • Step3:按 Ctrl+XF10 启动。几秒后会直接进入 # 的 root shell。
  • Step4:以可写方式挂载根分区并清理 fstab 中所有 /home 行,只保留正确 UUID(用真实 UUID 替换 <UUID>):
mount -o remount,rw /
cp -a /etc/fstab /etc/fstab.bak.$(date +%F-%H%M)

# 删除 fstab 里所有 /home 挂载行(无论对错,先删干净)
sed -i '\|[[:space:]]/home[[:space:]]|d' /etc/fstab

# 写入唯一正确的一行,带“防卡死”参数
echo 'UUID=<UUID>  /home  ext4  defaults,noatime,nofail,x-systemd.device-timeout=10  0  2' >> /etc/fstab

# 生效并自检
systemctl daemon-reload
mount -a
mount | grep " on /home "
  • 注意:<UUID>与/home之间存在两个空格,/home与ext4之间也存在两个空格,ext4与defaults之间也存在两个空格,devide-timeout=10与0以及0与2之间也存在两个空格
  • 注意:grep与左双引号存在一个空格,左双引号与on存在一个空格,on与/home存在一个空格,/home与右双引号之间也存在一个空格。

看到只剩一条 /home,且设备是你新分区(如 /dev/nvme0n1p8)就对了。

  • Step6:重启:
exec /sbin/reboot -f

后续检查操作

  • Step1:只剩一条 /home 挂载:
grep -nE '[[:space:]]/home[[:space:]]' /etc/fstab
mount | grep ' on /home '
df -h / /home
  • Step2:文件系统一致性:
umount /home
fsck -f /dev/nvme0n1p8
mount /home

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值