기존 파티션이 있는 디스크에 파일 시스템으로 새 파티션을 생성하는 bash 스크립트를 생성하려고 합니다.
parted를 사용하여 프로그래밍 방식으로 파티션을 생성하는 것은 쉬운 것처럼 보이지만 새 파티션을 시작하고 중지할 위치를 알아야 하며, 여기서 문제가 발생했습니다.
특정 위치/크기 파티션이 있는 디스크에 의존하고 싶지 않습니다. 즉, 마지막 기존 파티션 바로 다음에 새 파티션 생성을 시작하고 싶습니다. 고정된 크기의 파티션을 만들거나 남은 공간을 채우고 싶습니다.
Bash에는 신뢰할 수 있는 결정 방법이 있습니까?
a) 마지막 파티션이 끝나는 곳,
b) 마지막 파티션 이후에 분할되지 않은 나머지 공간은 어디입니까?
답변1
parted
사용 가능한 공간을 인쇄할 수 있습니다. 예(일부러 복잡한 것을 선택했습니다):
# parted /dev/sda unit s print free
[...]
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 4196351s 4194304s primary fat32 lba
4196352s 4198399s 2048s Free Space
2 4198400s 6295551s 2097152s primary ext2 boot
6295552s 6297599s 2048s Free Space
3 6297600s 27269119s 20971520s primary ext2
27269120s 27271167s 2048s Free Space
4 27271168s 31115263s 3844096s extended lba
5 27273216s 29192191s 1918976s logical ext2
6 29194240s 31115263s 1921024s logical ext2
31115264s 31116287s 1024s Free Space
보시다시피, 이는 생성할 수 있는 파티션의 위치와 크기를 직접 제공하며, 이는 마지막 줄에 표시됩니다 Free Space
. 31115264s로 시작하고 31116287s로 끝나는 파티션을 생성할 수 있습니다.
확장 파티션이 충분히 크지 않다면 이는 함정입니다!
하지만 이미 GPT를 사용하고 있어 그러한 문제로 고통받지 않을 수도 있습니다.
숫자를 얻는 것은 쉬워야합니다.
function make_partition
{
parted -s "$1" unit s mkpart primary "$2" "$3"
}
make_partition /dev/sda `parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1`
아니면 그런 것. (물론 여기에서 더 많은 온전성 검사를 수행하고 싶을 것입니다.)
parted
@swisscheese는 다른 답변에서 좋은 의견을 제시했지만 구문 분석에 적합한 출력이 제공되었다는 사실을 몰랐습니다 . 선택해서 사용하시면 됩니다. 마지막으로 가장 큰 무료를 얻는 예:
# parted -m /dev/sda unit s print free | grep 'free;' | sort -t : -k 4n -k 2n | tail -n 1
1:27269120s:27271167s:2048s:free;
이것이 귀하의 경우에 적용되는지 여부(제 예에서는 파티션을 생성할 수 없었고 실제로 가득 차 있었습니다)는 귀하가 직접 알아내야 할 것입니다. :)
답변2
간단합니다. 옵션이 mkparted
있습니다 . 를 사용하여 마지막 파티션을 검색한 다음 를 사용해야 --list
합니다 .awk
--list
mkpart part-type [fs-type] start end
하지만 당신의 대답은 다음과 같습니다
먼저 모든 파티션을 가져와서 다음을 사용해야 합니다.
mystartgroup=`parted --list |awk {'print $2'}`
myendgroup=`parted --list |awk {'print $3'}`
노트:
GB
으로 변환해야 합니다MG
.- 각 값의 마지막 값을 사용해야 합니다.
variable
-s
최종 스크립트에서 이를 사용해야 합니다parted command
.
시간이 있으면 이 스크립트를 완성해 주세요. 시간이 없어서 죄송합니다.