그래서 저는 모든 작업을 하지 않고도 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
파티션 유형을 지정하십시오. 그중에는 V
EFI 파티션과 U
EXT4 파티션이 있습니다.
그래도 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