如何把Arch Linux装入一块移动硬盘

编程知识 更新时间:2023-04-30 05:22:28

Arch Linux 安装配置流程

文章目录

  • Arch Linux 安装配置流程
  • 1. 说明
  • 2. 准备工作——Arch Linux Live 制作过程
  • 3. Arch Linux 安装配置
    • 3.1 第一步:硬盘分区
    • 3.2 分区挂在
    • 3.3 安装基本系统
    • 3.4 配置系统
    • 3.5 使用`chroot`进行基本配置
    • 3.6 系统引导配置
      • 3.6.1 `Syslinux`
      • 3.6.2 GRUB
      • 3.6.3 小结
    • 3.7 退出&重启
  • 4. 小结
  • 参考链接

1. 说明

此流程用于在一块单独硬盘、USB存储设备中配置一个 Arch Linux系统。

为什么是Arch Linux?
我自己同时在使用的操作系统有很多,家里玩游戏的win10,去学校办公、敲代码的是Macbook Pro,学校电脑是Kubuntu(之前装过Manjaro被显卡驱动劝退了),实验设备都是树莓派(Raspberry Pi OS 和 Ubuntu Server 18.04-ROS Melodic)系统玩的多了就会发现一个问题,发行版操作系统的预装以及linux上python2的遗体问题很让人头疼。当然有办法卸载删除,但是总觉得很臃肿,而且永远的会留下隐患,特别是Python2的问题。我已经无数次被坑在ROS、PX4、Ardupilot 编译报错上了,8成的原因是Python多版本打架。所以就选了Arch,当然也是在尝试和学习,不过从零到1的过程很实用,而且一步一步只添加需要的软件这是最重要的。

为什么要写这个教程?
能找到的文字版教程不能满足我的需求,我需要一个可以随时带走的Arch Linux,既可以保护电脑原有系统不用做任何删除处理,又可以保证一旦安装失败不会造成额外的损失。搜了很多Arch安装在移动设备的教程。但这些教程真的太难用了,不是各种转载导致的教程不详细,就是利用虚拟机设备安装配置(对于一个拒绝虚拟机的人来说简直太痛苦了)。我又不想直接看wiki(wiki内容十分强大,但是你要耐心的把每一步看完并且对linux系统整个架构有一定了解才行)。下面这个教程相对于你一步步看wiki会简单粗暴的多,帮你把好多坑都太好了。

2. 准备工作——Arch Linux Live 制作过程

安装前准备:

  • Arch Linux 镜像文件 (Arch Linux Link)
  • 1 个usb 存储 ——用于制作Arch Linux Live
  • 1 个 硬盘或者USB存储设备(容量至少16GB,紧建议)
  • Arch wiki (学会用wiki好过其他的教程)

使用balenaEtcher或者其他的可以将iso镜像烧录在usb存储的软件

首推balenaEtcher Link 这个是开源免费的。另外提醒一句,一定要更新到最新的stable版,要不然烧录可能失败。

3步操作:1、选择镜像;2、选择USB存储; 3、烧录

3. Arch Linux 安装配置

将上一步中制作完成的Arch Linux Live USB 和准备装系统的硬盘连接电脑,Boot Menu中选择Arch Linux Live USB,选择第一个进入Arch Linux Live

3.1 第一步:硬盘分区

首先查看硬盘相关信息

 $ fdisk -l
  1. 找到用于安装arch的硬盘名字 一般为 /dev/sdX 注意: sdX可能是任意名字 完全取决于fdsik指令后打印的列表内容,下面均以sdX为例 
    说明:硬盘格式MBR或者GPT 需要进行二选一完全取决于之后以哪种方式进行启动;这里推荐GPT,后面配置允许此硬盘既可以UEFI,又可以Legacy启动。

  2. 硬盘扇区设置

$ dd if=/dev/zero of=/dev/sdX bs=1k count=2048
  1. 设置硬盘为GPT 注意:此处使用sgdisk指令,也可以fdisk分区,需要教程自行度娘
$ sgdisk -z /dev/sdX
$ sgdisk -o /dev/sdX 
  1. 设置分区
$ sgdisk -n 1:0:409600        #创建一个200M分区 挂在/boot 用于启动
$ sgdisk -n 2:409601:17186817 #创建一个SWAP分区 这里大小为8G 根据需要自行修改
$ sgdisk -n 3:17186818:-0     #创建一个文件跟目录分区 挂在/
  1. 对分区进行格式化 注意:sdX1代表刚才的分区方式
$ mkfs.fat -F32 /dev/sdX1 #第一个分区设置为FAT32格式 即UEFI必须的ESP
$ mkfs.swap /dev/sdX2     #第二个分区是SWAP交换空间
$ mkfs.ext4 /dev/sdX3     #第三个分区是Linux的文件分区 ext4

3.2 分区挂在

将对应分区进行挂载

$ mount /dev/sdX3 /mnt      #挂载根目录
$ mkdir /mnt/boot/efi       #创建引导目录
$ mount /dev/sdX1 /mnt/boot #挂载引导分区
$ swapon /dev/sdX2          #挂载swap空间

3.3 安装基本系统

$ pacstrap /mnt base 
# 其他的包——推荐一下 直接添加到 base 后面即可
linux linux-firmware base-devel nano dialog git sudo 
# hostname
inetutils 
# 网络管理
dhcpcd wpa_supplicant

说明:最简化的只需要 base ,后面可以根据自己需要添加修改。比如不用nano,用vi 就可以直接添加vi而不写nano。 下面是官方wiki对base的解释

3.4 配置系统

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

3.5 使用chroot进行基本配置

chroot是超级用户权限 相当于系统开发商,使用chroot以后算是正式进入硬盘开始配置你的专属arch了。

$ arch-chroot /mnt

# 开始

# 设置 root 的密码
$ passwd
 
#设置时区
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#本地化
$ cd /etc
$ locale-gen 
$ nano /etc/locale.conf #如果是vi 就运行 vi /etc/locale.conf
## 添加 这里暂时都设置为英文,可以设置中文但是容易导致后续出错,后续可再更改
LANG=en_US.UTF-8
# LC_CTYPE= en_US.UTF-8 # 此处可不添加,如果之后安装了sublime text安装后运行软件会提示你需要设置 LC_CTYPE
## 键盘布局
$ nano /etc/vconsole.conf
KEYMAP=de-latin1

#设置主机名
$ nano /etc/hostname
myhostname(主机名)

$ nano /etc/hosts
127.0.0.1	localhost
::1		localhost
127.0.1.1	myhostname.localdomain	myhostname # 主机名.本地域名 主机名

# Initramfs
$ mkinitcpio -p linux # 如果报错 请检查/xxxx/linuxxx

# 有线网络设置
$ systemctl enable dhcpcd

#普通用户的添加
$ useradd -m -G wheel -s /bin/bash [username]
$ passwd [username]
$ nano /etc/sudoers
# 去掉下面这行#符号
 #%wheel ALL=(ALL) ALL
# 并在 root ALL=(ALL:ALL) ALL这行下面添加
[username] ALL=(ALL:ALL) ALL

3.6 系统引导配置

此处很关键,可选的有很多,需要的看wiki [Arch boot process (简体中文)]

推荐Clover,GRUB,Syslinux。Clover 就不用说了,黑苹果首推clover引导。GRUB最常见的引导方式,兼容性最好的选择。Syslinux 有较好的兼容性。这里我只需要对syslinux和GRUB进行二选一,其他的请自行移步wiki。

3.6.1 Syslinux

#安装syslinux
$ pacman -S syslinux
  1. 启动流程

下图为官方wiki对启动流程的描述,具体过程可理解可不理解,但是通过官方描述检查对应引导文件夹中是否缺失必要的启动的文件

必要文件列表:

  • mbr.bin / gptmbr.bin
  • ldlinux.sys
  • ldlinux.c32
  • syslinux.cfg / extlinux.conf
  • lib*.c32*.c32
  1. Legacy 启动
#BIOS 配置
$ mkdir /boot/syslinux
$ cp -r /usr/lib/syslinux/bios/* /boot/syslinux/

$ sgdisk /dev/sdX1 --attributes=1:set:2
$ sgdisk /dev/sdX1 --attributes=1:show
------------------------------------
1:2:1 (legacy BIOS bootable)

$ dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/gptmbr.bin of=/dev/sdX

$ extlinux --install /boot/syslinux

$ nano /boot/syslinux/syslinux.conf
  1. UEFI 启动
$ mkdir -p /boot/EFI/syslinux
$ cp -r /usr/lib/syslinux/efi64/* /boot/EFI/syslinux/

$ cd /boot/EFI
$ mv syslinux boot
$ cd boot
$ mv syslinux.efi bootx64.efi

$ nano /boot/syslinux/syslinux.conf
  1. 配置文件设置
* BIOS: /boot/syslinux/syslinux.cfg
* UEFI: esp/EFI/syslinux/syslinux.cfg
--------------------------------------------------------------------------------------
UI menu.c32
# UI vesamenu.c32
PROMPT 50

DEFAULT arch
MENU TITLE Boot Menu
# MENU BACKGROUND splash.png 图片link(https://gitlab.archlinux/archlinux/archiso/-/tree/master/configs/releng/syslinux/splash.png)
TIMEOUT 50

MENU RESOLUTION 800 600 # 万用分辨率
MENU WIDTH 78           
MENU VSHIFT 10         
MENU HSHIFT 10          

MENU MARGIN 4
MENU ROWS 5
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29

# Refer to https://wiki.syslinux/wiki/index.php/Comboot/menu.c32

MENU COLOR border       30;44   #40ffffff #a0000000 std
MENU COLOR title        1;36;44 #9033ccff #a0000000 std
MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel        37;44   #50ffffff #a0000000 std
MENU COLOR help         37;40   #c0ffffff #a0000000 std
MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07        37;40   #90ffffff #a0000000 std
MENU COLOR tabmsg       31;40   #30ffffff #00000000 std

#注意:对每一个 LABEL 记录, APPEND 命令只能出现在一行内(就是说,把命令拆分成多行是无效的)。
LABEL arch
	LINUX ../vmlinuz-linux
	APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw #此处强烈建议用UUID 这样不会报错
	INITRD ../initramfs-linux.img

LABEL archfallback
	LINUX ../vmlinuz-linux
	APPEND root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw
	INITRD ../initramfs-linux-fallback.img

...
LABEL windows
	MENU LABEL Windows
	COM32 chain.c32
	APPEND mbr:0xffffffff #0xffffffff 通过指令fdisk -l 中widows 硬盘中Disk identifier 中的信息进行更改
...
#内存测试
...
LABEL memtest
	MENU LABEL Memtest86+
	LINUX ../memtest86+/memtest.bin
...
#硬盘检测工具
LABEL hdt
	MENU LABEL Hardware Info
	COM32 hdt.c32
#保证对应的syslinux文件夹下包含多有的*.c32和lib*.c32文件
#需要显示PCI总线信息,将 /usr/share/hwdata/pci.ids 复制到 */syslinux/pci.ids

LABEL reboot
	MENU LABEL Reboot
	COM32 reboot.c32

LABEL poweroff
	MENU LABEL Power Off
	COM32 poweroff.c32

MENU CLEAR #当退出时清空屏幕

以上的大部分人可能会用到的配置,其他的配置请参考wiki [Syslinux (简体中文)]

3.6.2 GRUB

GRUB全称 是GRand Unified Bootloader。 这里指的 GRUB 其实是 GRUB 2 并不是GRUB Legacy, GRUB Legacy不支持 UEFI启动。

  1. 首先安装grub 和 efibootmgr
$ pacman -S grub efibootmgr
  1. 安装grub
$ grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=Arch

注意 此处esp 应该是 /dev/sdX1 具体根据你自己的盘进行修改
3. 生成配置文件

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

说明 如果需要多系统请参考wiki中的配置说明。GRUB WIKI

因为我的移动硬盘同时装了4个linux(后续会发文章,(链接坑)) 所以我在对每个linux的gurb的默认文件进行了修改 每个linux的grub默认文件都在 /etc/default/grub 中,具体更改了两项:

GRUB_DEFAULT="6>7" #此处数字标示次Linux相关选项在grub列表中的位置

GRUB_CMDLINE_LINUX_DEFAULT="text" #默认一般为quiet splash即不打印启动信息,使用过场动画,此处可以不修改 但是如果第一次启动出现问题或者卡黑屏了你就什么错误信息就都不知道了 

另外 grub.cfg这个文件不建议第一尝试的人手动修改,一旦改错 对应启动选项就不可用了。如果你是高手,修改完保存后别忘了运行 sudo update-grub

3.6.3 小结

目前使用syslinux进行了BIOS 测试完全没有问题,GRUB 之安装了UEFI测试完全没问题。

3.7 退出&重启

完成以上配置以后,你已经拥有了一个带引导的Arch Linux。

$ exit # 退出chroot
$ umount -R /mnt # 卸载之前挂在的目录
$ reboot

最基本的配置已经完成了。之后就可以重启,从boot menu中启动你的Arch Linux了。

4. 小结

下一篇将讲述如何自定义桌面环境以及一些基础软件推荐。

参考链接

  1. https://wiki.archlinux/title/Install_Arch_Linux_on_a_removable_medium
  2. https://vhernando.github.io/archlinux-install-usb-from-debian-existing-linux
  3. https://gist.github/elerch/678941eb670324ffc3f261eabba81310

更多推荐

如何把Arch Linux装入一块移动硬盘

本文发布于:2023-04-22 11:53:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/1d676aa5c97980ae09d18851bd290393.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:移动硬盘   Arch   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 95909文章数
  • 24250阅读数
  • 0评论数