ubuntu删除windows分区并管理磁盘附加到文件系统

2个月前

一、背景说明

当前系统为 Ubuntu,磁盘采用 MBR(dos)分区表,存在历史 Windows 分区或未使用分区空间。目标是:

  • 安全删除 Windows / 无用分区
  • 避免破坏现有系统(/ 根分区)
  • 将释放空间用于 /home 目录
  • 提高磁盘利用率,同时保证系统稳定性

二、当前磁盘结构分析

示例结构(基于实际环境):

/dev/sda  59.6G
 ├─sda1   38.3G   (win分区)
 ├─sda2   512M    /boot/esp
 ├─sda3   扩展分区
 └─sda5   20.9G   /   (当前系统根分区)

关键结论

  • /dev/sda5 是当前系统根分区(不能删除)
  • /dev/sda1 可作为待清理目标(需确认数据)
  • 存在扩展分区(MBR 特有结构)

三、总体实施策略

采用 低风险方案

删除 Windows/旧分区 → 格式化 → 挂载为 /home

优势

  • 无需移动分区(避免高风险操作)
  • 不影响系统启动
  • 操作简单、可回滚

四、实施步骤


1. 数据确认与备份(必须)

检查 /dev/sda1 是否包含重要数据:

sudo mount /dev/sda1 /mnt
ls /mnt

如有重要数据:

cp -r /mnt /path/to/backup

卸载:

sudo umount /mnt

2. 删除原 Windows 分区

使用分区工具:

sudo apt install gparted
sudo gparted

操作:

  • 选择 /dev/sda1
  • 删除(Delete)
  • 应用(Apply)

3. 创建新分区

在释放空间上:

  • 新建分区(Primary)
  • 文件系统:ext4
  • 应用更改

假设新分区为:

/dev/sda1(重新创建)

4. 格式化分区

sudo mkfs.ext4 /dev/sda1

5. 创建挂载目录

如果有数据,先备份目标目录再创建挂载分区。示例为把挂载/home目录,实际你也可以挂载其他目录。

sudo mkdir -p /home

6. 挂载分区

sudo mount /dev/sda1 /home

7. 设置开机自动挂载

获取 UUID:

blkid /dev/sda1

编辑 /etc/fstab

sudo nano /etc/fstab

添加:

UUID=xxxx-xxxx  /home  ext4  defaults  0  2

测试:

sudo mount -a

8. 权限修复

sudo chown -R ubuntu:ubuntu /home
chmod 755 /home

五、可选优化(数据迁移)

如果 /home 已存在数据:

sudo rsync -aXS /home /mnt/newhome/

然后再挂载替换。备份恢复后可用diff查看有无遗失。


六、安全风险分析


1. 误删分区

风险:

  • 删除错误分区导致数据永久丢失

防护:

  • 使用 lsblkblkid 双重确认
  • 不依赖分区编号(sda1/sda2)

2. 分区表损坏(MBR 特有)

风险:

  • 扩展分区结构破坏
  • 分区不可识别

防护:

sudo sfdisk -d /dev/sda > partition.bak

3. 数据残留风险

删除分区不会清除数据:

攻击方式:

  • 使用恢复工具(TestDisk / PhotoRec)

防护:

sudo shred -v -n 3 /dev/sda1

4. 挂载失败风险

原因:

  • UUID 错误
  • 文件系统损坏

检测:

dmesg | grep ext4

5. 权限错误

表现:

  • /home 无法写入

修复:

sudo chown ubuntu:ubuntu /home

七、性能与优化建议


1. 文件系统选择

推荐:

  • ext4(稳定)
  • xfs(大文件场景)

2. 挂载参数优化

defaults,noatime

减少磁盘写入


3. SSD 优化

启用 TRIM:

sudo fstrim -av

查看磁盘使用情况

df -h

卸载过期依赖包

sudo apt autoremove -y

查看文件夹占用情况并排序

sudo du -xh / | sort -rh | head -20

查看并删除snap旧软件

sudo snap list --all | awk '$NF=="已禁用"{print $1, $3}' | while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
done

八、最终结构示例

/dev/sda
├─sda1   → /home/ubuntu
├─sda2   → /boot/efi
└─sda5   → /