web-dev-qa-db-fra.com

Comment créer et formater une partition en utilisant un script bash?

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.

53
GlassGhost

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
63
user2070305

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.

51
e40

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:

  • lignes d'en-tête: toutes facultatives:
  • lignes 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ée
    • size: 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'Ubuntu
      • 82 (sd6): échange

fdisk 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
37
kikeenrique

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
5
Ray

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

5
ron

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

4
Bruce Davis
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

0
Paul Justin