fdisk - Partition in einer Zeile

8

Können Sie eine Partition auf einer USB-Festplatte mit dem Befehl fdisk in einer einzelnen Zeile erstellen?

Der Befehl fdisk ist interaktiver Natur. Ich möchte jedoch die Partitionserstellung in einer einzelnen Zeile mit dem Befehl fdisk automatisieren.

Kumar
quelle
Möchten Sie alles löschen und eine einzelne Partition erstellen oder eine neue Partition mit einem bestimmten Start / Ende erstellen?
Ciro Santilli 法轮功 病毒 审查 六四 事件 11

Antworten:

10

Der Versuch einer Automatisierung fdiskist möglich, aber nicht einfach zu warten. Wie andere Antworten vermerken, sind entweder parted oder sfdisk so konzipiert, dass sie das tun, was Sie wollen, und einfacher zu automatisieren.

getrennt

So erstellen Sie eine Partition in einer Zeile mit parted:

parted -a optimal /dev/usb mkpart primary 0% 4096MB

wie in diesem UNIX SE-Beitrag zu sehen . Jeder der Teile ist ziemlich selbsterklärend, aber nur für den Fall, hier ist wie mkpartdefiniert:

mkpart[ Teiltyp fs-Typ Name ] Start Ende

wo die Dinge in eckigen Klammern sind optional, aber Sie wollen wahrscheinlich primaryfür Ihren Teil-Typen , beginnen an 0%und enden an 4096MBoder aber große USB - Stick ist.

sfdisk

Die Eingabe in sfdiskist wohl nicht viel einfacher zu verstehen als die Eingabe in, fdiskaber sie ist für die Automatisierung gedacht .

#!/bin/sh
# Example Usage: create_sd /dev/sdb

DRIVE=$1

dd if=/dev/zero of=$DRIVE bs=1024 count=1024

SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`

echo DISK SIZE - $SIZE bytes

CYLINDERS=`echo $SIZE/255/63/512 | bc`

echo CYLINDERS - $CYLINDERS

{
echo ,9,0x0C,*
echo ,,,-
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE

mkfs.vfat -F 32 -n "boot" ${DRIVE}1
mke2fs -j -L "rootfs" ${DRIVE}2

kommt von The Linux Daily und obwohl es nicht der einzeiligen Anfrage entspricht, zeigt es, wie es gemacht werden könnte.

Küken
quelle
FWIW, die hier angegebenen Optionen werden von sfdisk nicht mehr unterstützt und führen zu einem Fehler für das obige Snippet.
Logidelic
5

Löschen Sie alles und erstellen Sie eine einzelne Partition:

dev='/dev/sdb'
sudo umount "$dev"
printf "o\nn\np\n1\n\n\nw\n" | sudo fdisk "$dev"
sudo mkfs.ext4 "${dev}1"

Siehe auch: /superuser/332252/creating-and-formating-a-partition-using-a-bash-script

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
Dies funktioniert, aber mit sfdiskoder partedwird einfacher zu arbeiten und zu warten
Küken
1
@chicks cool, ich werde es mir ansehen. Jemand hätte ein Beispiel
posten sollen
guter Punkt @Ciro, ich werde mich darum kümmern ...
Küken
2

Sie müssen wahrscheinlich den Befehl parted anstelle von fdisk verwenden.

Peter Lindqvist
quelle
2

sfdiskhat auch einen nicht interaktiven Modus, der Partitionsinformationen von stdin einliest. partedist jedoch flexibler.

Justarobert
quelle
2

Verwenden Sie stattdessen sfdisk .

Die Manpage zu sfdisk ist etwas verwirrend. Hier finden Sie einige spezifische Beispiele für die Automatisierung der Partitionskonfiguration mit sfdisk. Ein Beispiel ist, dass Sie die Partitionsinformationen von einem Laufwerk über speichern sfdisk -lund diese dann direkt auf einem neuen Laufwerk speichern können .

Phil Hollenback
quelle
0

Für GPT-Tabellen können Sie sgdisk verwenden :

sgdisk -n 0:0:0 /dev/sde

-n, --new = partnum: start: end Erstellt eine neue Partition. Sie geben eine Partitionsnummer, einen Startsektor und einen Endsektor ein. Sowohl Start- als auch Endsektoren können absolut als Sektorzahlen oder als Positionen angegeben werden, die in Kibibyten (K), Mebibyten (M), Gibibyten (G), Tebibyten (T) oder Pebibyten (P) gemessen werden. Beispielsweise gibt 40M eine Position 40MiB vom Start der Festplatte an. Sie können Positionen relativ zum Anfang oder Ende des angegebenen Standardbereichs angeben, indem Sie der Zahl ein '+' oder '-' Symbol voranstellen, wie in + 2G, um einen Punkt 2GiB nach dem Standardstartsektor anzugeben, oder -200M, um anzugeben ein Punkt 200MiB vor dem letzten verfügbaren Sektor. Ein Start- oder Endwert von 0 gibt den Standardwert an. Dies ist der Beginn des größten verfügbaren Blocks für den Startsektor und das Ende desselben Blocks für den Endsektor. Ein Partnum-Wert von 0 bewirkt, dass das Programm die erste verfügbare Partitionsnummer verwendet.

Spellanser
quelle