Est-il possible de créer et de formater une partition à l'aide d'un script bash?
Je pense que cela peut être fait avec fdisk mais je ne sais pas comment alimenter les commandes du script bash dans le shell fdisk puis quitter le shell fdisk.
Je veux créer une partition puis la formater en ntfs à partir de bash.
Semblable aux suggestions précédentes, les commandes de tuyauterie à fidsk, j'ai trouvé cette approche utile pour laisser des détails aux mainteneurs suivants. Les bits sed suppriment tous les commentaires avant que fdisk ne reçoive l'entrée.
# 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
fdisk
lit depuis stdin il vous suffit donc de lui donner les commandes appropriées. Par exemple, ce qui suit efface la table de partition, s’il en existe une, et en crée une nouvelle avec une seule partition qui est le; disque entier:
(
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
Je vous recommande de faire la tâche que vous voulez, en enregistrant ce que vous tapez afin de pouvoir la reproduire.
sfdisk
sfdisk
est une version scriptée de fdisk
_ { Cela fait partie de util-linux
, tout comme fdisk
, la disponibilité devrait donc être la même.
Une table de partition avec une seule partition qui prend tout le disque peut être créée avec:
echo 'type=83' | Sudo sfdisk /dev/sdX
et des tables de partition plus complexes sont expliquées ci-dessous.
Pour générer un exemple de script, obtenez la configuration de l’un de vos disques:
Sudo sfdisk -d /dev/sda > sda.sfdisk
Exemple de sortie sur mon dual boot 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
Une fois le script enregistré dans un fichier, vous pouvez l'appliquer à sdX
avec:
Sudo sfdisk /dev/sdX < sda.sfdisk
Pour sfdisk
entrée, vous pouvez simplement omettre les noms de périphériques et utiliser des lignes de type:
start= 2048, size= 3072000, type=7, bootable
Ils sont simplement ignorés s'ils sont présents et le nom du périphérique est extrait de l'argument de la ligne de commande.
Quelques explications:
label
: type de table de partition. (dos
(MBR)) est une ancienne méthode largement prise en charge, gpt
la nouvelle chose brillante.unit
: seul sector
est pris en charge. 1 secteur est généralement égal à 512 octets. Rechercher avec cat /sys/block/sda/queue/hw_sector_size
Voir aussi: https://unix.stackexchange.com/questions/2668/finding-the-sector-size-of-a-partitiondevice
: informatif seulement je penselignes de partition:
start
: offset à l'intérieur du disque sur lequel la partition démarre.
start
a de très bons défauts et peut souvent être omis:
start
correspond à 2048 sur la première ligne, c’est-à-dire 1 Mo (2048 + 512), valeur par défaut pour la compatibilité des disques.start
default supplémentaire à la première position non allouéesize
: man sfdisk
dit: The default value of size indicates "as much as possible"
. Donc, pour remplir le disque avec une seule partition, utilisez: /dev/sda : start=2048, type=83
type
: octet magique stocké sur le secteur de démarrage pour chaque entrée de partition . Valeurs possibles: https://en.wikipedia.org/wiki/Partition_type Sur cet exemple, nous observons: 7
(sda1
, 2
et 3
): systèmes de fichiers pris en charge par Windows. Matériel Windows préinstallé et partitions de récupération Lenovo. Les étiquettes Sudo blkid
aident à les identifier.5
(sda4
): partition primaire étendue, qui contiendra d'autres partitions logiques (car nous ne pouvons avoir que 4 partitions primaires avec MBR)83
(sda5
, 7
et 8
): partitions prises en charge par Linux. Pour moi, une home
et deux racines avec différentes versions d'Ubuntu82
(sd6
): échangefdisk
peut également lire les scripts sfdisk
à l'aide de la commande I
, qui les "tire" au cours d'une session interactive fdisk
, ce qui vous permet une personnalisation plus poussée avant l'écriture de la partition.
Testé sur Ubuntu 16.04, sfdisk
2.27.1.
Formate et remplit les partitions avec un fichier image sans Sudo
C'est un bon moyen d'apprendre à utiliser sfdisk
sans faire exploser vos disques durs: https://stackoverflow.com/questions/10949169/how-tcreate-a-multi-partition-sd-disk-image- without-root-privileges/52850819 # 52850819
Vous pouvez le faire avec seulement quelques commandes, utilisez intros\n au lieu de plusieurs échos.
echo -e "o\nn\np\n1\n\n\nw" | fdisk /dev/sda
Les commandes de tuyauterie vers fdisk fonctionnent bien comme expliqué par d’autres personnes, mais de cette façon un peu plus élégantes et lisibles:
fdisk /dev/sdc <<EOF
n
p
1
w
EOF
La tuyauterie à partir d'un fichier (temporaire) fonctionne également:
fdisk /dev/sdc < /tmp/fdisk.cmds
Vous pouvez utiliser le script fdisk
.
(echo n; echo p; echo 1; echo 1; echo 200; echo w) | fdisk /dev/sdc
Cela crée une partition de 200 Mo sur /dev/sdc
Créez un nouveau type de label gpt:
Sudo /sbin/parted /dev/xvdf mklabel gpt --script
Partitionnez le disque:
Sudo /sbin/parted /dev/xvdf mkpart primary 0% 100% --script
printf 'o\nn\np\n1\n\n\nw' | fdisk /dev/sda
Le script utilise fdisk pour créer des partitions basées sur les réponses d’autres personnes.
Modifiez les éléments suivants dans le script:
NUM_PARTITIONS = 5
PARTITION_SIZE = "+ 10G"
Un exemple d'utilisation est donné après le script.
#!/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
courir avec:
Sudo sh mk_partition.sh/dev/sdxxx