Linux 시스템에 다음으로 시작하는 다음 bash 스크립트가 있다고 가정합니다.
#!/bin/bash
#This setsetcor script takes four arguments: setsector a b c d
#Both a, b, and c and d are integers
a=$1; #The end sector (in 512 byte sectors) of the sdx1 partition
b=$2; #The end sector (in 512 byte sectors) of the sdx2 partition
c=$3; #The end sector (in 512 byte sectors) of the sdx3 partition
d=$4; #The end sector (in 512 byte sectors) of the free space
작은 SSD 디스크 드라이브가 있고 dd 유틸리티를 사용하여 더 큰 SSD 또는 HD 드라이브에 전체 복사본을 만들어 초기 파일을 만듭니다.동일한 복사본더 작은 드라이브에서 더 큰 드라이브로.
그런 다음 스크립트에서 수행된 계산을 사용하여 다음 작업을 수행하려고 합니다.
- 파티션 1과 2를 동일하게 유지하십시오.
- 다음 명령을 사용하여 파티션 3의 내용을
dd
다음 위치에 복사합니다.끝대형 디스크 드라이브공간. - 명령을 사용하여
cfdisk
파티션 삭제파티션 테이블에만 해당 내용에는 포함되지 않음파티션 3의 경우. - 끝 부분이 파티션 3 복사본의 시작 부분 앞에 오도록 파티션 2를 확장합니다.
- 이 명령을 사용하여
cfdisk
디스크 드라이브 맨 끝에 파티션 3을 원래 크기로 다시 만듭니다. - 명령을 사용하여
ntfsresize
파티션 2를 확장합니다. - 맞다면 가정하겠습니다DD이 옵션을 사용하면 드라이브 끝에 있는 파티션 번호 3에 대해 NTFS 크기 조정이 필요하지 않습니다. 필요한 경우 이 문제를 해결하는 데 도움이 필요합니다.
- 이 모든 것을 계산하는 것은 복잡하기 때문에 스크립트는필요한 단계를 인쇄하세요..
이 작업을 수행하기 위해 계속해서 명령을 사용하려고 시도 cfdisk
하지만 여전히 입력에 대한 올바른 공식을 찾지 못했습니다.시작 파티션 섹터 번호그리고파티션 섹터 크기 조정파티션을 다시 생성할 때의 값입니다.
어떤 제안이 있으십니까?변수에 의해 제공된 파티션 섹터 끝 값을 사용하여 세 개의 파티션을 계산하고 다시 분할하는 방법a, b, c 및 dBash 스크립트 시작 부분에?
답변1
다음 코드는 질문에 대한 답변을 구현합니다.
#!/bin/bash
#This setsetcor script takes four arguments: setsector a b c d
#Both a, b, and c and d are integers
a=$1; #The end sector (in 512 byte sectors) of the sdx1 partition
b=$2; #The end sector (in 512 byte sectors) of the sdx2 partition
c=$3; #The end sector (in 512 byte sectors) of the sdx3 partition
d=$4; #The end sector (in 512 byte sectors) of the free space
#Input quantities are printed out
printf "The end (in 512 byte sectors) of the sdx1 partition is a=%dS (512-Byte) Sectors.\n" $((a))
printf "The end (in 512 byte sectors) of the sdx2 partition is b=%dS (512-Byte) Sectors.\n" $((b))
printf "The end (in 512 byte sectors) of the sdx3 partition is c=%dS (512-Byte) Sectors.\n" $((c))
printf "The end (in 512 byte sectors) of the free space is d=%dS (512-Byte) Sectors.\n" $((d))
printf "\n"
#Simple derivative quantities are calculated and printed
sizeofp2=$(($b-$a))
sizeofp2GB=$((10**2*($b-$a)*512/1024/1024/1024))
sizeofp3=$(($c-$b));
sizeofp3MB=$((10**2*($c-$b)*512/1024/1024));
freespace=$(($d-$c));
freespaceGB=$((10**2*($d-$c)*512/1024/1024/1024));
printf "The size of Partition 2 equals %3.1fGB and %dS (512-Byte) Sectors. \n" $(($sizeofp2GB))e-2 $sizeofp2
printf "The size of Partition 3 equals %3.1fMB and %dS (512-Byte) Sectors. \n" $(($sizeofp3MB))e-2 $sizeofp3
printf "The Free Space equals %3.2fGB and %dS (512-Byte) Sectors.\n" $(($freespaceGB))e-2 $freespace
printf "\n"
#Calculate the new partition #2 and partition #3, Sectors and MB. Adjustments need to be made in Sectors to avoid rounding.
printf "Delete Partition 3; then delete the Partition 2 (without saving the partition table). \n\n"
printf "A new Partition 2 needs to be formed, (type 7) with the Sector size (of the origninal partition 2 Sectors \n"
printf "plus the original Free Space Sectors). \n\n"
printf "Then Partition 3 (type 27) is formed with its original Sector size, to avoid rounding errors:\n\n"
sizeofnewp2=$(($sizeofp2+$freespace))
sizeofnewp2GB=$((10**2*($sizeofp2+$freespace)*512/1024/1024/1024));
printf "The size of the new partition 2 equals %3.1fGB and %dS (512-Byte) Sectors. \n" $(($sizeofnewp2GB))e-2 $sizeofnewp2
printf "The size of the new partition 3 equals %3.1fMB and %dS (512-Byte) Sectors. \n\n" $(($sizeofp3MB))e-2 $sizeofp3
printf "After all of the ajustements are made (including setting the Partition types properly), save the Partition Table.\n"
어떤 경우에는 원래 파티션 3 섹터에 더 많은 공간을 확보하기 위해 파티션 2의 크기를 약간(예: 0.1GB 정도) 줄여야 합니다. 그 외에는 관련이 있는 것 같습니다.cfdisk. (일부 반올림 오류로 인해 이러한 작은 차이가 발생한 것으로 의심되지만 이제는 유용한 정보가 있습니다. 또한 편의상 사용된 cfdisk 파티션 유형을 인쇄해 두었습니다. 최종 사용자의 상황 응용 프로그램에 맞게 조정해야 합니다.)