partedを使用したスクリプト可能なパーティション化

partedを使用したスクリプト可能なパーティション化

これは私のデバイスの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_programdashbash

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。最初にスクリプトを起動しようとしているようです。

関連情報