parted를 사용한 스크립트 가능한 파티셔닝

parted를 사용한 스크립트 가능한 파티셔닝

이것은 내 장치의 원시 파티션 테이블입니다.

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

아마도 명령 파일 자체에 대해 말하려고 할 것입니다.또는 의존하는 라이브러리 중 하나,없는. 올바른 쉘은 아마도 더 자세한 오류 메시지를 표시할 것입니다. 그러나 여기 메시지는 에서 나오는 것 같습니다 run_program. 처음에 스크립트를 시작하려고 하는 것 같습니다.

관련 정보