From 6698dc17559b168a50c335dd9a519b8192ee2528 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 20:08:50 +0800 Subject: [PATCH] update 2024-03-15 20:08:50 --- luci-app-partexp/Makefile | 4 +- .../luasrc/controller/partexp.lua | 101 +++---- .../luasrc/model/cbi/partexp/global.lua | 40 +-- luci-app-partexp/luasrc/model/diskmount.lua | 2 +- luci-app-partexp/luasrc/view/partexp.htm | 210 ++++++++------ luci-app-partexp/luasrc/view/partexplog.htm | 16 ++ luci-app-partexp/po/zh-cn/partexp.po | 12 +- luci-app-partexp/po/zh_Hans | 1 - luci-app-partexp/po/zh_Hans/partexp.po | 76 +++++ luci-app-partexp/root/etc/config/partexp | 6 +- luci-app-partexp/root/etc/init.d/partexp | 272 +++++++++++------- luci-app-partexp/root/etc/partexp/lucilogpos | 1 + luci-app-partexp/root/etc/partexp/partexp.log | 1 + .../root/etc/uci-defaults/40_luci-partexp | 8 +- 14 files changed, 451 insertions(+), 299 deletions(-) create mode 100644 luci-app-partexp/luasrc/view/partexplog.htm delete mode 100644 luci-app-partexp/po/zh_Hans create mode 100644 luci-app-partexp/po/zh_Hans/partexp.po create mode 100644 luci-app-partexp/root/etc/partexp/lucilogpos create mode 100644 luci-app-partexp/root/etc/partexp/partexp.log diff --git a/luci-app-partexp/Makefile b/luci-app-partexp/Makefile index 368b1b24..8b06568c 100644 --- a/luci-app-partexp/Makefile +++ b/luci-app-partexp/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-partexp -PKG_VERSION:=0.1.9 -PKG_RELEASE:=20221201 +PKG_VERSION:=1.1.0 +PKG_RELEASE:=20240314 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Sirpdboy diff --git a/luci-app-partexp/luasrc/controller/partexp.lua b/luci-app-partexp/luasrc/controller/partexp.lua index bf840dff..db05dbf2 100644 --- a/luci-app-partexp/luasrc/controller/partexp.lua +++ b/luci-app-partexp/luasrc/controller/partexp.lua @@ -1,80 +1,49 @@ --[[ LuCI - Lua Configuration Partition Expansion - Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp + Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/partexp ]]-- -require "luci.util" + +local fs = require "nixio.fs" +local http = require "luci.http" +local uci = require"luci.model.uci".cursor() local name = 'partexp' module("luci.controller.partexp", package.seeall) + function index() - entry({"admin","system","partexp"},alias("admin", "system", "partexp", "global"),_("Partition Expansion"), 54) --- entry({"admin", "system", "partexp", "global"}, form("partexp/global"), nil).leaf = true + local e = entry({"admin","system","partexp"},alias("admin", "system", "partexp", "global"),_("Partition Expansion"), 54) + e.dependent = false + e.acl_depends = { "luci-app-partexp" } entry({"admin", "system", "partexp", "global"}, cbi('partexp/global', {hideapplybtn = true, hidesavebtn = true, hideresetbtn = true}), _('Partition Expansion'), 10).leaf = true - entry({"admin", "system", "partexp","partexprun"}, call("partexprun")).leaf = true + entry({"admin", "system", "partexp","partexprun"}, call("partexprun")) + entry({"admin", "system", "partexp", "check"}, call("act_check")) +end +function act_check() + + http.prepare_content("text/plain; charset=utf-8") + local f=io.open("/etc/partexp/partexp.log", "r+") + local fdp=fs.readfile("/etc/partexp/lucilogpos") or 0 + f:seek("set",fdp) + local a=f:read(2048000) or "" + fdp=f:seek() + fs.writefile("/etc/partexp/lucilogpos",tostring(fdp)) + f:close() + http.write(a) end -function get_log() - local e = {} - e.running = luci.sys.call("busybox ps -w | grep partexp | grep -v grep >/dev/null") == 0 - e.log = fs.readfile("/etc/partexp/partexp.log") or "" - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end function partexprun() - local uci = luci.model.uci.cursor() - local keep_config = luci.http.formvalue('keep_config') - local auto_format = luci.http.formvalue('auto_format') - local target_function = luci.http.formvalue('target_function') - local target_disk = luci.http.formvalue('target_disk') - --uci:delete(name, '@global[0]', global) - uci:set(name, '@global[0]', 'target_disk', target_disk) - uci:set(name, '@global[0]', 'target_function', target_function) - uci:set(name, '@global[0]', 'auto_format', auto_format) - uci:set(name, '@global[0]', 'keep_config', keep_config) + local kconfig = http.formvalue('kconfig') + local aformat = http.formvalue('aformat') + local targetf = http.formvalue('targetf') + local targetd = http.formvalue('targetd') + uci:set(name, 'global', 'target_disk', targetd) + uci:set(name, 'global', 'target_function', targetf) + uci:set(name, 'global', 'auto_format', aformat) + uci:set(name, 'global', 'keep_config', kconfig) uci:commit(name) - -- e = nixio.exec("/bin/sh", "-c" ,"/etc/init.d/partexp autopart") - e = luci.sys.exec('/etc/init.d/partexp autopart') - - luci.http.prepare_content('application/json') - luci.http.write_json(e) + fs.writefile("/etc/partexp/lucilogpos","0") + http.prepare_content("application/json") + http.write('') + luci.sys.exec("/etc/init.d/partexp autopart > /etc/partexp/partexp.log 2>&1 &") end - -function outexec(cmd) - luci.http.prepare_content("text/plain") - local util = io.popen(cmd) - if util then - while true do - local ln = util:read("*l") - if not ln then break end - luci.http.write(ln) - luci.http.write("\n") - end - util:close() - end - -end - -function fork_exec(command) - local pid = nixio.fork() - if pid > 0 then - return - elseif pid == 0 then - -- change to root dir - nixio.chdir("/") - - -- patch stdin, out, err to /dev/null - local null = nixio.open("/dev/null", "w+") - if null then - nixio.dup(null, nixio.stderr) - nixio.dup(null, nixio.stdout) - nixio.dup(null, nixio.stdin) - if null:fileno() > 2 then - null:close() - end - end - - -- replace with target command - nixio.exec("/bin/sh", "-c", command) - end -end \ No newline at end of file diff --git a/luci-app-partexp/luasrc/model/cbi/partexp/global.lua b/luci-app-partexp/luasrc/model/cbi/partexp/global.lua index c66a9b04..96465926 100644 --- a/luci-app-partexp/luasrc/model/cbi/partexp/global.lua +++ b/luci-app-partexp/luasrc/model/cbi/partexp/global.lua @@ -32,7 +32,7 @@ end local m,t,e m = Map("partexp", "" .. translate("One click partition expansion mounting tool") .."", -translate( "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:") ..translate("GitHub @sirpdboy") ) +translate( "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:") ..translate("GitHub @sirpdboy:luci-app-partexp") ) t=m:section(TypedSection,"global") t.anonymous=true @@ -40,8 +40,10 @@ t.anonymous=true e=t:option(ListValue,"target_function", translate("Select function"),translate("Select the function to be performed")) e:value("/overlay", translate("Expand application space overlay (/overlay)")) -- e:value("/", translate("Use as root filesystem (/)")) +-- e:value("/lnoverlay", translate("Soft chain partition expansion(/overlay)")) e:value("/opt", translate("Used as Docker data disk (/opt)")) e:value("/dev", translate("Normal mount and use by device name(/dev/x1)")) +e.default="/opt" e=t:option(ListValue,"target_disk", translate("Destination hard disk"),translate("Select the hard disk device to operate")) for i, d in ipairs(devices) do @@ -52,32 +54,18 @@ for i, d in ipairs(devices) do end end -o=t:option(Flag,"keep_config",translate("Keep configuration")) -o:depends("target_function", "/overlay") -o.default=0 +e=t:option(Flag,"keep_config",translate("Keep configuration"),translate("Tick means to retain the settings")) +e:depends("target_function", "/overlay") +e.default=0 -o=t:option(Flag,'auto_format', translate('Format before use')) -o:depends("target_function", "/opt") -o:depends("target_function", "/dev") -o.default=0 +e=t:option(Flag,'auto_format', translate('Format before use'),translate("Ticking indicates formatting")) +e:depends("target_function", "/opt") +e:depends("target_function", "/dev") +-- e:depends("target_function", "/lnoverlay") +e.default=0 -o=t:option(DummyValue, '', '') -o.rawhtml = true -o.template ='partexp' - - -e=t:option(TextValue,"log") -e.rows=15 -e.wrap="on" -e.readonly=true -e.cfgvalue=function(t,t) -return fs.readfile("/etc/partexp/partexp.log")or"" -end -e.write=function(e,e,e) -end - --- e =t:option(DummyValue, '', '') --- e.rawhtml = true --- e.template = 'partexplog' +e=t:option(Button, "restart", translate("Perform operation")) +e.inputtitle=translate("Click to execute") +e.template ='partexp' return m diff --git a/luci-app-partexp/luasrc/model/diskmount.lua b/luci-app-partexp/luasrc/model/diskmount.lua index 3d747c34..e25fabc9 100644 --- a/luci-app-partexp/luasrc/model/diskmount.lua +++ b/luci-app-partexp/luasrc/model/diskmount.lua @@ -1,6 +1,6 @@ --[[ LuCI - Lua Configuration Interface - Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp + Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/partexp ]]-- local fs = require "nixio.fs" diff --git a/luci-app-partexp/luasrc/view/partexp.htm b/luci-app-partexp/luasrc/view/partexp.htm index 457813f0..bad9e284 100644 --- a/luci-app-partexp/luasrc/view/partexp.htm +++ b/luci-app-partexp/luasrc/view/partexp.htm @@ -1,106 +1,128 @@ <%# -Copyright (C) 2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +Copyright (C) 2022-2024 sirpdboy https://github.com/sirpdboy/partexp -%> -<% -local fs = require "nixio.fs" -%> - <%+cbi/valueheader%> - - - -
- "> - +<%local fs=require"nixio.fs"%> + + - + - <%+cbi/valuefooter%> diff --git a/luci-app-partexp/luasrc/view/partexplog.htm b/luci-app-partexp/luasrc/view/partexplog.htm new file mode 100644 index 00000000..b2b7b60f --- /dev/null +++ b/luci-app-partexp/luasrc/view/partexplog.htm @@ -0,0 +1,16 @@ +<%+cbi/valueheader%> + + + +<%+cbi/valuefooter%> diff --git a/luci-app-partexp/po/zh-cn/partexp.po b/luci-app-partexp/po/zh-cn/partexp.po index 77573421..9177b33f 100644 --- a/luci-app-partexp/po/zh-cn/partexp.po +++ b/luci-app-partexp/po/zh-cn/partexp.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"Copyright (C) 2022 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-partexp" +"Copyright (C) 2022-2024 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-partexp" "This is free software, licensed under the GNU General Public License v3." msgid "Partition Expansion" @@ -12,8 +12,8 @@ msgstr "一键分区扩容挂载工具" msgid "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:" msgstr "自动对目标设备分区格式化挂载,如果有多分区建议手动删除所有分区再使用本工具.
使用说明见:" -msgid "Select the function to be performed" -msgstr "选择需要执行的功能" +msgid "Waiting,(executing)..." +msgstr "稍等,努力执行中" msgid "Expand application space overlay (/overlay)" msgstr "用于overlay软件空间 (/overlay)" @@ -27,6 +27,9 @@ msgstr "用作Docker数据盘 (/opt)" msgid "Normal mount and use by device name(/dev/x1)" msgstr "按设备名普通挂载使用(/dev/x1)" +msgid "Soft chain partition expansion(/overlay)" +msgstr "分区软链扩容(/overlay)" + msgid "Destination hard disk" msgstr "目标硬盘" @@ -42,6 +45,9 @@ msgstr "选择需要操作的硬盘设备" msgid "Select function" msgstr "选择功能" +msgid "Click to execute" +msgstr "点击执行" + msgid "Perform operation" msgstr "执行操作" diff --git a/luci-app-partexp/po/zh_Hans b/luci-app-partexp/po/zh_Hans deleted file mode 100644 index 41451e4a..00000000 --- a/luci-app-partexp/po/zh_Hans +++ /dev/null @@ -1 +0,0 @@ -zh-cn \ No newline at end of file diff --git a/luci-app-partexp/po/zh_Hans/partexp.po b/luci-app-partexp/po/zh_Hans/partexp.po new file mode 100644 index 00000000..1eea307b --- /dev/null +++ b/luci-app-partexp/po/zh_Hans/partexp.po @@ -0,0 +1,76 @@ +msgid "" +msgstr "" +"Copyright (C) 2022-2024 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-partexp" +"This is free software, licensed under the GNU General Public License v3." + +msgid "Partition Expansion" +msgstr "分区扩容" + +msgid "One click partition expansion mounting tool" +msgstr "一键分区扩容挂载工具" + +msgid "Automatically format and mount the target device partition. If there are multiple partitions, it is recommended to manually delete all partitions before using this tool.
For specific usage, see:" +msgstr "自动对目标设备分区格式化挂载,如果有多分区建议手动删除所有分区再使用本工具.
使用说明见:" + +msgid "Waiting,(executing)..." +msgstr "稍等,努力执行中" + +msgid "Expand application space overlay (/overlay)" +msgstr "用于overlay软件空间 (/overlay)" + +msgid "Use as root filesystem (/)" +msgstr "用作根文件系统(/)" + +msgid "Used as Docker data disk (/opt)" +msgstr "用作Docker数据盘 (/opt)" + +msgid "Normal mount and use by device name(/dev/x1)" +msgstr "按设备名普通挂载使用(/dev/x1)" + +msgid "Soft chain partition expansion(/overlay)" +msgstr "分区软链扩容(/overlay)" + +msgid "Destination hard disk" +msgstr "目标硬盘" + +msgid "Keep configuration" +msgstr "保留配置" + +msgid "Format before use" +msgstr "使用前格式化" + +msgid "Select the hard disk device to operate" +msgstr "选择需要操作的硬盘设备" + +msgid "Select function" +msgstr "选择功能" + +msgid "Click to execute" +msgstr "点击执行" + +msgid "Perform operation" +msgstr "执行操作" + +msgid "To make the operation effective, the device will restart. Are you sure to execute?" +msgstr "警告:操作一旦确定无法取消,设备将会重启,是否确定执行?" + +msgid "Operation in progress, please wait..." +msgstr "操作执行中,请稍候..." + +msgid "After operation, restart the machine, please wait..." +msgstr "操作完毕,机器重启,请稍候..." + +msgid "Please delete the partition or share and try again" +msgstr "错误,请检查是否有足够空间或是共享使用中。" + +msgid "Restart the device to take effect. Confirm whether to continue?" +msgstr "重启设备操作才生效,确定是否继续执行?" + +msgid "Operation execution complete" +msgstr "操作执行完毕" + +msgid "Ticking indicates formatting" +msgstr "打勾选择表示格式化" + +msgid "Tick means to retain the settings" +msgstr "打勾选择表示保留设置" diff --git a/luci-app-partexp/root/etc/config/partexp b/luci-app-partexp/root/etc/config/partexp index 39986dfe..2b59db9d 100644 --- a/luci-app-partexp/root/etc/config/partexp +++ b/luci-app-partexp/root/etc/config/partexp @@ -1,5 +1,5 @@ -config global +config global 'global' option target_function '/overlay' option target_disk '' - option keep_config '1' - option auto_format '1' + option keep_config '0' + option auto_format '0' diff --git a/luci-app-partexp/root/etc/init.d/partexp b/luci-app-partexp/root/etc/init.d/partexp index 8d0789b5..a75f6d75 100644 --- a/luci-app-partexp/root/etc/init.d/partexp +++ b/luci-app-partexp/root/etc/init.d/partexp @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # -# Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/luci-app-partexp +# Copyright (C) 2021-2022 sirpdboy https://github.com/sirpdboy/partexp # This is free software, licensed under the Apache License, Version 2.0 . # @@ -29,18 +29,17 @@ limit_log() { init_env() { [ -d "$LOGD" ] || mkdir -p $LOGD -[ ! -f "$LOG" ] && echo "" > $LOG +[ ! -f "$LOG" ] && echo " " > $LOG } gen_log()( - [ -s $LOG ] && echo " ---------------------------------------------------------------------- " >> $LOG - log "自动分区扩展挂载开始执行..." + log "---------------自动分区扩展挂载开始执行------------------ " ) log(){ - echo " $(date +'%Y-%m-%d %H:%M:%S') $*" >> $LOG + echo -e " $(date +'%Y-%m-%d %H:%M:%S') $*" } @@ -50,6 +49,7 @@ get_config() { config_get_bool keep_config $1 keep_config 1 config_get_bool auto_format $1 auto_format 1 } + nfdisk(){ #Start partition fdisk /dev/$a << EOF >/dev/null 2> /dev/null @@ -63,118 +63,152 @@ EOF } +usamba(){ +s=$1 +s2=$2 + [ -e "/etc/config/$s" ] && { + msum=$(grep -c "config sambashare" /etc/config/$s) + for i in $(seq 0 $((msum))) + do + pdev=`uci -q get $s.@sambashare[$i].path ` + [ "$pdev" = "$s2" ] && { + uci delete $s.@sambashare[$i] + uci commit $s + log "分区/dev/$b被挂载$MOUNT共享使用,删除$s共享成功!" + sleep 5 + /etc/init.d/$s restart + } + done + } +} + fdiskB(){ a=$1 - b=$2 + b=$1$2 log "检测$a是否分区..." - isP=`fdisk -l /dev/$a |grep -v "bytes"|grep "/dev/$a$b" ` + isP=`fdisk -l /dev/$a |grep -v "bytes"|grep "/dev/$b" ` sleep 2 isfdisk=0 if [ ! "$isP" ];then - nfdisk + nfdisk sleep 2 isfdisk=1 else isfdisk=2 fi - isP=`fdisk -l /dev/$a |grep -v "bytes" | grep "/dev/$a$b"` + + isP=`fdisk -l /dev/$a |grep -v "bytes" | grep "/dev/$b"` if [ "$isP" -a "$isfdisk" = 1 ] ;then - log "分区$a$b建立成功!" + log "分区$b建立成功!" elif [ "$isP" -a "$isfdisk" = 2 ] ;then - log "检测目标分区$a$b已存在." + log "检测目标分区$b已存在." else - log "分区$a$b建立失败,没有足够的空间操作失败!" + log "分区$b建立失败,没有足够的空间操作失败!" expquit 1 fi - isD=`df -T | grep /dev/$a$b ` + sleep 1 + [ -e "/etc/config/dockerd" ] && /etc/init.d/dockerd stop >/dev/null 2> /dev/null + block detect > /etc/config/fstab + isD=` block info "/dev/$b" ` if [ "$isD" ];then - eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") - log "检测$a$b是不是被共享..." - sleep 1 - if [ "$MOUNT" ] ; then - msum=$(grep -c "config sambashare" /etc/config/samba4) - for i in $(seq 0 $((msum-1))) - do - dev=`uci -q get samba4.@sambashare[$i].device ` - [ $? -ne 0 ] && break - [ "$dev" = "$a$b" ] && { - uci delete samba4.@sambashare[$i] - uci commit - /etc/init.d/samba4 restart & - sleep 5 + MOUNT='';eval $(block info "/dev/$b" | grep -o -e "MOUNT=\S*") - } - done - block umount /dev/$a$b + log "检测/dev/$b是不是被共享..." + if [ "x$MOUNT" != 'x' ] ; then + usamba samba4 $MOUNT + usamba samba $MOUNT sleep 5 - eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") - if [ "$MOUNT" ] ;then - log "分区$a$b被挂载$MOUNT共享使用,删除共享失败,请手动删除共享再重新操作!" + umount $MOUNT || block umount /dev/$b + sleep 5 + MOUNT='';eval $(block info "/dev/$b" | grep -o -e "MOUNT=\S*") + if [ "x$MOUNT" != 'x' ] ;then + log "分区/dev/$b挂载$MOUNT使用中,自动删除失败!请手动删除共享或者取消其它插件的占用权限再重试!" expquit 1 - else - log "分区$a$b被挂载$MOUNT共享使用,自动删除共享成功!" fi else - log "检测目标硬盘$a$b未被共享..." + log "检测目标设备$b未被共享..." fi fi - isD=`df -T | grep /dev/$a$b | awk '{print $2}'` + #isD=`block info /dev/$b | awk -F 'TYPE=' '{print $2}'| sed 's,\",,g' ` + TYPE='';eval $(block info "/dev/$b" | grep -o -e "TYPE=\S*") if [ "$target_function" = "/" -o "$target_function" = "/overlay" ] ; then - mkfs.ext4 -L extroot /dev/$a$b >/dev/null 2> /dev/null - log "硬盘/dev/$a$b格式化成功!" - elif [ "$auto_format" = "1" -o "$isfdisk" = "1" - ! "$isD" ] ; then - mkfs.ext4 -F /dev/$a$b >/dev/null 2> /dev/null - log "硬盘/dev/$a$b格式化成功!" + mkfs.ext4 -L extroot /dev/$b >/dev/null 2> /dev/null + log "设备/dev/$b格式化成功!" + elif [ "$auto_format" = "1" -o "$isfdisk" = "1" ] ; then + mkfs.ext4 -F /dev/$b >/dev/null 2> /dev/null + log "设备/dev/$b格式化成功!" + elif [ "$TYPE" ];then + log "设备/dev/$b无需格式化!" else - log "硬盘/dev/$a$b无需格式化!" + log "设备/dev/$b未格式化,无法正常使用!" + expquit 1 fi - eval $(block info /dev/$a$b | grep -o -e "UUID=\S*") - if [ "$UUID" = "" ] ; then - log "获取/dev/$a$b分区信息失败!" - expquit 1 - else - log "成功获取/dev/$a$b分区信息!" - fi - [ -d "/mnt/$a$b" ] || mkdir -p /mnt/$a$b - isM=`block info /dev/$a$b` - isD=`df -T | grep /dev/$a$b | awk '{print $2}'` - if [ "$isM" -a "$isD" ] ;then - umount /mnt/$a$b - eval $(block info "/dev/$a$b" | grep -o -e "MOUNT=\S*") + + [ -d "/mnt/$b" ] || mkdir -p /mnt/$b + MOUNT='';eval $(block info "/dev/$b" | grep -o -e "MOUNT=\S*") + if [ "x$MOUNT" != 'x' ] ;then + umount /mnt/$b || block umount /dev/$b + MOUNT='';eval $(block info "/dev/$b" | grep -o -e "MOUNT=\S*") if [ "$MOUNT" ] ; then - log "检测设备/dev/$a$b挂载$MOUNT,请取消读写权限再重试!" + log "检测设备/dev/$b被占用,请检查设备硬件或中止其他插件等占用权限再重试!" expquit 1 - else - [ "$isD" == "ntfs" ] && mount -t ntfs-3g /dev/$a$b /mnt/$a$b || mount -o rw,noatime,discard /dev/$a$b /mnt/$a$b fi fi - log "检测设备/dev/$a$b分区是$isD格式!" - + TYPE='';eval $(block info "/dev/$b" | grep -o -e "TYPE=\S*") + log "检测设备/dev/$b分区是$TYPE格式!" + if [ "$TYPE" = "ntfs" ];then + if [ `which ntfs-3g ` ] ;then + mount -t ntfs-3g /dev/$b /mnt/$b >/dev/null 2> /dev/null + elif [ `which ntfs3 ` ] ;then + mount -t ntfs3 /dev/$b /mnt/$b >/dev/null 2> /dev/null + else + log "不支持NTFS分区挂载,请安装ntfs-3g或者ntfs3支持服务" + expquit 1 + fi + else + mount /dev/$b /mnt/$b >/dev/null 2> /dev/null + fi + UUID='';eval $(block info /dev/$b | grep -o -e "UUID=\S*") + if [ ! "$UUID" ] ; then + log "获取/dev/$b设备UUID信息失败!" + expquit 1 + else + log "获取/dev/$b设备UUID信息:$UUID成功" + fi + if [ "$target_function" = "/" ] ; then mkdir -p /tmp/introot mount --bind / /tmp/introot - tar -C /tmp/introot -cvf - . | tar -C /mnt/$a$b -xf - - umount /tmp/introot - umount /mnt/$a$b + tar -C /tmp/introot -cvf - . | tar -C /mnt/$b -xf - + umount /tmp/introot || block umount /tmp/introot + umount /mnt/$b || block umount /dev/$b block detect > /etc/config/fstab - log "保留数据根目录扩展/dev/$a$b成功!" - uci set fstab.@global[0].delay_root="15" - uci -q set fstab.@mount[0].uuid="${UUID}" - uci -q set fstab.@mount[0].target='/' - uci -q set fstab.@mount[0].enabled='1' - uci commit fstab + OVERLAY=`uci -q get fstab.@mount[0].target ` + if [ "$OVERLAY" == "/overlay" -o "$OVERLAY" == "/dev/loop0" ] ;then + uci -q set fstab.@mount[0].uuid="${UUID}" + uci -q set fstab.@mount[0].target='/' + uci -q set fstab.@mount[0].enabled='1' + fi + log "保留数据根目录扩展/dev/$b成功!" + seelp 5 + log "设备重启才能生效" expquit 2 elif [ "$target_function" = "/overlay" ] ; then if [ "$keep_config" = "1" ] ; then - # cp -a -f /overlay/* /mnt/$a$b/ || cp -a -f /rom/overlay/* /mnt/$a$b/ - tar -C /overlay -cvf - . | tar -C /mnt/$a$b/ -xf - || tar -C /rom/overlay -cvf - . | tar -C /mnt/$a$b/ -xf - - umount /mnt/$a$b + # cp -a -f /overlay/* /mnt/$b/ || cp -a -f /rom/overlay/* /mnt/$b/ + tar -C /overlay -cvf - . | tar -C /mnt/$b/ -xf - || tar -C /rom/overlay -cvf - . | tar -C /mnt/$b/ -xf - + umount /mnt/$b || block umount /dev/$b block detect > /etc/config/fstab - + OVERLAY=`uci -q get fstab.@mount[0].target ` + if [ "$OVERLAY" == "/overlay" -o "$OVERLAY" == "/dev/loop0" ] ;then + uci -q set fstab.@mount[0].uuid="${UUID}" + uci -q set fstab.@mount[0].target='/overlay' + uci -q set fstab.@mount[0].enabled='0' + fi msum=$(grep -c "'mount'" /etc/config/fstab) for i in $(seq 0 $((msum-1))) do @@ -187,16 +221,21 @@ fdiskB(){ done uci set fstab.@global[0].delay_root="15" uci commit fstab - log "保留数据overlay扩展/dev/$a$b成功!" - log "设备重启才能生效,重启中..." + log "保留数据overlay扩展/dev/$b成功!" + seelp 5 + log "设备重启才能生效" expquit 2 else - umount /mnt/$a$b + umount /mnt/$b || block umount /dev/$b block detect > /etc/config/fstab - - + OVERLAY=`uci -q get fstab.@mount[0].target ` + if [ "$OVERLAY" == "/overlay" -o "$OVERLAY" == "/dev/loop0" ] ;then + uci -q set fstab.@mount[0].uuid="${UUID}" + uci -q set fstab.@mount[0].target='/overlay' + uci -q set fstab.@mount[0].enabled='0' + fi msum=$(grep -c "'mount'" /etc/config/fstab) for i in $(seq 0 $((msum-1))) do @@ -209,12 +248,36 @@ fdiskB(){ done uci set fstab.@global[0].delay_root="15" uci commit fstab - log "不保留数据overlay扩展/dev/$a$b成功!" - log "设备重启才能生效,重启中..." + log "不保留数据overlay扩展/dev/$b成功!" + + seelp 5 + log "设备重启才能生效" expquit 2 fi + elif [ "$target_function" = "/lnoverlay" ] ; then + umount /mnt/$b || block umount /dev/$b + + block detect > /etc/config/fstab + mkdir -p $target_function + msum=$(grep -c "'mount'" /etc/config/fstab) + for i in $(seq 0 $((msum-1))) + do + zuuid=`uci -q get fstab.@mount[$i].uuid ` + [ $? -ne 0 ] && break + if [ "$zuuid" = "$UUID" ] ; then + uci -q set fstab.@mount[$i].target="/mnt/$b" + uci -q set fstab.@mount[$i].enabled='1' + fi + done + uci commit fstab + ln -sf /mnt/$b /overlay + log "设备/dev/$b挂载/mnt/$b软链到/overlay扩容成功!" + log "设备重启才能生效" + expquit 2 else + umount /mnt/$b || block umount /dev/$b + block detect > /etc/config/fstab mkdir -p $target_function msum=$(grep -c "'mount'" /etc/config/fstab) @@ -224,14 +287,14 @@ fdiskB(){ [ $? -ne 0 ] && break if [ "$zuuid" = "$UUID" ] ; then - [ "$target_function" = "/opt" ] && uci -q set fstab.@mount[$i].target="$target_function" || uci -q set fstab.@mount[$i].target="/mnt/$a$b" + [ "$target_function" = "/opt" ] && uci -q set fstab.@mount[$i].target="$target_function" || uci -q set fstab.@mount[$i].target="/mnt/$b" uci -q set fstab.@mount[$i].enabled='1' fi done uci commit fstab - [ "$target_function" = "/opt" ] && log "挂载/dev/$a$b到$target_function成功!" || log "挂载/dev/$a$b到/mnt/$a$b成功!" - log "设备重启才能生效,重启中..." + [ "$target_function" = "/opt" ] && log "挂载/dev/$b到$target_function成功!" || log "挂载/dev/$b到/mnt/$b成功!" + log "设备重启才能生效" expquit 2 fi @@ -242,24 +305,29 @@ autopart() { config_load partexp config_foreach get_config global init_env - limit_log $LOG 500 # touch $LOCK - cat $LOG 2>/dev/null | sed -n '$p' | grep -q '自动分区扩展挂载开始执行...' || gen_log - - isB=`df -P|grep '/boot' | head -n1 | awk -F ' ' '{print $1}'` - isb=`fdisk -l | grep /dev/$target_disk | grep -v "bytes" | wc -l` - if [ "$isb" = 0 -o "$isb" = "" -o "$isb" = 1 ] ;then - isb=1 - elif [ "$isb" = 3 -o "$isb" = 4 ] ;then - isb=3 - fi + gen_log + log "此次执行操作功能:$target_function ,目标盘:/dev/$target_disk" isP=`fdisk -l /dev/$target_disk |grep "Disk /dev/$target_disk"` if [ "$isP" = "" ];then - log "没有检测到/dev/$target_disk目标硬盘!操作失败!" + log "没有检测到/dev/$target_disk目标设备!操作失败!" expquit 1 else - log "检测到操作目标硬盘:/dev/$target_disk$isb!" - + isB="$(sed -n -e "\|\s/boot\s.*$|{s///p;q}" /etc/mtab)" + isb=`fdisk -l | grep /dev/$target_disk | grep -v "bytes" | wc -l` + if [ "$isb" = 0 -o "$isb" = 1 ] ;then + isb=1 + + log "检测到设备/dev/$target_disk分区数为$isb个!" + elif [ "$isb" = 3 -o "$isb" = 4 ] ;then + isb=3 + + log "检测到设备/dev/$target_disk分区数为$isb个!" + else + log "检测到设备/dev/$target_disk分区数$isb个,请备份数据后删除分区重新操作!" + expquit 1 + fi + log "检测到操作目标设备:/dev/$target_disk$isb!" case "$target_disk" in sd*) [ "$isB" = "/dev/${target_disk}1" -a "$target_function" = "/overlay" ] && fdiskB $target_disk 3 || fdiskB $target_disk $isb @@ -271,17 +339,16 @@ autopart() { [ "$isB" = "/dev/${target_disk}p1" -a "$target_function" = "/overlay" ] && fdiskB $target_disk p3 || fdiskB $target_disk p$isb ;; *) - log "未能识别/dev/$target_disk目标硬盘!请联系作者sirpdboy!" + log "目标设备/dev/$target_disk暂不支持!请联系作者sirpdboy!" expquit 1 ;; esac fi - # rm -f $LOCK + rm -f $LOCK } start() { -init_env [ x$x = x1 ] && exit || autopart } @@ -292,7 +359,8 @@ x=1 expquit() { rm -f $LOCK - echo $1 - [ $1 == 2 ] &&reboot + [ -e "/etc/config/dockerd" ] && /etc/init.d/dockerd restart >/dev/null 2> /dev/null + sleep 5 + [ $1 == 2 ] && log "重启中...\n" &&reboot exit $1 } diff --git a/luci-app-partexp/root/etc/partexp/lucilogpos b/luci-app-partexp/root/etc/partexp/lucilogpos new file mode 100644 index 00000000..a76eb9d7 --- /dev/null +++ b/luci-app-partexp/root/etc/partexp/lucilogpos @@ -0,0 +1 @@ +1043 \ No newline at end of file diff --git a/luci-app-partexp/root/etc/partexp/partexp.log b/luci-app-partexp/root/etc/partexp/partexp.log new file mode 100644 index 00000000..0ea66018 --- /dev/null +++ b/luci-app-partexp/root/etc/partexp/partexp.log @@ -0,0 +1 @@ + 1 \ No newline at end of file diff --git a/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp b/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp index 6cd1ec09..89d8efaf 100644 --- a/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp +++ b/luci-app-partexp/root/etc/uci-defaults/40_luci-partexp @@ -1,5 +1,11 @@ #!/bin/sh chmod +x /etc/init.d/partexp >/dev/null 2>&1 - +[ `uci -q get partexp.global` ] || uci set partexp.global=global +LOGD=/etc/partexp +LOG=$LOGD/partexp.log +LOGPOS=$LOGD/lucilogpos +[ -d "$LOGD" ] || mkdir -p $LOGD +[ ! -f "$LOG" ] && echo "start" > $LOG +[ ! -f "$LOGPOS" ] && echo 'start' > $LOGPOS rm -rf /tmp/luci-modulecache /tmp/luci-indexcache* exit 0