-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathresize.sh
executable file
·69 lines (57 loc) · 2.02 KB
/
resize.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/sh
# 自动检测根设备
root_device=$(ls /dev/mmcblk* | grep -E 'mmcblk[0-9]+$')
# 检查是否找到根设备
if [[ -z $root_device ]]; then
echo "未找到MMC块设备作为根设备。"
exit 1
fi
# 获取根设备的大小
root_size=$(grep $root_device /proc/partitions | awk '{print $3}')
# 将字节转换为易读的单位
function human_readable {
local bytes=$1
local units=('KB' 'MB' 'GB' 'TB')
local unit=0
while (( bytes >= 1024 && unit < 3 )); do
bytes=$(($bytes / 1024))
unit=$(($unit + 1))
done
echo "$bytes ${units[$unit]}"
}
# 打印根设备的大小
echo "根设备 $root_device 的大小为:$(human_readable $root_size)"
# 检测根设备的分区大小
root_partitions=$(ls ${root_device}* | grep -v "${root_device}$")
max_size=0
max_partition=""
for partition in $root_partitions; do
partition_size=$(grep $(basename $partition) /proc/partitions | awk '{print $3}')
echo "分区 $partition 的大小为:$(human_readable $partition_size)"
if (( partition_size > max_size )); then
max_size=$partition_size
max_partition=$partition
fi
done
# 提取最大分区的分区号
partition_number=$(echo $max_partition | grep -o '[0-9]*$')
# 检查 /dev/loop0 是否已经被占用
if losetup /dev/loop0 &>/dev/null; then
echo "/dev/loop0 已被占用。尝试寻找另一个未被占用的 loop 设备。"
exit 1
fi
# 打印最大的分区和其大小
if [[ ! -z $max_partition ]]; then
echo "最大的分区是 $max_partition,大小为:$(human_readable $max_size)"
echo "调整 $max_partition 的大小到整个磁盘的最大可用空间"
read -p "再次确认一下最大分区,正确的话按任意键继续!"
parted $root_device resizepart $partition_number 100%
# 设置 loop 设备
echo "将 $max_partition 设置为 loop 设备"
losetup /dev/loop0 $max_partition
# 调整文件系统大小
echo "调整文件系统大小"
resize2fs -f /dev/loop0
else
echo "没有找到分区"
fi