Skip to content

2024.4.6,记录一次安装Archlinux to go的经历

1.踩坑的全过程

20岁生日买了台Redmibook Pro 14(32G+1T Ultra5 125H),正巧碰上清明节假期(不能说正巧吧,我就是清明节出生的,我的生日礼物一直都有足够的时间让我鼓捣,因为清明节永远都有假😝),花了两天彻底搞定了系统的各种功能(桌面/声音/输入法/中文字体……),本来下午应该高枕无忧写会代码啥的……

我看着这个U盘起了邪念……

我只听说过win to go,还没听说过谁装过Archlinux to go……嘿嘿……

别想逃!

本来是作为启动盘的,所以里面有一个Archlinux liveCD,理论上把这个东西系统分区扩大一点就是可以当Archlinux to go的,但是我看了一眼分区表我傻了

dev/sda1共900M,是个“空白”分区,文件系统是iso9660,这也是文件系统我是真没想到,这tm明明是国际标准化组织的xx标准么这不是?

具体作用好像是类似数字签名那种,反正我也不太懂……

/dev/sda2,共15M标记了EFI分区,这没的说,这是启动引导;

然后……没了??剩下的都是free space了??主分区没了??这根目录挂载在哪里了??

当时系统镜像那么大,合着这全他妈是数字签名???

但是我在liveCD里pwd是有实实在在的根目录和usr巴拉巴拉子目录的😭,好吧我得承认这个东西给我搞糊涂了……看来想用free space扩充对应分区这个方法是肯定行不通了。

没事,还有Plan B,不如直接利用liveCD在剩下的free space里装一个完整的Arch,然后把liveCD分区删除格式化成exfat甚至还能保留一点U盘功能,完美!

有经验的人看到这估计已经发现问题所在了,装系统有一步是挂载,得把那个要装系统的盘的分区挂载到liveCD的/mnt分区,谁家自己挂载自己????把/dev/sda3挂到/dev/sda2/mnt,这不让人笑掉大牙么?但凡自己能挂自己,我在分区末端刻录一个启动盘UEFI启动进入以后再在前面的分区里装系统然后把启动盘分区去掉,这么说天下装双系统的都不需要U盘刻启动盘了,笑得想死!

孩子们这并不好笑,因为某个傻子以为U盘有坏块挂不上去还检查了半天后来才反应过来。所以PlanB也寄了。

不过这也没事,我还有planC!也就是用现成linux给U盘装系统。于是我打开昨天新装的系统,用cfdisk把U盘的谜语分区全扬了,分了一个512G的EFI分区,一个50G系统分区,一个7.7G留着存文件(期间手贱输入了mkfs.ntfs /dev/sda3,没想到arch还真有这条指令格式化为ntfs,但是巨他妈卡,执行了20多分钟还不让我Ctrl+C打断,气的我当场脑溢血,从未如此真切的感受到IO瓶颈)然后我把1分区格式化为fat32,2分区格式化为ext4(别问我为啥不用btrfs和zfs,我懒)

一切顺利,中间出了点插曲(locale-gen让我写成了locale.gen半天才发现),平稳的来到最后一步,做完开机引导就可以宣告成功了。

grub-install以后,接grub-mkconfig,美滋滋的退出arch-chroot,关机狂按F12,选择启动项……

等会等会,我自己电脑上的Arch的GRUB启动项没了??🤯

草!白忙活了,u盘不够,还得把这个U盘重新烧录成一个启动盘去救电脑😭,后边就不说了,arch-chroot重新执行grub那两条……

(这个是个很严重的问题,后文会补充解决方案以及完整的安装命令)

没事,反正没有数据,只是花了点时间,不过这个新笔记本的linux我花了2天才配好,我可不想把这个linux不小心扬了啥的,这个时间量我只能说浪费了我会原地裂开😭,于是掏出天选三,启动了n多年没启动的archlinux,本来分区都爆满了,我不得不先删除了一些开发软件才能正常使用。我把U盘上的分区都扬了,按照512M/50G/7.7G的顺序分别将三个分区格式化为fat32,ext4,exfat,不出意外的话又要出意外了,mkfs.ext4命令说我格式化的区域超级块有问题😫

说实在的我对文件系统了解真不多,我只是知道ext4有什么journal和superblock的概念,但是让我仔细说都是干啥的我也不知道捏……我尝试着格式化成ext3,反正这东西USB的IO才是大瓶颈,文件系统那点性能提升对整体IO提升不大,也不是不能接受,我就正常用了pacstrap脚本,结果到后边又说又文件损坏,安装失败,我更迷糊了,一度以为U盘因为高强度读写G了😥

我有点想放弃了,所以我就想着把分区都扬了,去win都格式化成exfat算了(如果还能的话)。嘿!你还别说,win把整个U盘都格式化成exfat了,完全没报错。这个时候我就有所察觉了,有可能是因为那个天选的arch内核由于半年没更新太老了,导致里边那个dosfstools包的mkfs和新电脑新内核的那个有差异且不能兼容,于是我果断继续用新电脑分三个分区然后再格式化,果真全成功了。

完结撒花!!!

回头去bbs查了一下,在移动介质里装系统时grub-install必须补充参数--removable,否则会卸删原根目录boot的EFI,原因未知,可能和环境有关(本来装机是应该是liveCD环境,而我用的是一个完整的发行版)。

接下来都是常规操作了,但值得一提的是我装了networkmanager以后拔下来插天选上开机时nmcli能检测到无线网卡,但是没法调用,估计是缺少驱动,但是这种to go的系统除非有通用驱动,否则装驱动意义不大。有线以太网正常,我开了手机USB网络共享以后插电脑上完全可用,实际情况插根网线就行。

我尝试装一手桌面环境,装了一个xfce4,然后装了个sddm,输入sddm启动以后屏幕突然黑了,我一度以为系统炸了,一分钟以后登录界面出来了,我输入密码又卡住了,一分钟以后出现一个超时。意料之中吧,这么菜鸡的IO直接启动桌面得了,别难为他了。

然后startxfce4,卡了一分钟以后出现了画面,我随便点点屏幕上的元素,没一个能加载出来的……一分钟以后终端的窗口出来了,我真是服了这读写速度了,笑死人不偿命级别了已经😂

换一个新的tty以后我fastfetch一下,我是第一次见到fastfetch还能卡住的,这可是C写的…….只能说读写背大锅。

除了学校实验室没见过这么小的硬盘,富哥内存都能都比这盘大(悲😔 至此我做出了一个完整的Archlinux to go,存储介质是一个Kioxia 64G USB 3.2gen1 U盘,不得不说还是挺好玩的。但是5Gbps和正经八百的PCIE4.0*4动辄64Gbps的超高速度是真的比不了……

至于这东西的用途,最起码能救一下滚崩了的Arch吧?感觉像在玩树莓派🤔

这么个小东西装了一个完整的发行版,不是很酷么?

2.Archlinux to go安装指北

1.找一台能用的Archlinux机器……

如果找不到还是别尝试装Archlinux to go了,还是先练练手把系统装好吧…… 安装系统的官方文档点这里

找到机器以后,安装装系统所需包,记得联网

bash
sudo pacman -S dosfstools arch-install-scripts

dosfstools包是提供了更为完整的格式化工具(即mkfs.vfat这种),arch-install-scripts则是为了使用安装脚本pacstrap给指定根目录安装某些包。

2.分区与格式化

从这里开始,将所有的/dev/sdx替换成你想装系统的U盘,将所有的/dev/root_partition替换为你想要安装系统的根分区,将所有的/dev/efi_partition替换为你想要安装引导的分区。

最少需要两个分区,EFI系统分区推荐至少512M。

为了接下来执行指令时方便,我们先进入root环境

bash
su

然后执行

bash
fdisk -l

查看自己的硬盘状况和分区状况,U盘一般都是叫做/dev/sdx,千万不要格错盘,数据无价请多加小心!

至于修改分区,我这里强烈推荐使用cfdisk,因为他有TUI,用起来很方便很直观,最后不要忘记写入分区。我这里就以两个分区为例。

bash
cfdisk /dev/sdx

先删除U盘原有的分区,然后选择free space,new一下,大小为512M作为EFI系统分区,然后选择primary,选择分区类型为EFI系统分区

然后再选择剩下的free space,new一下,大小剩多少用多少(或者按照你的个人喜好酌量选择),然后选择primary,分区类型为Linux

最后write,输入yes,写入成功,不放心可以fdisk -l确认一下。

紧接着格式化分区:

bash
mkfs.ext4 /dev/root_partition
mkfs.fat -F 32 /dev/efi_partition

3.挂载分区

WARNING

挂载分区有顺序,必须先挂载根分区再挂载EFI分区

bash
mount /dev/root_partition /mnt
mount --mkdir /dev/efi_partition /mnt/boot

4.选择镜像源并开始安装系统

如果这是台老机子我估计镜像源都配置好了,但是我还是说一下吧

bash
/etc/pacman.d/mirrorlist
---
在Server段落最前面添加
Server = https://mirror.nju.edu.cn/archlinux/$repo/os/$arch

最近刚发现南京大学的镜像源也不错,北外和清华的tuna都开始限流了,有时候很慢

顺带一提,你的etc/pacman.d/mirrorlist会被写入到新系统的etc/pacman.d/mirrorlist,所以源一定要选好

然后使用脚本开始安装系统

bash
pacstrap -K /mnt base linux linux-firmware networkmanager nano(或者vim,取决于你)

这部分可能会有点卡,多等一会,U盘的读写速度你也不是不知道

4.配置新系统

生成fstab文件,设置UUID和卷标

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

再检查下文件是否正确

bash
cat /mnt/etc/fstab

切换根目录,注意用arch-chroot不是chroot

bash
arch-chroot /mnt

设置时区,并生成/etc/adjtime

bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

本地化设置 打开/etc/locale.gen,取消en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8的注释,执行

bash
locale-gen

创建文件编辑设定LANG变量,不建议设置成中文,可能会导致ttf上显示为中文导致满屏方块

bash
/etc/locale.info
---
LANG=en_US.UTF-8

配置网络,创建hostname文件

DANGER

这一步极其重要,没有这一步可能会导致无法上网(缺少主机名),不过可以通过arch-chroot重新配置

bash
/etc/hostname
---
yourhostname

yourhostname替换为你的主机名

设置root的密码

bash
passwd

5.安装启动引导

DANGER

这一步是最后一步,也是至关重要的一步,因为配置失败会导致无法进入系统前功尽弃,所以一定要配置好!

安装grub和efibootmgr

bash
pacman -S grub efibootmgr

添加GRUB到固件启动管理器

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

最后这个--removable参数极其重要!在liveCD环境下装系统的时候没事,但是在用一台装了完整发行版的机器给另一个硬盘装系统时,会导致机器本身的GRUB被efibootmgr认为是无用的条目而被删除!千万不能缺!

生成启动引导配置文件

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

基本的安装到这里就结束了,输入

bash
exit

退出arch-chroot环境,然后

bash
umount /mnt/boot
umount /mnt

解挂U盘分区,这时候就可以拔出U盘了

6.进入系统

插入U盘,重启电脑,在开机时按F12(有的电脑是ESC,都试试就知道了)进入选择启动项界面,选择含有U盘名称的那个UEFI启动选项,然后等待一会(读写缓慢,可能很卡,但是千万别手贱拔掉U盘!

等到出现了登陆提示 输入用户名root和上文配置的密码,登陆系统。

  • 如果选择使用有线网,可以使用网线,也可以用手机开USB网络共享以后插电脑上,前文装过networkmanager,所以是可以用的,可能需要启动一下
bash
systemctl start NetworkManager.service #启动服务
systemctl enable NetworkManager.service #顺手加个开机自启
ping baidu.com #测试网络
  • 如果选择使用无线网,我们启动networkmanager以后推荐使用nmtui,因为这个是TUI界面
bash
systemctl start NetworkManager.service #启动服务
systemctl enable NetworkManager.service #顺手加个开机自启
nmtui  #选择网络输入密码即可退出
ping baidu.com #测试网络

添加用户

bash
useradd -m username
passwd username

username替换为你的用户名

打开sudoers文件,在root ALL=(ALL:ALL) ALL后面按照如下格式把你的用户名加进去

bash
/etc/sudoers
---
username ALL=(ALL:ALL) ALL

输入exit退出root账户,输入你的username和密码,登陆用户账户。

恭喜你,配置完毕!这是个完整的linux发行版,你可以开始用了!

不过要注意的是这个系统关机开机都非常慢,千万别急着拔U盘,可能拔了就用不了了,耐心等待即可。

7.安装桌面(可选,不推荐)

对于轻量级系统只能用轻量级桌面了,本人是KDE忠实用户,不过KDE在这肯定不行,所以咱装个xfce4算了

bash
sudo pacman -S xfce4 sddm

安装完成以后千万别sddm直接上,大概率会卡住然后显示连接超时,我们用桌面的时候最好手动启动

bash
startxfce4

但是这依旧非常卡,而且桌面上的元素一点一个没反应,我点了个终端硬是一分钟才出来,我实在是想不明白这东西有啥用,所以还是不推荐大家给这个Archlinux to go装桌面环境了。 如果卡住了没法关机千万别急着拔U盘,按Ctrl+Alt+F1~F6进入tty,在tty里登陆后再关机即可。

到这里这个Archlinux to go安装指北就结束了。觉得好玩赶紧去试一试,与其说这个很难不如说这东西很费时间,安装的时候慢,开机关机慢,读取慢写入也慢,不过快起来就闹鬼了,这tm是个U盘,不是固态硬盘!回头我买个稍微好点的U盘看看怎么个事~