bash 프로그램을 사용하여 장치를 파괴하지 않는 파티셔너를 만드는 방법에 대한 아이디어가 있습니까?

bash 프로그램을 사용하여 장치를 파괴하지 않는 파티셔너를 만드는 방법에 대한 아이디어가 있습니까?

그래서 저는 모든 작업을 하지 않고도 Arch를 설치하는 데 필요한 모든 기능을 수행하는 bash 프로그램을 웹사이트에서 만들려고 합니다. 디스크를 지우고, 파티션을 생성/삭제하고, 프로그램을 설치하려면 이 프로그램이 필요합니다. 내가 겪고 있는 문제는 디스크를 안전하게 지우고 파티션을 생성/삭제하는 것입니다. 장치를 차단하지 않고 어떻게 이 작업을 수행할 수 있습니까?

이 리소스에 대한 또 다른 질문(https://superuser.com/questions/332252/how-to-create-and-format-a-partition-using-a-bash-script)

나는 이 코드를 보았다:

# to create the partitions programatically (rather than manually)
# we're going to simulate the manual input to fdisk
# The sed script strips off all the comments so that we can 
# document what we're doing in-line with the actual commands
# Note that a blank line (commented as "defualt" will send a empty
# line terminated with a newline to take the fdisk default.
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
  o # clear the in memory partition table
  n # new partition
  p # primary partition
  1 # partition number 1
    # default - start at beginning of disk 
  +100M # 100 MB boot parttion
  n # new partition
  p # primary partition
  2 # partion number 2
    # default, start immediately after preceding partition
    # default, extend partition to end of disk
  a # make a partition bootable
  1 # bootable partition is partition 1 -- /dev/sda1
  p # print the in-memory partition table
  w # write the partition table
  q # and we're done
EOF

사용자가 변수를 지정해야 하는지 알려줄 수 있나요? 나는 사용자의 편의를 위해 프로그램이 모든 분할 명령을 실행할 수 있기를 원합니다. 게다가 이거 안전한가요?

답변1

sfdisk대신 다음 을 사용하는 것을 고려해야 합니다 fdisk.

먼저, 디스크에 gpt 파티션 테이블, EFI 파티션 및 EXT4 파티션을 생성하려면 /dev/sda다음을 수행할 수 있습니다.

sfdisk -X gpt /dev/sda <<EEOF 
,+500M,U,
,,L,
write   
EEOF

GPT 대신 DOS를 원하는 경우 다음을 수행하십시오 -X dos.-X gpt

이렇게 하면 디스크에 남아 있는 여유 공간을 사용하여 500mb EFI 파티션과 EXT4 파티션이 생성됩니다 /dev/sda. U그리고 V파티션 유형을 지정하십시오. 그중에는 VEFI 파티션과 UEXT4 파티션이 있습니다.

그래도 fdisk를 사용하고 싶다면. 이전과 유사한 작업을 수행해야 하지만 이전 파티션 테이블을 덮어쓰면 경고가 표시될 수 있습니다. 이를 위해서는 사용자 입력이 필요합니다(당신이 원하지 않을 것 같습니다).

man sfdisk파티션 유형 별칭과 자세한 정보를 확인하세요 .

고려해야 할 사항: sda사용자에게 디스크가 없으면 이 작업은 실패합니다. 대신에 나는 사용자가 Arch를 설치할 디스크를 지정할 수 있도록 사용자 입력을 권장합니다.

read -p "Name of disk to install: " disk

그런 다음 이전과 같이 수행하고 대신 다음을 sda사용합니다 $disk.

sfdisk -X gpt /dev/$disk <<EEOF

파티션을 만든 후 기억하세요파티션 포맷

답변2

이 도구가 parted바로 당신에게 필요한 것일 수도 있습니다. 이는 명령줄과 동일합니다 gparted. 소프트 RAID 시나리오에서 여러 디스크를 프로그래밍하는 데 사용합니다.

먼저 도우미 기능을 사용합니다 pdisk. 장치를 지정하면 파티션 테이블이 인쇄됩니다. 그렇지 않으면 사용자가 제공한 명령에 따라 작동합니다.

pdisk() {
    local dev ="$1"
    shift
    test 0 -eq $# && set -- print
    parted "$dev" --align optimal unit MiB "$@"
}

다음은 GPT 파티션 테이블을 설정하는 예입니다.

d=/dev/sdz
pdisk "$d" --script mklabel gpt

pdisk "$d" mkpart primary fat32 1 511             # 511MB EFI
pdisk "$d" set 1 boot on
pdisk "$d" set 1 esp on

pdisk "$d" mkpart primary 511 512# 1MB Grub
pdisk "$d" set 2 bios_grub on

pdisk "$d" mkpart primary 512 $((512 + 20*1024))  # 20GB

pdisk "$d" mkpart primary $((512 + 20*1024)) 100% # Everything else

관련 정보