Bash 스크립트에서 sgdisk를 사용하여 파티션 크기를 확인하는 방법

Bash 스크립트에서 sgdisk를 사용하여 파티션 크기를 확인하는 방법

다음과 유사한 bash 스크립트에서 sgdisk를 사용합니다.

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:2048:16779263 --typecode 2:8300 -g /dev/vda
sgdisk --new 3:16779264:20971486 --typecode 3:8200 -g /dev/vda

이 방법은 장치가 미리 잘 알려져 있고 섹터가 하드코딩된 경우에만 작동합니다.

섹터 값의 하드코딩을 제거하고 싶습니다. 대신 스크립트가 실행되기 전에 디스크 크기를 알리지 않고 스크립트를 실행하고 싶습니다. 파티션 1을 생성한 후 파티션 3에 대해 알려진 고정 금액을 스왑용으로 예약하고 나머지는 파티션 2용으로 예약합니다.

가장 쉬운 방법은 스왑 파티션을 #2로 설정하는 것입니다. 나는 무엇을 해야할지 압니다. 하지만, 내가 할 수 있는지 알아보고 싶었어파티션 3의 스왑 공간을 보존하면서 이 작업을 수행하십시오.. 이는 sgdisk가 다음 단계에서 파티션 3에 할당된 크기를 고려하여 파티션 2의 크기 또는 끝 섹터 값을 계산해야 함을 의미합니다.

sgdisk 매뉴얼 페이지를 읽어도 이 작업을 수행하는 방법에 대한 단서가 제공되지 않습니다(또는 수행할 수 있는 경우에도).

답변1

다음이 작동합니다:

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:0:-2G --typecode 2:8300 -g /dev/vda
sgdisk --new 3:0:0 --typecode 3:8200 -g /dev/vda

생각보다 훨씬 간단해요. sgdisk모든 계산을 수행합니다. 핵심은 맨 페이지에 설명되어 있는 빼기 기호입니다(이전에 놓쳤습니다).

기본 시작 섹터 뒤에 2GiB 지점을 지정하는 +2G와 같이 숫자 앞에 "+" 또는 "-" 기호를 추가하여 지정된 기본 범위의 시작 또는 끝을 기준으로 위치를 지정할 수 있습니다.또는 -200M은 사용 가능한 마지막 섹터 이전의 200MiB 지점을 지정합니다.. 시작 값 또는 끝 값 0은 기본값을 지정하고,

관련 정보