これは私のデバイスのrawパーティションテーブルです。
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
おそらく、コマンドファイル自体について話すつもりです。または依存するライブラリの1つ、なし。正しいシェルはおそらくより詳細なエラーメッセージを表示します。しかし、ここのメッセージはから来ているようですrun_program
。最初にスクリプトを起動しようとしているようです。