我正在编写一个脚本(用于学习目的),它将帮助我自动安装 Arch Linux。在这个脚本中,我陷入了分区。虽然,我知道如何使用fdisk、cfdisk、gparted进行分区,但是所有这些工具都需要手动干预。但是,我想自动创建分区。在这方面,我必须在我的脚本中嵌入以下步骤:
- 在/dev/sda上创建GPT分区表
- 创建主启动分区 - efi (FAT32) - 500MB - /dev/sda1
- 创建主根分区 - ext4 - 17GB - /dev/sda2
- 创建主交换分区 - 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
我做了一些改变。
- 第一个“n”后有两个默认选项,而不是三个。
- 我在最后添加了“echo t”并选择分区1,然后选择选项1,即EFI系统。
- 我再次添加了“echo t”并将分区 3 的类型更改为交换。
我认为将 /dev/sda1 的类型更改为 EFI 并将 /dev/sda3 的类型更改为 SWAP 是必要的。你怎么认为?