惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

纸鹿摸鱼处

北京实习300天 | 纸鹿摸鱼处 实习后买了一堆东西 | 纸鹿摸鱼处 谈谈不受欢迎的博客技术特征 | 纸鹿摸鱼处 我们的设备被拿来做了什么:软件的背景行为 | 纸鹿摸鱼处 生成式AI正在生成 | 纸鹿摸鱼处 前端字体二三事 | 纸鹿摸鱼处 深色模式开发的最佳实践 | 纸鹿摸鱼处 寻不回手工油糕 | 纸鹿摸鱼处 一些数码外设的评价和“捡垃圾”心得 | 纸鹿摸鱼处 朋友的 Vivado 和 Modelsim 装上了吗 | 纸鹿摸鱼处 迟到三月的年末博客杂谈:动力、文章和内容 | 纸鹿摸鱼处 VitePress 不完全优化指南 | 纸鹿摸鱼处 给电脑新手的笔记本开荒指南导读 | 纸鹿摸鱼处 再谈考试时钟:技术之外的思考 | 纸鹿摸鱼处 今日校园见闻:我已经出离高兴了 | 纸鹿摸鱼处 配置并差点运行不了 Java Applet | 纸鹿摸鱼处 Windows 上的开源软件入门 | 纸鹿摸鱼处 博客进化:从 Hexo 到 Nuxt Content | 纸鹿摸鱼处 祖母的90年代南昌差旅之险 | 纸鹿摸鱼处 Linux 下通过 Samba 共享文件夹 | 纸鹿摸鱼处 从“端口无法访问”到本地环境问题——朋友的博客踩坑记录 | 纸鹿摸鱼处 Windows 空间管理/清理指南 | 纸鹿摸鱼处 遭遇APP乱象:老人的「钱袋子」开线了 | 纸鹿摸鱼处 封面被 Linux QQ 官方用了,但是有一些小缺陷 | 纸鹿摸鱼处 Windows 终端体验优化指南 | 纸鹿摸鱼处 有问题,就要讲出来。 | 纸鹿摸鱼处 从 CSS 排序折腾到 Stylelint 和 pnpm | 纸鹿摸鱼处 使用 DOSBox 的多种方式 | 纸鹿摸鱼处 今日有「假」 | 纸鹿摸鱼处 把博客文章按年份放在子文件夹中了 | 纸鹿摸鱼处
Arch Linux 启动引导修复 | 纸鹿摸鱼处
纸鹿本鹿, hi@zhilu.cyou · 2024-04-01 · via 纸鹿摸鱼处

可以修复绝大多数 Arch Linux 无法启动的问题。

制作启动盘、进入并联网

参见 使用 ArchInstall 安装 Arch Linux 的“安装前准备”一节。

挂载分区、进入系统

  • 如果不了解你的硬盘分区,可以执行以下命令: #

    lsblk -f

  • 先挂载根目录所在的分区:
    • 非 BtrFS 分区 #

      mount /dev/[根分区] /mnt

    • 如果根分区使用 BtrFS,需要知道子卷名,如果没有子卷可以跳过此步
      • 可以通过先挂载 BtrFS,然后通过以下命令之一查看子卷名 #

        ls /mnt

        #

        btrfs subvolume list /[挂载点]

      • 随后解除 /mnt 的挂载并重新挂载对应的子卷 #

        umount /mnt

        #

        mount /dev/[根分区] -t btrfs -o subvol=[子卷名] /mnt

  • 随后挂载其他分区:
    • 挂载启动分区 #

      mount /dev/[启动分区] /mnt/boot

    • 查看先前的挂载方式,有助于你的回忆 #

      cat /mnt/etc/fstab

    • 如果回忆起有其他分区,请继续挂载
  • 可以将此时的挂载方式写入原系统: #

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

  • 随后就可以进入原系统了 #

    arch-chroot /mnt

修复一些可能导致无法进入的问题

  • 如果忘记 root 用户密码,可以执行以下命令: #

    passwd

  • 同时,还可以更新一下系统的软件包,说不定有用呢#

    pacman -Syyuu

    • 如果更新缓慢,可以换源
    #

    pacman -S reflector

    #

    reflector --verbose --country China --sort rate --save /etc/pacman.d/mirrorlist

    • 如果提醒无法锁定数据库,可以删除锁文件
    #

    rm /var/lib/pacman/db.lck

    • 如果提醒某文件已存在,可以强制覆盖
    #

    pacman -Syu --overwrite "*"

修复引导

  • 安装 Linux 包可以触发 mkinitcpio #

    pacman -S linux

  • 如果使用 systemd-boot,请执行以下命令 #

    bootctl install

    • 使用此命令检测 EFI 引导项和 Boot Loader 配置
    #

    bootctl list

    • 如果屏幕显示不全,可以使用交互模式,按 q 退出
    #

    bootctl

  • 如果使用 grub,请执行以下命令 #

    grub-install

    • 备用命令,也可以自行在网上搜索
    #

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

为 systemd-boot 添加引导项

如果 bootctl list 显示没有 Arch Linux,那么需要写入以下文件:

/boot/loader/entries/arch.confsh
title   Arch Linux (linux)
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=PARTUUID=692afe0d-e1d7-4e0f-970f-1ed04e0c07e9 zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs

请注意:

  1. PARTUUID 和 UUID 不同,lsblk -f 命令显示的是 UUID,你可以通过 lsblk -o+UUID,PARTUUID 发现两者的区别。
    • 查看 PARTUUID 并追加到文件中 #

      blkid -s PARTUUID -o value /dev/[根分区] >> /boot/loader/entries/arch.conf

    • 查看 UUID 并追加到文件中,需要 option 中使用 root=UUID=#

      blkid -s UUID -o value /dev/[根分区] >> /boot/loader/entries/arch.conf

  2. initrd 中需要添加对应 CPU 的微码,没有的话可以跳过。
  3. options 中设置合适的 rootfstyperootflags,有子卷时需要设置 rootflags=subvol=[子卷名]

重启

按 Ctrl+Alt+Delete 直接重启。

更规范的方式是输入 exit 或按 Ctrl+D 退出 chroot 环境,然后执行 reboot 命令重启。