先请主角“如意金箍棒”:
#reParted.sh
#注意!!!
#1.命令涉及重新分区,请拔掉其他数据盘并备份二合一盘上的重要数据!!!
#2.首先一定要确认你的二合一盘的设备名称,根据实际情况修改"/dev/sdb"
# (名称一般为/dev/sda,/dev/sdb,/dev/sdc依此类推,对应存储空间管理员
# 系统概况中图示的插槽顺序,即第一个格子为sda...)
#3.仅扩容存储空间可直接运行。调整后启动分区及存储空间大小均变化的必
# 须先在主菜单->储空间管理员->存储空间中先删除二合一盘上的存储空间
# 后运行此脚本,等待脚本运行结束后再添加回存储空间!
bootdev="/dev/sdb"
#查找启动分区
mkdir /mnt/boot
mount ${bootdev}3 /mnt/boot
if test -d /mnt/boot/boot -o -f /mnt/boot/grldr -o -d /mnt/boot/efi; then bootpartition=3;fi
umount ${bootdev}3
mount ${bootdev}4 /mnt/boot
if test -d /mnt/boot/boot -o -f /mnt/boot/grldr -o -d /mnt/boot/efi; then bootpartition=4;fi
umount ${bootdev}4
rmdir /mnt/boot
#判断是否找到启动分区,未找到则放弃执行
if test -z ${bootpartition}; then echo "未找到启动分区,放弃分区调整!";else
#备份启动分区
if test -f /root/bootimage.gz; then echo "发现备份文件,放弃备份。";else dd if=${bootdev}${bootpartition} | gzip > /root/bootimage.gz;fi
#将二合一盘上的用户数据区从raid序列中停止
mdadm --remove /dev/md2
mdadm -S /dev/md2
#删除启动分区及用户数据区
parted ${bootdev} rm 3
parted ${bootdev} rm 4
#重建分区并格式化启动分区。启动分区默认结束于4832MB
#自己根据需要调整启动分区及数据区大小(后方的分区结束容量参数-前方的分区开始容量参数)
parted -s ${bootdev} mkpart primary btrfs 4832MB 100%
parted -s ${bootdev} mkpart primary 4699MB 4832MB
mkfs.vfat ${bootdev}4
parted ${bootdev} set 4 boot on
parted ${bootdev} set 4 esp on
parted ${bootdev} set 3 raid on
#把用户数据区重新创建为raid序列
echo y|mdadm -C --metadata=1.2 --force /dev/md2 -l1 -n1 ${bootdev}3
#还原数据到启动分区
gzip -dc /root/bootimage.gz | dd of=${bootdev}4
#删除启动分区备份,如果启动分区容量不大建议留着不用删除
rm -f /root/bootimage.gz
echo done!
fi
注意事项:
1.命令涉及重新分区,请拔掉其他数据盘并备份二合一盘上的重要数据!!!
2.首先一定要确认你的二合一盘的设备名称,根据实际情况修改"/dev/sdb"(名称一般为/dev/sda,/dev/sdb,/dev/sdc.....依此类推,对应存储空间管理员系统概况中图示的插槽顺序,即第一个格子为sda.....)
3.仅扩容存储空间可直接运行。调整后启动分区及存储空间大小均变化的必须先在【主菜单】->【储空间管理员】->【存储空间】中先删除二合一盘上的存储空间后运行此脚本,等待脚本运行结束后再添加回存储空间!
4.如果不是新系统,有可能二合一系统上的数据区的raid设备挂载不是脚本默认的/dev/md2,导致脚本运行失败。另外安装了其他套件或者挂载了共享文件等可能会导致脚本运行失败。
5.GPT分区格式的硬盘主分区数量不能超过4个(不含空闲区域,默认脚本只能处理4个分区的情况),另外系统的分区排列顺序(是建立分区的先后顺序,不是位置前后)如果和我的分区顺序不同(3号为用户数据分区,4号为启动分区),或者你无法确定顺序是否相同,那么即使只是扩容也不应该跳过第二步的“删除存储空间”(这一点为20200602补充,同时新增加了备份数据分区的代码,可以做到无损恢复数据分区)。
下面正式开始教程:
1.导入脚本
到【控制面板】->【任务计划】->【新增】->【计划的任务】->【用户定义的脚本】创建一个计划任务,在创建任务窗口【常规】项中填入脚本名称“reParted.sh”,取消勾选【已启动】,到【任务设置】项中把前面的脚本代码全部复制粘贴上去。
然后根据注意事项中的方法确认你的二合一盘的设备名称,根据实际情况修改脚本第一句中的"/dev/sdb"后【确定】保存。
会使用telnet 或者ssh连接的也可以自己连接进去用“parted -l”, “parted /dev/sdb print”等命令确认,顺便也可用“cat /proc/mdstat”命令确认数据区的raid设备挂载名称(这些命令可能需要root权限)。脚本运行前分区情况:
2.脚本设置及删除存储空间
如果仅仅是扩容(脚本中默认把启动分区调整到133MB占满数据区前的空闲区域,然后扩容数据分区至最大),不进行其他分区大小调整,可以直接跳过这一步进入下一步:3.运行脚本。但如果系统的分区排列顺序(是建立分区的先后顺序,不是位置前后)和我的分区顺序不同(参考上一张脚本运行前分区情况图,3号为用户数据分区,4号为启动分区),或者你无法确定顺序是否相同,则不应跳过这一步。
如果要自定义启动分区或数据分区大小,安全起见,先到【主菜单】->【存储空间管理员】->【存储空间】->【删除】中删除原二合一盘上的数据存储空间,小心别删错了。删除存储空间会清除原有数据,删除前请先做好重要数据的备份工作。
自定义启动及数据分区大小:
回到【控制面板】->【任务计划】页面选中刚才新建的脚本“reParted.sh”(鼠标左键点一下任务名称,该任务变蓝表示选中),然后点击【编辑】->【任务设置】,按需要修改脚本中的分区命令的最后两个参数后【确定】保存。参数意义解释如下:
#先建立数据分区3,从4832MB开始至100%
parted -s ${bootdev} mkpart primary btrfs 4832MB 100%
#再建立启动分区4,从4699MB开始至4832MB结束,大小为:4832-4699=133MB。
parted -s ${bootdev} mkpart primary 4699MB 4832MB
3.运行脚本
回到【控制面板】->【任务计划】页面选中脚本“reParted.sh”(鼠标左键点一下任务名称,该任务变蓝表示选中),然后点击【运行】->【是】。
脚本运行需要一定的时间,可用通过【控制面板】->【任务计划】页面选中脚本“reParted.sh”(鼠标左键点一下任务名称,该任务变蓝表示选中),然后点击【动作】->【查看结果】了解脚本是否已经正常执行。
脚本运行正在运行时,【当前状态】会显示“运行中“,正常运行结束【当前状态】会显示”正常“,否则会显示”中断“(有错误),并显示【结束时间】。