From 1c335dc3051c5cd737db7b1ba86e034493f2ed87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=82=9F=E7=A9=BA=E7=9A=84=E6=97=A5=E5=B8=B8=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E4=BB=93=E5=BA=93?= Date: Tue, 15 Oct 2024 19:11:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- expand.sh | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 expand.sh diff --git a/expand.sh b/expand.sh new file mode 100644 index 0000000..9af3b0a --- /dev/null +++ b/expand.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +expand_img() { + # 检查是否已安装 parted + if ! command -v parted &> /dev/null; then + echo "parted 未安装,正在安装..." + opkg update + opkg install parted + if ! command -v parted &> /dev/null; then + echo "安装 parted 失败,请检查网络连接或软件源配置。" + return 1 + fi + echo "parted 安装成功。" + else + echo "" + fi + + # 查找当前目录的 .img.gz 文件 + img_gz_files=($(ls *.img.gz 2>/dev/null)) + + # 检查是否有多个 .img.gz 文件 + if [ ${#img_gz_files[@]} -gt 1 ]; then + echo "当前目录有多个 .img.gz 文件:" + for file in "${img_gz_files[@]}"; do + echo " - $file" + done + echo "请删除不需要扩容的img.gz文件,并确保只剩一个 .img.gz 文件。" + return 1 + elif [ ${#img_gz_files[@]} -eq 0 ]; then + echo "未找到 .img.gz 文件。" + return 1 + fi + + img_gz="${img_gz_files[0]}" + + # 提示用户输入扩容大小,默认值为 2000MB + read -p "请输入需要扩容的大小(默认 2000MB, 单位 MB): " size + size=${size:-2000} # 如果用户没有输入,使用默认值 2000MB + + # 检查输入的值是否为正整数 + if ! [[ "$size" =~ ^[0-9]+$ ]]; then + echo "请输入一个有效的数字。" + return 1 + fi + + echo "扩展大小设置为 ${size}MB。" + + # 解压缩镜像文件 + echo "解压缩 $img_gz ..." + gzip -kd "$img_gz" + + img_file="${img_gz%.gz}" + + # 删除原始的 .img.gz 文件 + echo "删除原始的 $img_gz ..." + rm -f "$img_gz" + + # 扩展镜像文件的大小 + echo "扩展 $img_file 的大小 ..." + dd if=/dev/zero bs=1M count="$size" >> "$img_file" + + # 使用 parted 工具调整分区,并自动输入 Fix 和 OK + echo "调整分区 ..." + yes | parted "$img_file" <