Arch Linux 物理机安装大体思路和部分实现细节(MBR & GPT)

照例转载于博客:https://blog.imakiseki.cf/techdev/arch/installation/


背景

作为官方文档的补充,大致提供一些安装 Arch Linux 到物理机上并安装桌面环境的思路和文档中未提及的细节。

设备

本文的主要篇幅将建立在如下几个设备之上:

  • 主力机

  • 操作系统:Manjaro x86_64

  • 用途:下载并烧录镜像、为目标机器提供网络服务、远程操作、应急使用等

  • 目标机器

  • 操作系统:Windows 7 Utimate x86_64

  • 磁盘数量:1

  • 磁盘记录类型:MBR

  • 启动类型:BIOS

  • 目标:与 Windows 并存安装 Arch Linux

  • U 盘

  • 总容量:8 GB

  • 用途:烧录 Arch Linux 镜像

在文末,会对磁盘记录类型为 GPT、启动类型为 UEFI 的设备的安装过程,及图形界面其他的安装方案作一些说明。

注意:强烈建议为主力机增添显示器、键盘等外设(对笔记本电脑等已有的除外),并在完全配置好网络环境前使用有线网络,防止因安装过程出现问题导致无法联网时难以检修。

安装

分区

建议在安装 Arch Linux 前分区,或是分出空闲空间,避免因不熟悉命令行环境或参数不直观导致数据丢失。笔者选择后者。

对于主力机是 Linux 的读者,可以使用 gparted 工具进行分区;对于 Windows 读者,可以使用 Disk Genius 工具进行分区。需要注意的是,gparted 底层使用 parted 命令行工具,而该工具在调整分区时无法调整分区头部位置。因此,对于有多启动需求的读者,建议在 Windows 下使用 Disk Genius 工具分区。若主力机上无 Windows 分区,可以在其他可移动介质中安装用于维护的 Windows PE 系统。

笔者的设备已有 BIOS/MBR 类型的 Windows 存在,安装时更加方便。对于大部分使用 UEFI/GPT 类型的读者,请参照官方文档。两种类型的设备的安装过程没有太大差异,且互联网上已有诸多相关的资料供读者参考。但若在安装后出现无法加载 Linux 或其它系统的情况(尤其是 UEFI/GPT 类型),排除软件原因后,考虑升级主板或更换相关硬件。

笔者的分区方案是:

| 分区 | 文件类型 | 大小 | 格式化 | 启动项 | 挂载点 | 安装镜像环境中的挂载点 |

| :-: | :-: | :-: | :-: | :-: | :-: | :-: |

| /dev/sda1 | HPFS/NTFS/exFAT | 65GB | 否 | 是 | | |

| /dev/sda2 | HPFS/NTFS/exFAT | 312.8GB | 否 | 否 | | |

| /dev/sda3 | Linux swap / Solaris | 8GB | 是 | 否 | [SWAP] | |

| /dev/sda4 | Linux | 80GB | 是 | 否 | / | /mnt |

其中,“挂载点”表示该分区在安装后操作系统中的路径,“安装镜像环境中的挂载点”表示该分区在当前环境(安装镜像环境)中的路径。

烧录镜像

终端执行 sudo fdisk -l 记录需要写入镜像的 U 盘的设备路径。根据官方文档


sudo dd bs=4M if=/path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress

注意写入后 U 盘的卷标应形如 ARCH_YYYYDD,其中 YYYYDD 表示镜像版本号中的年份和月份。若不是,建议手动更改。

U 盘启动

U 盘启动成功后进入镜像内置的简易操作系统。与其他发行版镜像稍有不同的是,Arch Linux 镜像默认终端为 zsh,且相比于用户实装的 Arch Linux 内置有更多有利于系统安装和调试的工具。

正常启动后,屏幕显示的应该类似于:


To install Arch Linux follow the installation guide:

https://wiki.archlinux.org/title/Installation_guide

For Wi-Fi, authenticate to the wireless network using the iwctl utility.

For mobile broadband (WWAN) modems, connect with the mmcli utility.

Ethernet, WLAN and WWAN interfaces using DHCP should work automatically.

After connecting to the internet, the installation guide can be accessed

via the convenience script Installation_guide.

Last login: Mon Apr 25 18:11:37 2022 from 10.42.0.1

[email protected] ~ #

并且文字有多种颜色(上方有一行全是空格,在屏幕上实则是不同颜色的色块(经常用于做终端颜色测试))。

而读者若发现屏幕上显示的类似于:


:: Mounting '/dev/disk/by-label/ARCH_202204' to '/run/archiso/bootmnt'

Waiting 30 seconds for device /dev/disk/by-label/ARCH_202204 ...

ERROR: '/dev/disk/by-label/ARCH_202204' device did not show up after 30 seconds...

Falling back to interactive prompt

You can try to fix the problem manually, log out when you are finished

sh: can't access tty: job control turned off

[rootfs ]#

说明 Arch Linux 安装镜像未找到设备(也就是 U 盘)。出现这种情况,一种原因是如上所述的未修改 U 盘的卷标。而另一种可能的原因则出在硬件上。先在终端上执行:


ls /dev/disk/by-label

出现的条目中,若有类似 U 盘卷标的,尝试挂载:


mkdir /mnt

mount /dev/disk/by-label/<卷标> /mnt

若发现无法挂载,或挂载成功后发现其并非 U 盘的,则说明可能出现了上述硬件问题。此时尝试重新插拔 U 盘,再执行 ls /dev/disk/by-label。若发现形如“ARCH_YYYYDD”的条目出现,则执行 exit 开始安装系统。

另外,有必要检测 U 盘启动时的“启动模式”。执行:


ls /sys/firmware/efi/efivars

若没有输出,则表示 U 盘在 BIOS 模式启动;反之,则为 UEFI 模式。若启动模式与预计不符,请考虑修改 BIOS 相关的设置。

远程登入

上文中笔者提到了“远程操作”。Arch Linux 安装镜像中内置 ssh,可以使用 ssh 远程登入进行安装。需要注意的是,笔者远程登入目标机器是为了方便截取终端上的文字,而考虑到 ssh 连接中断可能导致中断安装进程,不建议这么做。若确实需要,在终端中执行:


nano /etc/ssh/sshd_config

在文本编辑器中找到:


# To disable tunneled clear text passwords, change to no here!

#PasswordAuthentication yes

#PermitEmptyPasswords no

将其修改为:


# To disable tunneled clear text passwords, change to no here!

PasswordAuthentication yes

PermitEmptyPasswords yes

Ctrl+X,再按 y 保存文件,执行:


systemctl restart sshd

重启 ssh 服务后,尝试登入。

其他配置

本节对应官方文档中“Boot the live environment”小节到“Reboot”小节。大多数情况下只需要根据目标机器的环境修改少数参数就可以直接执行上面的代码。

网络服务

正如官方文档中提到的那样,安装镜像中的系统与用户实际使用的系统并不完全相同,在前者环境中能够正常运作的机能可能在后者环境中便会失灵。“Install essential packages”小节中也提到了一些可选的在安装系统时即配置的软件包,不过其中最重要的是网络服务相关的包。若不能保证离开安装镜像环境后 Arch Linux 的网络通信正常,读者可以自行安装相关的包,必要时可提前配置。

另外,对命令行环境不熟悉或读写配置文件不顺畅的读者,可以安装 nmtui,用以在交互式环境下管理网络服务。笔者选择的包为:net-toolsiproute2dhcpcdtraceroutenetworkmanagernmtui 被包含在该包中)。

文本编辑器

后续的安装操作需要读写配置文件,因此建议安装 vimnano 等文本编辑相关的包。

Boot loader

这需要读者仔细阅读官方文档(如 GRUB)的全文。绝大多数可能的情况在文档中都有描述。对于笔者的设备,笔者使用 GRUB 做了如下操作,以保证 NTFS 分区下的 Windows 能被 GRUB 识别(假定已经 arch-chroot 进入系统):


pacman -S os-prober grub ntfs-3g

grub-install --target=i386-pc /dev/sda

# 修改 `/etc/default/grub`,将 `#GRUB_DISABLE_OS_PROBER=false` 一行的注释去除

grub-mkconfig -o /boot/grub/grub.cfg

确认无误后,执行后续安装步骤。

安装后

读者可以在官方文档中阅读有关安装后推荐的行动。

桌面环境

笔者选择的桌面环境是:

  • 显示服务器:Xorg(优先安装)

  • 显示管理器:SDDM

  • 桌面环境:KDE

这些在 Arch Linux Wiki 上都有同名词条,且描述得十分详细。这里不作赘述。即便在安装桌面环境后未能正常显示桌面,也可以使用其他 TTY 在终端下操作。

对于其中涉及的安装包,笔者不建议安装元包(包名含“-meta”)。这是考虑到:

  • 一般安装桌面环境所需的包后,无彻底卸载的需求;

  • 应用程序相关的组件中若有想卸载的,由于这些组件都是元包的依赖项,此时无法完成卸载。

若不慎安装元包,也可以在 Live CD 环境中卸载元包后重新安装组包(包名不含“-meta”,安装时需要选择组别)。结束后执行 pacman -Qsq <包名> 验证。

多用户登录界面

如果读者需要在开机时启动桌面环境,官方文档给出了一种方案。但直接按照文档配置,会发现启动计算机后仍然停留在 TTY1 的终端登录页面,输入用户名后跳过输入密码阶段直接进入桌面环境。这显然不是我们所期待的。修复这个问题很简单,只需要将所给的配置项


if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then

exec startx

fi

放置在系统配置文件 /etc/profile 中即可。

本地化

参见《【Arch Linux】本地化:简体中文》《【Arch Linux】本地化:日语》

UEFI 和 GPT

以下所列同样仅是笔者机器的情况。请读者根据遇到的情况自行判断。

分区

根据笔者机器情况,笔者设计的分区方案如下:

| 分区 | 文件类型 | 启动项 | 挂载点 | 安装镜像环境中的挂载点 |

| :-: | :-: | :-: | :-: | :-: |

| /dev/sda1 | Linux | 是 | /boot | /mnt/boot |

| /dev/sda5 | Linux | 否 | / | /mnt |

| /dev/sdb4 | Linux | 否 | /home | /mnt/home |

| /dev/sdb5 | Linux | 否 | /usr | /mnt/usr |

| /dev/sdb6 | Linux swap / Solaris | 否 | [SWAP] | |

注意到这里 /usr//boot 分属不同的硬盘。此类情况将在后文加以说明。

U 盘启动无法找到盘符的问题

尝试在 UEFI+GPT 的机器上安装时,未出现此问题。

Boot loader

笔者仍然使用 GRUB,但所执行的命令需要更改:


grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

这将在 /boot/EFI 文件夹中生成 GRUB 文件夹。一些旧教程中添加了诸如 /dev/sda/dev/sdb 的参数,但现在实则是不需要的。

/usr 单独分区导致启动失败

按照类似笔者的方案分区后,启动系统将失败,并显示类似如下的界面:


/dev/sda1: recovering journal

Error:Root device mounted successfully, but /sbin/init does not exist.

Bailing out, you are on your own.Good luck.

sh: can't access tty; job control turned off

[rootfs ]#

根据官方文档的说明,读者需要重新进入 Live CD 环境,挂载所有分区后 arch-chroot 进入 chroot 环境。编辑其中的 /etc/mkinitcpio.conf 文件,修改类似如下的行


HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)


HOOKS=(base udev autodetect modconf block filesystems keyboard fsck usr shutdown)

随后重制镜像并重启:


mkinitcpio -P

reboot

Wayland

Wayland 也是一种显示服务协议(display server protocol),致力于成为 Xorg 的优秀后继者。Wayland 亦有兼容 Xorg 和 KDE 的实现,且 SDDM 依然能使用,但在 KDE 环境中并无相对 Xorg 的明显优势。

参照官方文档在 Xorg 基础上安装 Wayland 相关的包,并在登录界面左上角选择桌面为“Plasma (Wayland)”。

注意使用 Wayland 作为显示服务协议时,一些教程中涉及到 .xprofile 等配置文件将会失效。读者需要根据实际情况正确配置。在此不作赘述。

1 Like