通过脚本自动分区

通过脚本自动分区

我正在编写一个脚本(用于学习目的),它将帮助我自动安装 Arch Linux。在这个脚本中,我陷入了分区。虽然,我知道如何使用fdisk、cfdisk、gparted进行分区,但是所有这些工具都需要手动干预。但是,我想自动创建分区。在这方面,我必须在我的脚本中嵌入以下步骤:

  1. 在/dev/sda上创建GPT分区表
  2. 创建主启动分区 - efi (FAT32) - 500MB - /dev/sda1
  3. 创建主根分区 - ext4 - 17GB - /dev/sda2
  4. 创建主交换分区 - swap - 2GB - /dev/sda3

我知道文件系统稍后可以通过 mkfs 命令来实现。但是,如果是 EFI 和 SWAP 分区,则有必要(在分区时)告诉系统这不是常规的“Linux”分区。您能指导我如何在脚本中自动实现这些步骤吗?

答案1

当然可以,我发现 sfdisk 最适合此目的,但是请在使用这些工具时要非常小心,很容易对错误的磁盘进行分区并最终导致找不到数据的情况(尽管这会是大部分完好无损)。

以下是 GPT 分区表的示例。这只是分区表文本文件 ( <file>),您需要通过管道将sfdisk其应用到设备,如下所示:cat <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”后有两个默认选项,而不是三个。
  2. 我在最后添加了“echo t”并选择分区1,然后选择选项1,即EFI系统。
  3. 我再次添加了“echo t”并将分区 3 的类型更改为交换。

我认为将 /dev/sda1 的类型更改为 EFI 并将 /dev/sda3 的类型更改为 SWAP 是必要的。你怎么认为?

相关内容