มีวิธีการสร้างและจัดรูปแบบพาร์ติชันโดยใช้สคริปต์ทุบตีหรือไม่?
ฉันคิดว่ามันสามารถทำได้ด้วย fdisk แต่ฉันไม่รู้วิธีป้อนคำสั่งจากสคริปต์ bash ลงใน fdisk shell แล้วออกจาก fdisk shell
ฉันต้องการสร้างพาร์ติชันแล้วจัดรูปแบบเป็น ntfs จากภายในทุบตี
มีวิธีการสร้างและจัดรูปแบบพาร์ติชันโดยใช้สคริปต์ทุบตีหรือไม่?
ฉันคิดว่ามันสามารถทำได้ด้วย fdisk แต่ฉันไม่รู้วิธีป้อนคำสั่งจากสคริปต์ bash ลงใน fdisk shell แล้วออกจาก fdisk shell
ฉันต้องการสร้างพาร์ติชันแล้วจัดรูปแบบเป็น ntfs จากภายในทุบตี
คำตอบ:
คล้ายกับคำแนะนำก่อนหน้านี้คำสั่ง piping ไปยัง fidsk ฉันพบว่าวิธีนี้มีประโยชน์ในการทิ้งรายละเอียดไว้สำหรับผู้ดูแลที่ตามมา บิต sed ดึงความคิดเห็นทั้งหมดออกก่อนที่ fdisk จะได้รับอินพุต
# 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
sfdisk
เป็นระบบอัตโนมัติที่เป็นมิตรมากกว่าfdisk
sfdisk
sfdisk
เป็นเวอร์ชัน Scripted ของ fdisk
มันเป็นส่วนหนึ่งutil-linux
เช่นเดียวกับfdisk
เพื่อให้พร้อมใช้งานควรจะเหมือนกัน
ตารางพาร์ติชันที่มีพาร์ติชันเดียวที่สามารถใช้ทั้งดิสก์ได้สามารถสร้างได้ด้วย:
echo 'type=83' | sudo sfdisk /dev/sdX
และตารางพาร์ติชันที่ซับซ้อนมากขึ้นได้อธิบายไว้ด้านล่าง
ในการสร้างตัวอย่างสคริปต์รับการตั้งค่าหนึ่งในดิสก์ของคุณ:
sudo sfdisk -d /dev/sda > sda.sfdisk
ตัวอย่างผลลัพธ์ของ Lenovo T430 Windows 7 / Ubuntu ดูอัลบูต:
label: dos
label-id: 0x7ddcbf7d
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 3072000, type=7, bootable
/dev/sda2 : start= 3074048, size= 195430105, type=7
/dev/sda3 : start= 948099072, size= 28672000, type=7
/dev/sda4 : start= 198504446, size= 749594626, type=5
/dev/sda5 : start= 198504448, size= 618891264, type=83
/dev/sda6 : start= 940277760, size= 7821312, type=82
/dev/sda7 : start= 817397760, size= 61437952, type=83
/dev/sda8 : start= 878837760, size= 61437500, type=83
เมื่อคุณบันทึกสคริปต์ลงในไฟล์แล้วคุณสามารถนำไปใช้sdX
กับ:
sudo sfdisk /dev/sdX < sda.sfdisk
สำหรับsfdisk
อินพุตคุณสามารถละเว้นชื่ออุปกรณ์และใช้บรรทัดประเภท:
start= 2048, size= 3072000, type=7, bootable
พวกเขาจะถูกละเว้นถ้ามีอยู่และชื่ออุปกรณ์ที่นำมาจากอาร์กิวเมนต์บรรทัดคำสั่ง
คำอธิบายบางอย่าง:
label
: ประเภทของตารางพาร์ทิชัน dos
(MBR)เป็นรุ่นเก่าที่ได้รับการสนับสนุนอย่างกว้างขวางgpt
สิ่งใหม่ที่เป็นประกายunit
: sector
รองรับเท่านั้น 1 ส่วนมักเท่ากับ 512 ไบต์ ค้นหาด้วยcat /sys/block/sda/queue/hw_sector_size
ดูเพิ่มเติมที่: https://unix.stackexchange.com/questions/2668/finding-the-sector-size-of-a-partitiondevice
: ข้อมูลเท่านั้นฉันคิดว่าสายพาร์ทิชัน:
start
: offset ภายในดิสก์ที่พาร์ติชันเริ่มทำงาน
start
มีค่าเริ่มต้นที่ดีมากและมักจะเป็น ommited:
start
คือ 2048 เช่น 1Mb (2048 + 512) ซึ่งเป็นค่าเริ่มต้นที่มีสติสำหรับความเข้ากันได้ของดิสก์start
เริ่มต้นต่อไปยังตำแหน่งที่ไม่ได้ถูกจัดสรรแรกsize
: พูดว่า:man sfdisk
The default value of size indicates "as much as possible"
ดังนั้นเมื่อต้องการเติมดิสก์ด้วยพาร์ติชันเดียวให้ใช้:/dev/sda : start=2048, type=83
type
: ไบต์มายากลที่เก็บไว้ในบูตเซกเตอร์สำหรับแต่ละรายการพาร์ทิชัน ค่าที่เป็นไปได้: https://en.wikipedia.org/wiki/Partition_typeในตัวอย่างนี้เราสังเกต:
7
( sda1
, 2
และ3
): ระบบไฟล์ที่รองรับ Windows สิ่ง Windows ที่ติดตั้งไว้ล่วงหน้าและพาร์ติชันการกู้คืนของ Lenovo sudo blkid
ป้ายกำกับช่วยในการระบุ5
( sda4
): พาร์ติชันหลักแบบขยายซึ่งจะมีโลจิคัลพาร์ติชันอื่น (เนื่องจากเราสามารถมีได้เพียง 4 พาร์ติชันหลักที่มี MBR)83
( sda5
, 7
และ8
): พาร์ติชันที่ Linux รองรับ สำหรับฉันหนึ่งhome
และสองรูทที่มีเวอร์ชัน Ubuntu แตกต่างกัน82
( sd6
): swapfdisk
ยังสามารถอ่านsfdisk
สคริปต์ด้วยI
คำสั่งที่ "แหล่งที่มา" พวกเขาในช่วงfdisk
เซสชั่นแบบโต้ตอบช่วยให้คุณปรับแต่งเพิ่มเติมก่อนที่จะเขียนพาร์ทิชัน
ทดสอบบน Ubuntu 16.04, sfdisk
2.27.1
จัดรูปแบบและเติมพาร์ติชันไฟล์ภาพโดยไม่ต้อง sudo
นี่เป็นวิธีที่ดีในการเรียนรู้การใช้งานsfdisk
โดยไม่ทำให้ฮาร์ดดิสก์ของคุณเสียหาย: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-disk-image-without-root- สิทธิ์เข้า / 52850819 # 52850819
fdisk
อ่านจากstdinดังนั้นคุณก็จำเป็นต้องให้อาหารมันคำสั่งที่เหมาะสม ตัวอย่างเช่นต่อไปนี้ล้างตารางพาร์ติชันหากมีหนึ่งและทำให้ใหม่ที่มีพาร์ทิชันเดียวที่; ดิสก์ทั้งหมด:
(
echo o # Create a new empty DOS partition table
echo n # Add a new partition
echo p # Primary partition
echo 1 # Partition number
echo # First sector (Accept default: 1)
echo # Last sector (Accept default: varies)
echo w # Write changes
) | sudo fdisk
ฉันขอแนะนำให้คุณทำงานที่คุณต้องการบันทึกสิ่งที่คุณพิมพ์เพื่อให้คุณสามารถทำซ้ำได้
printf
แทนที่จะecho
เป็นนิสัยในการใช้สิ่งที่ทำงานข้ามระบบอย่างสม่ำเสมอ
คุณสามารถทำได้ด้วยคำสั่งเพียงไม่กี่คำใช้ intros \ nแทนที่จะใช้ echos หลายตัว
echo -e "o\nn\np\n1\n\n\nw" | fdisk /dev/sda
\n
สิ่งจำเป็นอื่นหลังจากw
?
echo
โดยอัตโนมัติยุติบรรทัดที่มีการขึ้นบรรทัดใหม่ (ถ้า-n
ตัวเลือกใช้)
fdisk
คุณสามารถสคริปต์
(echo n; echo p; echo 1; echo 1; echo 200; echo w) | fdisk /dev/sdc
ที่สร้างพาร์ติชัน 200 MB ขึ้นไป /dev/sdc
การไพพ์คำสั่งไปยัง fdisk นั้นทำงานได้ดีเหมือนที่คนอื่นอธิบาย แต่วิธีนี้ดูดีและอ่านง่ายขึ้น:
fdisk /dev/sdc <<EOF
n
p
1
w
EOF
การไพพ์จากไฟล์ (ชั่วคราว) ก็ใช้งานได้:
fdisk /dev/sdc < /tmp/fdisk.cmds
สร้าง gpt disklabel ชนิดใหม่:
sudo /sbin/parted /dev/xvdf mklabel gpt --script
แบ่งพาร์ติชันดิสก์:
sudo /sbin/parted /dev/xvdf mkpart primary 0% 100% --script
printf 'o\nn\np\n1\n\n\nw' | fdisk /dev/sda
สคริปต์ใช้fdiskเพื่อสร้างพาร์ติชั่นตามคำตอบของคนอื่น
เปลี่ยนสิ่งต่อไปนี้ในสคริปต์:
NUM_PARTITIONS = 5
PARTITION_SIZE = "+ 10G"
ตัวอย่างการใช้งานจะได้รับหลังจากสคริปต์
#!/bin/bash
if [ $# -eq 0 ]
then
echo "input the device"
exit
fi
NUM_PARTITIONS=5
PARTITION_SIZE="+10G"
SED_STRING="o"
TAIL="p
w
q
"
NEW_LINE="
"
LETTER_n="n"
EXTENDED_PART_NUM=4
TGTDEV=$1
SED_STRING="$SED_STRING$NEW_LINE"
for i in $(seq $NUM_PARTITIONS)
do
if [ $i -lt $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
if [ $i -eq $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE"
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
if [ $i -gt $EXTENDED_PART_NUM ]
then
SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
fi
done
SED_STRING="$SED_STRING$TAIL"
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
$SED_STRING
EOF
ทำงานด้วย:
sudo sh mk_partition.sh / dev / sdxxx
#!/bin/sh
hdd="/dev/hda /dev/hdb /dev/hdc"
for i in $hdd;do
echo "n
p
1
w
"|fdisk $i;mkfs.ext3 "$i1";done
คุณสามารถใช้สคริปต์นี้ เพียงให้แน่ใจว่าคุณกำหนดพาร์ทิชันของคุณเองที่hdd
กำหนด มีช่องว่าง 2 ช่องระหว่าง1
และw
; พวกเขาต้องอยู่ที่นั่นเพื่อรับค่าเริ่มต้น