スクリプトによる自動パーティション化

スクリプトによる自動パーティション化

私はArch Linuxのインストールを自動化するのに役立つスクリプト(学習目的で)を書いています。このスクリプトではパーティション化の問題が発生しました。 fdisk、cfdisk、gpartedを使用して分割する方法を知っていますが、これらのツールはすべて手動介入が必要です。しかし、自動的にパーティションを作成したいと思います。この点で、スクリプトに次の手順を含める必要があります。

  1. /dev/sdaにGPTパーティションテーブルを作成する
  2. デフォルトブートパーティションの作成 - efi(FAT32) - 500MB - /dev/sda1
  3. 基本ルートパーティションの作成 - ext4 - 17GB - /dev/sda2
  4. 基本スワップパーティションの作成 - スワップ - 2GB - /dev/sda3

後で、mkfsコマンドでファイルシステムを実装できることを知っています。ただし、EFIパーティションとSWAPパーティションでは、パーティションを分割するときにこれが通常の「Linux」パーティションではないことをシステムに知らせる必要があります。スクリプトでこれらの手順を自動化する方法を教えてください。

答え1

もちろん、sfdiskがこの目的に最も適していることがわかりましたが、これらのツールを使用するときは非常に注意する必要があります。間違ったディスクを分割してデータを見つけることができなくなります(たいていは破損しませんが)。

以下はGPTパーティションテーブルの例です。これは、次のようにデバイスに<file>パイプする必要があるパーティションテーブルテキストファイル()です。sfdiskcat <file> | sfdisk <device>

label: gpt
device: /dev/sdY
unit: sectors

1: size=2048,type=21686148-6449-6E6F-744E-656564454649,name=part-bios
2: size=512MiB,type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B,name=part-efi
3: size=512MiB,type=0FC63DAF-8483-4772-8E79-3D69D8477DE4,name=part-boot
4: size=852GiB,type=E6D6D379-F507-44C2-A23C-238F2A3DF928,name=part-lvm
5: type=0FC63DAF-8483-4772-8E79-3D69D8477DE4,name=part-extra

#
# full list of partition UUIDs: sfdisk -X gpt -T
#

今回はスクリプトの別の例です(より簡単な場合は、DOS型タグですが、アイデアを得ることができます)。

#!/bin/bash

DEV=/dev/sdXXXXXX # pick your disk device

wipefs -a ${DEV} # recommended if you want to swap partition table types

# partitioning for 20G disk
BOOT_SIZE=512
ROOT_SIZE_SEC=16384

echo "label: dos
device: ${DEV}
unit: sectors

${DEV}1 : size=${BOOT_SIZE_SEC}MiB, type=83
${DEV}2 : size=${ROOT_SIZE_SEC}MiB, type=83
${DEV}3 : type=82
" | sfdisk ${DEV}

答え2

この構造を使用できます。これは、FAT形式で25MBのパーティションを作成するために使用したスクリプトです。

コマンドをインタラクティブに実行しfdisk、各レスポンスにコメントを付けて開始します。この応答を正しい順序で配置するために使用してくださいecho。空の場合、echoデフォルトのオプションを表します。

(
  echo o;
  echo n;
  echo ;
  echo ;
  echo ;
  echo +25M;
  echo a;
  echo n;
  echo ;
  echo ;
  echo ;
  echo ;
  echo w;
) | fdisk /dev/sdb

mkfs.vfat -n 'BOOT' /dev/sdb1

答え3

@schrodigerscatcuriosit

私のニーズに合わせてスクリプトを編集しました。ここにいる:

(
  echo g;
  echo n;
  echo ;
  echo ;
  echo +500M;
  echo n;
  echo ;
  echo ;
  echo +17G;
  echo n;
  echo ;
  echo ;
  echo ;
  echo t;
  echo 1;
  echo 1;
  echo t;
  echo ;
  echo 19;
  echo w;
) | fdisk /dev/sda

私はいくつかのことを変更しました。

  1. 最初の「n」の後には、3つではなく2つのデフォルトオプションがあります。
  2. 最後に「echo t」を追加し、パーティション1を選択し、EFIシステムであるオプション1を選択しました。
  3. 再び「echo t」を追加し、パーティション3のタイプをスワップに変更しました。

/dev/sda1の型をEFIに、/dev/sda3の型をSWAPに変更する必要があると思います。どう思いますか?

関連情報