linux扩容跟分区
(题外话:等我做完了,然后学习docker的时候发现为什么不直接在sd卡上创建一个docker,这样里面就是一个全新的,隔离的环境了,damn,不过话说回来本文起码是有点用的。。。。。吧)
问题描述:原系统根分区空间不足,需利用新磁盘扩展存储空间
无需u盘辅助刷系统
没有用到lvm,(我也知道lvm好用,但是系统盘不是lvm格式,不刷系统的情况下不好弄)
把大文件夹迁移到新磁盘上,然后删掉旧的大文件夹,这样在老盘上也变相挤出来了空间
一定要备份
sudo dd if=/dev/sda1 of=/path/to/backup.img bs=4M status=progress
扩容前:
占用100%(没招了😂)
扩容后:
占用69%(因为我迁移了/home文件夹)
方法1:(失败)
利用lvm工具
过程:apt-get install lvm2
问题1:原来的根目录不是lvm格式
解决:备份并转换为lvm格式
- 格式化sd卡(因为只有这块卡了,要是有别的空间大可直接备份),
mkfs.ext4 /dev/mmcblk1
- 备份到sd卡
sudo dd if=/dev/mmcblk0 of=/media/sdcard/backup.img bs=4M status=progress
- 更改根目录为lvm格式(会丢失数据),
ps 失败了,因为没有安装在u盘的ubantu,需要这个第三方u盘帮助在根目录 格式化,创建新卷
- 从备份中恢复数据。恢复数据不更改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`