这是我设备的原始分区表
Number Start End Size File system Name Flags
19 210MB 4370MB 4161MB ext4 SYSTEM
20 4370MB 4633MB 262MB ext4 CACHE
21 4633MB 4638MB 5243MB ext4 HIDDEN
我尝试缩小系统和缓存分区的大小,并删除隐藏分区以创建供应商分区。我按照分开的命令去做
parted /dev/block/mmcblk0
rm 19
rm 20
rm 21
mkpart SYSTEM ext4 210MiB 4000MiB
mkpart CACHE ext4 4000MiB 4200MiB
mkpart VENDOR ext4 4200MiB 4638MiB
name 19 SYSTEM
name 20 CACHE
name 21 VENDOR
我正在尝试使这个可编写脚本,可以通过恢复来刷新
#!/bin/bash
echo Applying resize operation
cd /sbin/
chmod u+x /parted
parted --script /dev/block/mmcblk0 \
rm 19 \
rm 20 \
rm 21 \
mkpart SYSTEM ext2 210MiB 4000MiB \
mkpart CACHE ext2 4000MiB 4200MiB \
mkpart VENDOR ext2 4200MiB 4638MiB \
name 19 SYSTEM \
name 20 CACHE \
name 21 VENDOR \
但是当我闪烁时,我在日志中收到错误
minzip: Extracted file "/sbin/parted"
minzip: Extracted file "/sbin/script.sh"
about to run program [/sbin/script.sh] with 1 args
run_program: execv failed: No such file or directory
run_program: child exited with status 1
答案1
/bin/bash
您的恢复环境中存在吗?事实上,您看到的消息指的是minzip
并run_program
表明恢复环境可能是相当严格的精简:它可能有一个不同的、更紧凑的外壳,例如dash
而不是bash
.
看起来您的实际脚本也添加parted
到系统中:
minzip: Extracted file "/sbin/parted"
但是您是否确保所需的所有库parted
也都存在?您可以使用该ldd
命令查看可执行文件(或另一个库)所依赖的库列表。例如,以下是 x86_64 版本的parted
.您的实际列表可能会有所不同,具体取决于编译时选择的选项parted
、您的系统架构以及您正在使用的 Linux 发行版的路径名约定。
$ ldd /sbin/parted
linux-vdso.so.1 (0x00007ffff609a000)
libparted.so.2 => /lib/x86_64-linux-gnu/libparted.so.2 (0x00007f9d17be2000)
libreadline.so.7 => /lib/x86_64-linux-gnu/libreadline.so.7 (0x00007f9d17995000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f9d1776b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d173cc000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f9d171c7000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d16fc3000)
libdevmapper.so.1.02.1 => /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1 (0x00007f9d16d6f000)
libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007f9d16b29000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d18048000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9d16921000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9d166f9000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f9d1822e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d164dc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d161d8000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9d15f65000)
这里,linux-vdso.so.1
是内核本身提供的虚拟共享对象。但其余的都是必须存在的库,否则parted
无法成功加载执行。
如果您的环境尚未安装parted
,则很可能也尚未安装libparted.so.*
。缺少该库将导致命令失败parted
。
错误信息
run_program: execv failed: No such file or directory
可能是想告诉您命令文件本身,或它所依赖的库之一,不可用。正确的 shell 可能会显示更详细的错误消息,但这里的消息似乎来自run_program
,我认为这是首先尝试启动脚本的东西。