情况:依旧是好久没有滚Arch 所以真的要养成良好的更新习惯,然后出现了依赖冲突,导致icu未能更新,以至于报以下错误:

pacman:error while loading shared libraries: libicuuc.so.76:cannot open shared object file :no such file or directory

接下来是,pacman输出各种error,后来系统终端与软件等卡死

P.S.其实这个时候应该还能进入tty尝试修复,但当时以为是其他原因(卡键等)选择重启系统,然后迎来了kernel panic ……

解决:重装内核以修复

  1. 插u盘(以前装系统搞的Ventoy刻录盘),进live系统,挂载受损的系统

    1
    2
    3
    # 查看磁盘情况
    lsblknvme1n1p1nvme1n1p1
    fdisk -l
  2. 进入系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 如果有两个盘一定要先执行上面命令查看一下,注意分辨磁盘设备号:
    设备 起点 末尾 扇区 大小 类型
    /dev/nvme0n1p1 …… …… …… …… EFI 系统
    /dev/nvme0n1p2 …… …… …… …… Microsoft 保留
    /dev/nvme0n1p3 …… …… …… …… Microsoft 基本数据
    /dev/nvme0n1p4 …… …… …… …… Microsoft 基本数据
    /dev/nvme0n1p5 …… …… …… …… Windows 恢复环境

    设备 起点 末尾 扇区 大小 类型
    /dev/nvme1n1p1 …… …… …… …… Microsoft 保留
    /dev/nvme1n1p2 …… …… …… …… Microsoft 基本数据
    /dev/nvme1n1p3 …… …… …… …… EFI 系统
    /dev/nvme1n1p4 …… …… …… …… Linux swap
    /dev/nvme1n1p5 …… …… …… …… Linux 文件系统

    这里的设备号nvme0n1p1与nvme1n1p1可能相互会变,如果挂载错误可能破坏分区数据(比如装Linux系统的时候把原来的windows系统分区格式化了)

  3. 挂载分区

    先前安装系统参考的是 ArchLinux简明指南,所以这里挂载也一样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # /dev/nvme1n1p3 是/boot启动目录
    # /dev/nvme1n1p4 是/swap交换分区目录
    # /dev/nvme1n1p5 是/根目录
    mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme1n1p5 /mnt # 挂载 / 目录
    mkdir /mnt/home # 创建 /home 目录
    mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvme1n1p5 /mnt/home # 挂载 /home 目录
    mkdir -p /mnt/boot # 创建 /boot 目录
    mount /dev/nvme1n1p3 /mnt/boot # 挂载 /boot 目录
    swapon /dev/nvme1n1p4 # 挂载交换分区

    df -h # 查看挂载情况
  4. 进入受损的硬盘系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    arch-chroot /mnt

    # 查看内核是否存在
    ls /boot
    # 没有的话需要重装内核
    pacman -S linux # 我的是linux-zen

    # 更新grub配置,重新生成引导区
    grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
    grub-mkconfig -o /boot/grub/grub.cfg

    # 回到live系统
    exit

    # 重新生成分区挂载配置文件
    rm -rf /mnt/etc/fstab
    genfstab -U /mnt >> /mnt/etc/fstab

    # 关机重启
    reboot
  5. 解决依赖冲突

    上面是一般情况下内核受损重装修复内核,但是这次原因略有不同,见[ICU 76.1.1 Issue]

    由于是icuelectron等的依赖冲突所以按照上述方式进入受损的硬盘系统使用pacmanyay命令依旧会出现如下报错:

    pacman:error while loading shared libraries: libicuuc.so.76:cannot open shared object file :no such file or directory

    必须先更新好icu才可以(pacman依赖于icu

    所以需要在外部live系统使用pacman或者pacstrap命令进行更新

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 更新icu
    pacman -r /mnt -S icu
    # 或使用 pacstrap /mnt icu
    # 可能需要删除或替换冲突包 如electron可以换成electron-bin不与icu冲突
    pacman -r /mnt -Rns xxx
    # 或使用 pacstrap /mnt icu
    # 更新完icu后可以再进入硬盘系统完整更新一遍修复内核
    arch-chroot /mnt
    pacman -Syu
  6. 其他

    • 修复全程连接网线,如果只有wifi连接详见 ArchLinux简明指南
    • 天选笔记本的bios是开机按F2键进入的(进入改变启动顺序进live系统)
    • 没找到electron33-bin(obsidian依赖需要),但是后来重装没有再冲突报错