手动设置磁盘

来自 Alpine Linux

系统磁盘模式是 Alpine Linux 的传统或经典硬盘安装方式。此安装模式适用于大多数用例,包括通用的 桌面开发机器 等。

如果整个硬盘可用作 Alpine Linux,则推荐使用 基于 setup-alpine 的安装 方式来安装 Alpine Linux。对于所有其他用例,请按照下面给出的基于 setup-disk 的安装方式进行操作。

基于 setup-disk 的安装

要执行 Alpine Linux 的传统硬盘安装,在完成基本配置后,继续创建、格式化和挂载分区,并将挂载点 /mnt 作为根目录,并运行命令 setup-disk -m sys /mnt

  1. 如果尚未完成 基本配置,请按照安装指南完成。必须具有可用的 互联网连接 才能完成此安装。
  2. 如果必要格式化的分区不可用,请先手动 创建 它们,然后 格式化 它们,包括交换分区(如果使用)。如果您使用的是传统 BIOS 模式,请使用 DOS 即 MBR 分区表,并确保为 extlinux 启动设置了正确的分区。
  3. / (根) 分区挂载到挂载点,例如 /mnt,如下所示

    # mount /dev/sdXY /mnt

  4. 如果您使用的是 EFI,请创建挂载点 /mnt/boot 并将 EFI 系统分区 (ESP) 挂载到它。

    # mkdir -p /mnt/boot # mount /dev/sdXY /mnt/boot

  5. 如果 交换 分区可用,您也可以立即启用它

    # swapon /dev/sdXY

  6. 使用以下命令安装 Alpine Linux

    # setup-disk -m sys /mnt

  7. setup-disk 将执行运行系统的传统硬盘安装,检测您的文件系统布局并生成 /etc/fstab,并根据 BOOTLOADER 环境变量 安装 引导加载程序
  8. 在安装结束时,您可以 重启 以启动到新安装的 Alpine Linux 并进行进一步的 配置

手动分区

分区工具

安装镜像环境可能只包含非常基本的 busybox 内置 fdisk 命令。相反,Alpine Linux 允许您在设置 基本配置 后立即安装下面列出的任何分区工具。

命令 软件包名称 功能 局限性
fdisk 内置 busybox 可以读取 GPT,修改 MBR 无法修改 GPT
gdisk gptfdisk 文本模式,支持 MBR/GPT 双向转换,最适合管理 GPT 分区表
cgdisk gptfdisk 用于 gdisk 的菜单驱动 curses 界面
sgdisk sgdisk 可脚本化的 gdisk 非交互式
fdisk util-linux-misc 文本模式,同时支持 gpt 和 MBR,最适合管理 MBR 分区表 除了其他工具造成的尺寸限制外,无其他限制
cfdisk cfdisk 用于 fdisk 的菜单驱动 curses 界面
sfdisk sfdisk 可脚本化的 fdisk 非交互式
parted parted 文本模式,同时支持 gpt 和 MBR 无法将 MBR 转换为 GPT,界面与上述工具不同

图形化工具,如 gpartedgnome-disk-utility 只能在 设置图形环境 后使用。

创建分区

对于 Alpine Linux,只需要 (/)根分区。甚至 /boot 分区和 交换分区 也是可选的。

警告: 请务必在以下部分中选择正确的磁盘设备。如果选择错误的设备,您将丢失数据。请先进行备份,如果您不确定,请不要继续。


cfdisk 将在所有示例中使用,因为它基于文本菜单,没有任何依赖项。但是,如果使用标准 ISO 启动镜像,安装软件包 cfdisk 需要网络可用。对于 GPT 分区及其从 MBR 到 GPT 的转换的出色支持,也推荐使用 cgdisk

或者,sfdisk 在标准 ISO 启动镜像中可用,并且可以在没有网络的情况下安装。

以下步骤安装软件包 cfdisk

# apk add cfdisk

cfdisk 将用于创建分区。在使用 cfdisk 之前,必须使用 blkid 识别磁盘名称

# blkid

/dev/sdX1: LABEL="some" UUID="..." TYPE="vfat"
/dev/sdX2: LABEL="other" UUID="..." TYPE="ext4"

cfdisk 如下运行时,它会在磁盘 /dev/sdX 上查找现有分区 

# cfdisk /dev/sdX

调整现有分区大小

警告: 请务必在以下部分中选择正确的磁盘设备。如果选择错误的设备,您将丢失数据。请先进行备份,如果您不确定,请不要继续。


cfdiskresize2fs 可用于调整磁盘上 ext2/3/4 文件系统的现有分区的大小。对于其他文件系统,必须安装必要的文件系统 工具。这可以在启动时完成。

cfdisk 屏幕截图

要调整磁盘大小,请启动 cfdisk

# cfdisk /dev/sda

  1. 选择目标分区,此处根据图像为 /dev/sda3
  2. 从底部菜单中选择Resize
  3. 在提示符下输入新的Size
  4. 选择Write,然后选择Quit

如果使用 -f (在线模式)调整文件系统大小,则必须在更改后立即重启系统。

# resize2fs -f /dev/sda3 # reboot

格式化分区

警告: /dev/sdXY 只是一个示例。请确保您使用正确的分区名称/编号。使用 blkid 命令验证分区名称/编号。选择错误的分区会导致数据丢失。如果您不确定,请不要继续,寻求 支持


每当 创建 分区时,必须先格式化分区才能使用它。根据要使用的文件系统,必须首先安装文件系统所需的 格式化工具

工具 文件系统 简要说明 格式化命令
btrfs-progs Btrfs 仅支持 RAID 0、1 和 10 mkfs.btrfs
dosfstools FAT12/FAT16/FAT32 用于 EFI 分区 mkfs.vfat
e2fsprogs ext2/ext3/ext4 ext4 是 Linux 中当前的默认设置 mkfs.ext4
exfatprogs exfat 常用于 USB 闪存驱动器和 SD 卡 mkfs.exfat
f2fs-tools F2FS mkfs.f2fs
hfsprogs XFS HFS/HFS+ Apple/Mac 产品 mkfs.hfsplus
jfsutils JFS mkfs.jfs
ntfs-3g NTFS 全功能,Microsoft/Windows FUSE 驱动程序 mkfs.ntfs
xfsprogs XFS mkfs.xfs


如果尚未完成,请先安装 文件系统工具。以下示例显示如何使用格式化工具来格式化不同的文件系统

  • e2fsprogs 用于 ext4、ext3 和 ext2。ext4 是 Alpine Linux 中的默认文件系统

    # mkfs.ext4 /dev/sdaXY

  • btrfs-progs 用于 btrfs 文件系统。

    # mkfs.btrfs /dev/sdaXY

  • dosfstools 用于 fat12/fat16/fat32 文件系统。这也用于 EFI 系统分区 (ESP)。

    # mkfs.vfat /dev/sdaXY

  • f2fs-tools 用于 F2FS 文件系统。

    # mkfs.f2fs /dev/sdaXY

磁盘布局

此材料正在制作中...

包括 RAID、加密和 LVM 在内的整个部分都需要更新。
(最后编辑者 Prabuanand 于 2025 年 2 月 20 日。)

您的 / (根) 卷上可以有一个或多个 RAID、加密和/或逻辑卷。但是,Alpine init 脚本只知道如何在它们按该顺序分层时处理它们,并且 /boot 分区中的 initram 和 extlinux.conf 文件已正确配置。

您的 /boot 目录不能位于加密或 LVM 卷上,至少不能与 Alpine 的默认引导加载程序 (extlinux) 一起使用。(Grub2 可以处理 /boot 位于 LVM 卷上的情况。)通常的做法是为 /boot 创建一个小分区,然后将磁盘的其余部分用于单独的分区,您可以在该分区上分层一个或多个 RAID、加密和/或逻辑卷。

有时 /boot 也被设置为镜像 (RAID1) 卷。但是,这仅用于初始化后访问。这样,当您将新的内核或引导加载程序配置文件写入 /boot 时,它将被写入多个物理分区。在预初始化引导加载程序阶段,只会从其中一个分区读取。

典型的设置可能如下所示

One-disk system
---------------
  +------------------------------------------------+
  |  small partition (32--100M), holding           |
  |  only /boot, filesystem needn't be journaled   |
  +------------------------------------------------+
  |  rest of disk in second partition              |
  |  +------------------------------------------+  |
  |  | cryptsetup volume                        |  |
  |  |  +-------------------------------------+ |  |
  |  |  |  LVM PV, containing single VG,      | |  |
  |  |  |  containing multiple LVs, holding   | |  |
  |  |  |  /, /home, swap, etc                | |  |
  |  |  +-------------------------------------+ |  |
  |  +------------------------------------------+  |
  +------------------------------------------------+


Two-disk system
---------------
  +------------------------------------------------+  +------------------------------------------------+
  |  small partition (32--100M), holding           |  |  small partition (32--100M), holding           | These 2 partitions might
  |  only /boot, filesystem needn't be journaled   |  |  only /boot, filesystem needn't be journaled   | form a mirrored (RAID1)
  +------------------------------------------------+  +------------------------------------------------+ volume
  |  rest of disk in second partition              |  |  rest of disk in second partition              |
  | T================================================================================================T | These 2 partitions form
  | T +--------------------------------------------------------------------------------------------+ T | a second mirrored
  | T | cryptsetup volume                                                                          | T | (RAID1) volume
  | T |  +---------------------------------------------------------------------------------------+ | T |
  | T |  | LVM PV, containing single VG,                                                         | | T |
  | T |  | containing multiple LVs, holding                                                      | | T |
  | T |  | /, /home, swap, etc                                                                   | | T |
  | T |  +---------------------------------------------------------------------------------------+ | T |
  | T +--------------------------------------------------------------------------------------------+ T |
  | T================================================================================================T |
  |                                                |  |                                                |
  +------------------------------------------------+  +------------------------------------------------+

在三磁盘系统中,/boot 仍然是 RAID1,但在这种情况下,较大的分区可能是 RAID5。

RAID

如果您提供 -r 开关,或者指定多个设备,则 setup-disk 将自动构建 RAID 阵列。

如果您想手动构建 RAID 阵列,请参阅 设置软件 RAID 阵列。然后您可以添加额外的加密和/或逻辑卷层,或者只是组装 RAID 阵列,并将 /dev/mdi 设备直接提供给 setup-disk。完成后,请务必在重启之前拆卸 RAID 阵列。

如果 setup-disk 看到您正在使用 RAID,无论是由于您给它提供了 -r 开关、多个设备还是 /dev/mdi 设备,那么它将正确设置您的 initramfs 和 extlinux.conf 文件。但是,在其他情况下,例如当您也使用加密时,或者您使用挂载的目录参数调用 setup-disk 时,这些可能未正确设置为 RAID。在这种情况下,您可能需要手动编辑/重建它们。以下假设 $MNT 保存您要安装到的根目录

echo "/sbin/mdadm" > $MNT/etc/mkinitfs/files.d/raid echo "/etc/mdadm.conf" >> $MNT/etc/mkinitfs/files.d/raid # 编辑 $MNT/etc/mkinitfs/mkinitfs.conf 以确保 features="..." # 包括 raid(此字段以空格分隔并用引号引起来) mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT # 编辑 $MNT/etc/update-extlinux.conf 以确保 modules=... 包含 # raid1 或 raid456(以您的 / 所在的为准;此字段以逗号分隔) # 还要检查 root= 设置 extlinux --raid --install $MNT/boot --update

待办事项: extlinux ... 添加 --update 选项是否足以使 /boot/extlinux.conf 被重新生成?或者我们是否需要手动调整该文件,或者也运行 update-extlinux


您可能还需要手动调整 $MNT/etc/fstab。您可能还需要将 /usr/share/syslinux/mbr.bin 复制到磁盘的 MBR。

加密

请参阅 使用 LUKS 设置加密卷。您可以添加额外的逻辑卷层,或者只是解锁您创建的卷(使用 cryptsetup luksOpen ...),并将 /dev/mapper/something 设备直接提供给 setup-disk。完成后,请务必在重启之前重新锁定卷(使用 cryptsetup luksClose ...)。

如果将您的 / (根) 目录安装在加密卷上,您需要手动编辑/重建您的 initram 和 extlinux.conf 文件。以下假设 $MNT 保存您要安装到的根目录,您已在设备 /dev/md2 上创建了加密卷,并且您想将加密卷解锁到名为“crypt”的虚拟卷中

# 编辑 $MNT/etc/mkinitfs/mkinitfs.conf 以确保 features="..." # 包括 cryptsetup(此字段以空格分隔并用引号引起来) mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT # 编辑 $MNT/etc/update-extlinux.conf 以确保 default_kernel_opts="..." # 包含 cryptroot=/dev/md1 和 cryptdm=crypt(此字段也以空格分隔并用引号引起来) # 还要检查 root= 设置 extlinux --install $MNT/boot --update

待办事项: extlinux ... 添加 --update 选项是否足以使 /boot/extlinux.conf 被重新生成?或者我们是否需要手动调整该文件,或者也运行 update-extlinux


您可能还需要手动调整 $MNT/etc/fstab

LVM

如果您提供 -L 开关,则 setup-disk 将自动构建和使用 LVM 组中的卷。

如果您想手动构建 LVM 系统,请参阅 使用 LVM 设置逻辑卷。然后 vgchange -ay,格式化并挂载您的卷,并将根挂载点提供给 setup-disk。完成后,请务必

umount ... vgchange -an

在重启之前。


如果 setup-disk 看到您正在使用 LVM,可能是因为您给它提供了 -L 开关,那么它将正确设置您的 initram 和 extlinux.conf 文件。但是,在其他情况下,这些可能未正确设置。在这种情况下,您可能需要手动编辑/重建它们。以下假设 $MNT 保存您要安装到的根目录

# 编辑 $MNT/etc/mkinitfs/mkinitfs.conf 以确保 features="..." # 包括 lvm(此字段以空格分隔并用引号引起来) mkinitfs -c $MNT/etc/mkinitfs/mkinitfs.conf -b $MNT # 编辑 $MNT/etc/update-extlinux.conf 以确保 root= 设置正确 extlinux --install $MNT/boot --update

待办事项: extlinux ... 添加 --update 选项是否足以使 /boot/extlinux.conf 被重新生成?或者我们是否需要手动调整该文件,或者也运行 update-extlinux


您可能还需要手动调整 $MNT/etc/fstab

故障排除

挂载 /dev/sdXY sysroot 失败

错误消息如下所示,/dev/sda8 会根据分区号和 SSD/HDD 等有所不同

mounting /dev/sda8 on /sysroot failed: No such file or directory
mounting root: failed
initramfs emergency recovery shell launched. Type 'exit' to continue boot
sh: can't access tty: job control turned off

上述错误消息可能是由多种原因引起的。请按照紧急 shell 中的以下步骤来确定一种可能的原因。

  1. 通过发出命令验证安装 Alpine Linux 的分区名称是否与上述 错误 匹配,并记下该分区的文件系统类型(例如 TYPE="ext4") 

    blkid

  2. 通过发出命令确保 sysroot 存在。

    ls -ld /sysroot

  3. 检查发出命令时是否出现上述错误消息。

    mount /dev/sda8 /sysroot

  4. 如果步骤 4 中的错误消息匹配,请检查是否已加载文件系统模块,方法是发出命令。

    lsmod |grep ext4

  5. 如果没有输出,则确认上述 问题 是由 缺少文件系统模块 引起的。

内核命令行中缺少文件系统模块

BusyBox mount 命令不会自动加载模块,因此需要将文件系统模块添加到内核命令行。即使 alpine 安装程序会自动执行此操作,但在手动磁盘安装的情况下,特别是对于 双启动 安装,也必须注意这一点。

  1. 要解决此问题,请发出命令以加载适当的文件系统模块(例如 TYPE="ext4")。

    modprobe ext4

  2. 要验证问题是否已解决,请重新发出命令。

    mount /dev/sda8 /sysroot

  3. 如果挂载成功,请发出以下命令以启动进入 Alpine Linux。

    exit

根据您的用例选择适当的解决方案进行永久修复

  • 如果您正在使用 grub,请确保 GRUB_CMDLINE_LINUX 行文件 /etc/default/grub 具有适当的文件系统模块 ext4rootfstype=ext4,如下所示

    /etc/default/grub的内容

    ... GRUB_CMDLINE_LINUX="console=ttyS0,19200n8 net.ifnames=0 modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4" ...
  • 如果您正在使用 Syslinux,请确保文件 /boot/extlinux.conf 中的 APPEND root 行具有适当的文件系统模块 ext4,如下所示

    /boot/extlinux.conf的内容

    ... APPEND root=/dev/sdXY modules=sd-load,usb-storage,ext4 quiet ...
注: 对于以上两种情况,您可能需要在进行上述更改后发出 update-grubupdate-extlinux
  • 对于独立于 引导加载程序 的解决方案,请确保文件 /etc/mkinitfs/mkinitfs.conf 中包含必要的文件系统模块。有关更多信息,请参阅 Initramfs 页面并重新创建 initramfs 镜像。

参见