知其所以然:在 VirtualBox 里安装 Arch Linux 操作系统

本文的写作目的不只是提供一个流水线式的 Arch Linux 的安装步骤,更希望通过一些简单的讲解使各位了解一些基本的 Linux 系统知识。即 “知其然,知其所以然。”

在 VirtualBox 中安装 Arch Linux 的主要步骤如下:

  1. 准备 VirtualBox。
  2. 磁盘分区。
  3. 分区格式化。
  4. 配置安装包镜像源。
  5. 挂载分区并安装系统。
  6. 生成 fstab 文件。
  7. 配置系统选项。
  8. 安装 Boot Loader。

1. 准备 VirtualBox (VBox)

  • 在 VBox 中建立虚拟机项目,选择适合你的电脑的配置参数。我选择的是:处理器核心 x2、内存 2 GB、显存 128 MB、硬盘空间 100 GB(动态分配)。
  • 在 VBox 中选择:设置 -> 存储 -> IDE 控制器中加载 Arch Linux 光盘镜像。
  • 在 设置 -> 系统 -> 启动顺序 里,选择光盘优先启动。启动系统,出现如下启动画面:
Arch Linux 启动画面
  • 选择 Boot Arch Linux,开始安装系统(注意我安装的是32位的 Arch Linux)。

2. 磁盘分区与格式化

以 root 身份登录系统。


第一次以 root 身份登陆

使用 lsblk 命令来查看当前的分区状况:

使用 **lsblk** 命令查看分区情况

这里大小为 102 GB 的 sda 就是未分区、未格式化的原始硬盘空间。其它部分是光盘启动的 Arch Linux 系统的分区部分,可忽略。

分区工具:使用官方指南中的 parted 工具和常用的 fdisk 工具都可以。这里使用有交互界面的 cfdisk 工具。注意为了后续 Boot Loader 的安装方便,我们选择使用传统的 MBR 分区表方案。所以在进入 cfdisk 之后,首先选择 dos 选项,即使用 MBR 分区表方案。

使用 New 选项新建分区,手动输入分区大小。我的分区方案为:启动分区 (boot) 250 MB,交换分区 (swap) 2.2 GB (稍大于虚拟机的内存容量),根目录 ("/") 分区 99.6 GB,结果如下图所示。(你也可以为 "/home" 目录建立单独的分区,方法与建立根目录分区类似,不再赘述。)

**cfdisk** 中的3分区方案

Arch Linux 社区中文安装指南中有如下警告:

cfdisk 创建的第一个分区起始位置是63扇区而不是通常的2048扇区。这将会在 SSD 和使用高级格式化(4k 扇区)的设备上造成性能问题。

现在看来至少在使用 VBox 安装 Linux 时可以忽略该警告,因为第一个分区的起始扇区确实是 2048 而不是 63。因此也就不会发生 “因为硬盘没有 4 K 扇区对齐而导致性能问题”

将 sda1 设为启动分区 (bootable) ,将全部改动写入分区表 (write 选项,输入 yes,回车),然后退出 (quit) cfdisk 工具。

使用 lsblk 命令查询分区状况如下,分区成功!

分区结束后使用 **lsblk** 命令查询分区状况

3. 分区格式化

首先,格式化启动与根目录分区:

mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda3

然后格式化交换分区

mkswap /dev/sda2

同时开启交换分区,为下面的 fstab 写入做好准备 (后文详述)。

swapon /dev/sda2

4. 配置安装包镜像源

现在可以先 ping 一下网络,VBox 应该已经自动配置了联网。

ping -c 3 114.114.114.114

因为系统安装过程中要下载软件安装包,所以选择在国内的镜像源可以大大加快软件下载和安装的进度。我选择了速度较快的浙大、中科大和 163 的镜像源。Arch Linux 镜像源的状态可以在这里查看。

使用 nano 文本编辑器对镜像源列表进行编辑:

nano /etc/pacman.d/mirrorlist

在文件中服务器列表的开头部分添加:

## China
Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.163.com/archlinux/$repo/os/$arch

编辑完后的文件如下图所示:


编辑后的镜像源列表

文件编辑之后使用 Ctrl+x 进行保存(连续输入:Ctrl+x,y,回车;或者Ctrl+x,n,回车:放弃保存)。

在本机同步镜像源数据库,输入:

pacman -Syy

5. 挂载分区并安装系统

到现在为止,我们的所有操作都是在光盘启动的 Linux 系统中进行的。下面要将真正的 Linux 系统文件安装到虚拟机的硬盘中。前文中进行了分区与格式化之后的硬盘分区,首先要经过“挂载” (mount) 操作,才能够供我们访问。

首先挂载根目录:

mount /dev/sda3 /mnt

在根目录中创建启动目录 (boot),并挂载它:

mkdir -p /mnt/boot
mount /dev/sda1 /mnt/boot

回到根目录,现在终于可以把系统文件安装到我们刚才创建的硬盘分区中去了。Arch Linux 团队为此准备了专门的脚本工具 pacstrap,执行下面的命令以安装系统文件:

pacstrap /mnt base base-devel

其中 /mnt 是当前根目录所在的挂载点,base 包中是最基本的 Linux 系统文件, base-devel 包中包含了一些常用的开发工具,建议同时安装两个包。

6. 生成 fstab 文件

为了让系统能够在每次重启之后自动挂载各个分区(包括交换分区),我们需要把当前的分区挂载方式写入到一个叫做 fstab 的文件中去。执行下面的脚本命令,生成 Linux 系统需要的 fstab 文件:

genfstab -U -p /mnt >> /mnt/etc/fstab

记得检查 fstab 文件的内容,以确保万无一失。

more /mnt/etc/fstab

fstab 文件内容

7. 配置系统选项

因为还没有正确安装 Boot Loader,所以现在我们还不能重新启动系统。好在 Arch Linux 团队提供的 arch-chroot 工具可以让我们暂时登录到已经安装好的 Linux 系统中去开始系统配置。执行命令:

arch-chroot /mnt

注意提示符变为 sh-4.3#,我们已经成功登陆刚刚安装的 Arch Linux 系统,执行 ls -al 试试:

根目录下已经安装好的各个目录

下面首先对 Linux 系统的 locale (读作[ləʊˈkɑːl)进行配置。Linux 的 locale 文件中储存了与“本地化”相关的诸如时间格式、货币单位、语言编码之类的信息,通过 locale 配置,可以使 Linux 更符合我们的使用习惯。使用 nano 编辑/etc/locale.gen文件:

nano /etc/locale.gen

移除一行之前的 "#" 符号(即取消注释)来选择你需要的locale。我的选择是:

en_US.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8

包含了美语英文 UTF-8 编码,简体中文 GBK 与 UTF-8 编码,以及繁体中文的 UTF-8 编码。

使用 locale-gen 命令来生成 locale 信息:

locale-gen

创建 locale.conf 并选择要使用的本地化选项 (使用 echo xxx > yyy 的命令,可以把 echo 命令的输出内容即 xxx 重定向到 yyy 文件中去,这与使用 nano 编辑器对 yyy 文件进行编辑效果相同,只是更快捷):

echo LANG=en_US.UTF-8 > /etc/locale.conf

注意中文安装指导提醒:

不推荐在此设置任何中文locale,或导致tty乱码。

设定时区:

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置硬件时间为UTC模式,以免在时区和夏令时调整时产生错误(注意 systohc 和 utc 之前都是两个 "-" 符号):

hwclock —systohc —utc

设定主机名:

echo 你的主机名 > /etc/hostname

设置 root 密码:

passwd

从光盘启动的 Arch Linux 可以联网是因为启动光盘自动进行了网络配置。现在我们来为新系统进行网络配置。输入 ip a 命令,查看当前的网络连接,记下当前网络接口的名称:enp0s3

ip a

查看当前的网络连接

在网络配置目录中,创建 my_network 文件,拷贝 dhcp 样本文件的设置即可。

cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/my_network

修改 my_network 文件 Interface 字段,把当前网络接口的名称写入即可。


修改 Interface 为enp0s3

把 my_network 作为默认网络配置。

netctl enable my_network

8. 安装 Boot Loader

电脑开机之后,处理器会到固定的位置去读取磁盘内容,这个“固定的位置”一般就在磁盘的最开始位置。放在这个位置的软件,就叫做 Boot Loader,它的作用是为处理器指明操作系统的安装位置,使得处理器可以进一步的读取并执行操作系统。

下载 Grub Boot Loader,将其安装到 Arch Linux 被安装到的 硬盘中 (sda),然后生成启动所需要的 grub 文件。

pacman -S grub
grub-install --target=i386-pc --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

安装后的命令行输出如下所示:


安装 Grub Boot Loader 工具

下面从安装的 Linux 中退出,卸载刚才挂载的文件系统,然后关机。这样原始 Arch Linux 的安装就完成了。

exit
umount /mnt/boot
umount /mnt
poweroff

移除光盘镜像,重新启动系统:


移除 VBox 加载的光盘镜像

Tada... Welcome to bare bone Arch Linux!欢迎来到荒凉的无主之地。

重新启动,root 登陆

注:个人知识能力有限,难免有遗漏、错误的地方,欢迎大家通过评论与我交流。

参考资料

推荐阅读更多精彩内容