프로그래밍 방식으로 디스크 분할

프로그래밍 방식으로 디스크 분할

기존 파티션이 있는 디스크에 파일 시스템으로 새 파티션을 생성하는 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--listmkpart part-type [fs-type] start end

하지만 당신의 대답은 다음과 같습니다

먼저 모든 파티션을 가져와서 다음을 사용해야 합니다.

mystartgroup=`parted --list |awk {'print $2'}`
myendgroup=`parted --list |awk {'print $3'}`

노트:

  1. GB으로 변환해야 합니다 MG.
  2. 각 값의 마지막 값을 사용해야 합니다.variable
  3. -s최종 스크립트에서 이를 사용해야 합니다 parted command.

시간이 있으면 이 스크립트를 완성해 주세요. 시간이 없어서 죄송합니다.

관련 정보