linux扩容(曲线救国版)

54 阅读2分钟

linux扩容跟分区

(题外话:等我做完了,然后学习docker的时候发现为什么不直接在sd卡上创建一个docker,这样里面就是一个全新的,隔离的环境了,damn,不过话说回来本文起码是有点用的。。。。。吧)

问题描述:原系统根分区空间不足,需利用新磁盘扩展存储空间

无需u盘辅助刷系统

没有用到lvm,(我也知道lvm好用,但是系统盘不是lvm格式,不刷系统的情况下不好弄)

把大文件夹迁移到新磁盘上,然后删掉旧的大文件夹,这样在老盘上也变相挤出来了空间

一定要备份

sudo dd if=/dev/sda1 of=/path/to/backup.img bs=4M status=progress

扩容前:

占用100%(没招了😂)

image.png

扩容后:

占用69%(因为我迁移了/home文件夹)

image.png

方法1:(失败)

利用lvm工具

无损将普通分区转换为 LVM 分区 | 呉真的博客

过程:apt-get install lvm2

问题1:原来的根目录不是lvm格式

解决:备份并转换为lvm格式

  1. 格式化sd卡(因为只有这块卡了,要是有别的空间大可直接备份),

mkfs.ext4 /dev/mmcblk1

  1. 备份到sd卡

sudo dd if=/dev/mmcblk0 of=/media/sdcard/backup.img bs=4M status=progress

  1. 更改根目录为lvm格式(会丢失数据),

ps 失败了,因为没有安装在u盘的ubantu,需要这个第三方u盘帮助在根目录 格式化,创建新卷

  1. 从备份中恢复数据。恢复数据不更改lvm格式与普通格式或lvm格式无关(卡在上一步,这一步未执行)

方法2:(成功)

把新磁盘作为原根目录的 “空间扩展载体” —— 把根目录下占空间大的子目录迁移到新磁盘,然后删掉旧磁盘上的旧文件

查看新磁盘

lsblk

直接使用整个磁盘

sudo mkfs.ext4 /dev/sdb

创建挂载点

sudo mkdir /mnt/newdisk

挂载新磁盘

sudo mount /dev/sdb1 /mnt/newdisk

验证挂载

df -h /mnt/newdisk

sudo systemctl stop systemd-logind # 对于/home可能需要

复制数据到新磁盘(保持权限)

sudo rsync -avxHAX --progress /home/ /mnt/newdisk/home/

验证数据完整性

sudo diff -r /home /mnt/newdisk/home | head -20

备份原目录

sudo mv /home /home.backup

创建原目录结构

sudo mkdir /home

卸载临时挂载点

sudo umount /mnt/newdisk

将新磁盘直接挂载到原目录

sudo mount /dev/sdb1 /home

(有个小坑,原来的时候是/home....,挂载的时候是/home/home/.....

解决方法sudo mv /home/home/* /home/home/.* /home/ 2>/dev/null || true

还有就是不要直接挂载在根目录 / 下 )

验证

`df -h /home

ls -la /home # 应该看到原数据`

编辑 /etc/fstab 添加

sudo vim /etc/fstab

#/dev/sdb1 /home ext4 defaults 0 2

测试fstab配置

`sudo mount -a

df -h /home`