스크립트의 GNU 분할 크기 조정 부분

스크립트의 GNU 분할 크기 조정 부분

yesGNU parted가 사용자 입력을 기다리지 않도록 이 명령을 사용하고 싶습니다 .

root@195-xxx-xxx-xxx:/proc# parted /dev/sda unit B resizepart 2 1166016512B
 Warning: Shrinking a partition can cause data loss, are you sure you want 
 to continue?
Yes/No? y                                                                 
Information: You may need to update /etc/fstab.
root@195-xxx-xxx-xxx:/proc# echo $?
0

그러나 yes여기서는 다음을 사용하여 작동하지 않습니다.

root@195-xxx-xxx-xxx:/proc# yes | parted /dev/sda unit B resizepart 2 166016512B
 Warning: Shrinking a partition can cause data loss, are you sure you 
 want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1

편집하다:

--script옵션도 효과가 없습니다.

root@195-xxx-xxx-xxx:/proc# parted --script /dev/sda unit B resizepart 2 1166016512B
 Warning: Shrinking a partition can cause data loss, are you sure you 
 want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1

답변1

제 경우에는 ttyless SSH 세션에서 Parted 3.2를 사용하고 있습니다. 분리된 코드에 다음 테스트가 있으므로 "Yes" 명령 해킹이 작동하지 않습니다.

    /* script-mode: don't handle the exception */
    if (opt_script_mode || (!isatty (0) && !pretend_input_tty))
            return PED_EXCEPTION_UNHANDLED;

"isatty" 테스트에 주의하세요. 이 테스트는 실패할 것입니다. "pretend_input_tty"는 ---pretend-input-tty로 활성화할 수 있는 문서화되지 않은 명령줄 옵션입니다.

따라서 스크립트에서 parted를 사용하려는 경우 내 대답은 다음과 같습니다.

/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 Yes 522239s

그래도 문제가 해결되지 않으면 Yes끝으로 이동해 보세요.

/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 522239s Yes

노트tty 앞에 대시 세 개를 입력하는 척합니다. 나는 그것이 우리를 놀라게 해야 한다고 생각합니다. 하지만 확실하지 않습니다.

답변2

그래도 효과가 없으면 그것에 의존 하여 동일한 목표를 달성 resizepart해야 할 수도 있습니다 .rmmkpart

물론 이를 위해서는 파티션 유형과 시작 오프셋을 결정하기 위해 먼저 파티션 테이블을 구문 분석해야 합니다. 필요한 값을 이미 알고 있지 않는 한. 결국 당신 166016512B도 어딘가에서 그것을 가져와야합니다.

parted선택적으로 --machine구문 분석하기 쉬운 출력을 생성합니다. 반면, 이를 실제로 파싱한 사례는 찾기가 쉽지 않다. ;)

답변3

GNU parted를 사용한 크기 조정은 다음 명령을 사용하여 수행할 수 있습니다:

echo yes | parted /dev/sda ---pretend-input-tty resizepart 2 100GB

답변4

이 스크립트는 버전 변경을 분할하기에는 약간 취약하지만 저에게는 잘 작동하며 @frostschutz가 제안한 대로 범위/다중 파티션의 크기를 조정하여 분할된 테이블을 다시 작성하는 것이 복잡한 경우 특히 유용합니다.

스크립트

#!/bin/bash

echo "Resizing partition ${2} on ${1} with new end ${3}"

parted "${1}" ---pretend-input-tty <<EOF
resizepart
${2}
${3}
Yes
quit
EOF

echo "Done"

사용 예:

sudo ./resize_partition.sh /dev/loop0 2 15757970s

참고 저는 섹터에 지정된 파티션 끝점을 사용하고 있으므로 s.

관련 정보