如题。安装的是windows+arch双系统,安装arch时直接把windows的efi分区挂载到/boot分区了。查阅wiki得知有两种方案:
但是说得好简略,我又怕不小心把引导搞崩导致进不了系统。所以,请问具体该怎么做啊?
具体情况:Arch的EFI系统分区挂载到了/boot,根目录使用btrf文件系统,配置了全盘加密,没有加密/boot
如题。安装的是windows+arch双系统,安装arch时直接把windows的efi分区挂载到/boot分区了。查阅wiki得知有两种方案:
但是说得好简略,我又怕不小心把引导搞崩导致进不了系统。所以,请问具体该怎么做啊?
具体情况:Arch的EFI系统分区挂载到了/boot,根目录使用btrf文件系统,配置了全盘加密,没有加密/boot
你的/boot分了多大呀?能不能删点文件,比如fallback initramfs?
你的initramfs好大啊——nvidia?
bootloader 是 systemd-boot 的話,我就是這麼用的。
分區表:
❯ LANG=C.UTF-8 sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WDS100T1X0E-00AFY0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B633440A-D45A-446C-BEB4-2FDBB873A774
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 206847 204800 100M EFI System
/dev/nvme0n1p2 206848 239615 32768 16M Microsoft reserved
/dev/nvme0n1p3 239616 841564159 841324544 401.2G Microsoft basic data
/dev/nvme0n1p4 841564160 845758463 4194304 2G Linux extended boot
/dev/nvme0n1p5 845758464 1919500287 1073741824 512G Linux filesystem
/dev/nvme0n1p6 1919500288 1951475711 31975424 15.2G Linux swap
/dev/nvme0n1p8 1951475712 1953523711 2048000 1000M Windows recovery environment
p1是 ESP ,p2 p3 p8 是 win 的分區,p4 是 XBOOTLDR ,p5 (和 nvme1n1 一起加在一個 btrfs 裏面) 是 Linux 根分區,p6 是 Linux swap 。
❯ findmnt --real
TARGET SOURCE FSTYPE OPTIONS
/ /dev/nvme1n1[/current/root] btrfs rw,noatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=257,subvol=/current/root
├─/home /dev/nvme1n1[/current/home] btrfs rw,noatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=258,subvol=/current/home
│ └─/home/farseerfc/.local/share/Steam /dev/nvme1n1[/current/steam] btrfs rw,noatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=1243,subvol=/current/steam
├─/var/lib/archbuild /dev/nvme1n1[/current/archbuild] btrfs rw,noatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=260,subvol=/current/archbuild
├─/var/cache/pacman/pkg /dev/nvme1n1[/current/pkg] btrfs rw,noatime,compress=zstd:3,ssd,discard=async,space_cache=v2,subvolid=259,subvol=/current/pkg
├─/efi /dev/nvme0n1p1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro
└─/boot /dev/nvme0n1p4 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro
然後p1 (ESP) 掛 /efi ,p4(XBOOTLDR) 掛 /boot
ESP 裏面放 bootloader:
❯ tree -L3 /efi
/efi
├── EFI
│ ├── Boot
│ │ └── bootx64.efi
│ ├── Linux
│ ├── Microsoft
│ │ ├── Boot
│ │ └── Recovery
│ └── systemd
│ └── systemd-bootx64.efi
├── loader
│ ├── entries
│ ├── loader.conf
│ └── random-seed
└── System Volume Information
├── AadRecoveryPasswordDelete
└── ClientRecoveryPasswordRotation
systemd-boot 的 efi 可執行文件和 loader.conf 在裏面。
/boot 就放別的啥的和 systemd-boot 的 entries
❯ tree /boot
/boot
├── amd-ucode.img
├── initramfs-linux-fallback.img
├── initramfs-linux.img
├── initramfs-linux-lts-fallback.img
├── initramfs-linux-lts.img
├── initramfs-linux-zen-fallback.img
├── initramfs-linux-zen.img
├── loader
│ ├── entries
│ │ ├── arch-linux.conf
│ │ ├── arch-linux-fallback.conf
│ │ ├── arch-linux-lts.conf
│ │ ├── arch-linux-lts-fallback.conf
│ │ ├── arch-linux-zen.conf
│ │ └── arch-linux-zen-fallback.conf
│ ├── entries.srel
│ └── random-seed
├── vmlinuz-linux
├── vmlinuz-linux-lts
└── vmlinuz-linux-zen
电脑里有一张nvidia的显卡,刚装完arch时EFI分区就是几乎爆满的状态
只需要这样挂载的话,引导程序就会自动识别到吗?
systemd-boot 是會把 XBOOTLDR 的東西當作是 ESP 裏的東西解析的。grub 好像也支持但是我不太清楚 grub 那邊的細節
我直接给/boot分了2G 文件系统ext4 我没有Windows
折腾了一中午,总算解决了。我先新建了/efi目录,然后把旧/boot分区原有的文件复制到了那里,在修改了一下fstab文件,使引导分区挂载到/efi目录。接着,我给硬盘划了500MiB的空间,然后把它挂载到了/boot目录。
接着要格式化/boot目录,grub好像支持很多格式,btrfs,ext4都可以,不过保险起见,我就直接格式化为FAT32了,再用genfstab重新生成了fstab文件;然后,我把/efi目录下的内核镜像、微码等文件转移到了/boot目录,再用grub-mkconfig重新生成了配置文件,grub成功识别到了/boot目录下的内核镜像。
最后重启系统来验证,我成功进入了系统,与之前唯一的不同是启动时会显示各种参数和警示了(就是显示很多绿色的OK字样),此前并不会显示这些,而只是提示加载内存盘什么的。
刚刚成功更新了系统
![]()
很多指令都是找Gemini现学的,AI挺好用的
不过用grub-mkconfig -o /efi/grub/grub.cfg的时候会提示这个,但配置还是能正常生成
/usr/bin/grub-editenv: 错误: 获取 "//boot/grub" 的规范路径失败.
这是什么意思
那些绿色的「OK」之类的是系统启动过程中systemd显示的。「加载内存盘」是grub在引导的时候显示的。你可能是弄丢了内核命令行上的quiet选项。
grub-mkconfig尝试在/boot/grub下找grub的文件,但是没找到吧。