Files
FlintyLemming 5d56d6a3c0 fix post
2026-03-04 18:41:19 +08:00

309 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
+++
author = "FlintyLemming"
title = "在 btrfs 文件系统上离线安装 AOSC OS"
slug = "311779ab64688073b953fcff47ae64c3"
date = "2026-03-04"
description = "参考 Fedora 的分区设置"
categories = ["HomeLab"]
tags = ["AOSC"]
image = "https://assets.mitsea.cn/blog/posts/2026/03/%E5%9C%A8%20btrfs%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%20AOSC%20OS/frode-myklebust-UbDdynMmcX0-unsplash.jpg"
+++
## 准备操作
进入命令行模式安装系统
![](https://assets.mitsea.cn/blog/posts/2026/03/%E5%9C%A8%20btrfs%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%20AOSC%20OS/%E5%9B%BE%E7%89%87.png)
由于下面的操作比较多,为了方便复制,可以考虑使用 ssh 远程连接
设置 root 密码
```bash
passwd
```
修改 ssh 配置以启用 ssh 远程登陆
```bash
nano /etc/ssh/sshd_config
```
`PremitRootLogin` 前的注释删掉并改成 `yes`
重启 ssh 服务
```bash
systemctl restart ssh
```
## 格式化硬盘与分区
假设硬盘是 `/dev/sda`
### 清除硬盘内容
1. 擦掉所有文件系统签名
```bash
wipefs -a /dev/sda*
```
2. 删除 GPT/MBR 分区表
```bash
sgdisk --zap-all /dev/sda
```
### 分区与格式化
1. 用 `fdisk` 重建 GPT
```bash
fdisk /dev/sda
```
2. 在 fdisk 里依次输入,每行一个命令(期间如果提示分区包含一个 xx 签名,选择 y 移除签名):
`g` (新建 GPT
`n` (新建分区 1EFI
回车(默认分区号 1
回车(默认起始)
输入:`+600M`
`t` (改类型)
输入:`1` 选择 EFI System通常会让你选类型直接选 EFI/1
`n` (新建分区 2boot 分区)
回车(默认分区号 2
回车(默认起始)
输入:`+1.4G` (如果需要多内核可以调大)
`n` (新建分区 3btrfs 系统分区)
- 回车(默认分区号 3
- 回车(默认起始)
- 回车(用剩余全部空间)
`w` (写入并退出)
3. 写完后检查
```bash
lsblk /dev/sda
```
你应该看到 `sda1` 和 `sda2` 出现。
4. 格式化
EFI 分区FAT32
```bash
mkfs.fat -F32 /dev/sda1
```
boot 分区ext4
```bash
mkfs.ext4 -L BOOT /dev/sda2
```
btrfs 分区
```bash
mkfs.btrfs -f -L LINUX_SYSTEM /dev/sda3
```
### 创建 btrfs 子卷并挂载(@ 和 @home
1. 先临时挂载顶层
```bash
mkdir -p /mnt/btrfs-top
mount /dev/sda3 /mnt/btrfs-top
```
2. 创建子卷
```bash
btrfs subvolume create /mnt/btrfs-top/@
btrfs subvolume create /mnt/btrfs-top/@home
```
3. 卸载顶层
```bash
umount /mnt/btrfs-top
```
4. 挂载安装用的根目录和系统分区
```bash
# 挂载带透明压缩的 btrfs 根目录到 /mnt
mount -o subvol=@,compress=zstd:3 /dev/sda3 /mnt
# 挂载独立的 ext4 boot 分区
mkdir -p /mnt/boot
mount /dev/sda2 /mnt/boot
# 挂载 EFI 分区
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
# 挂载带透明压缩的 btrfs home 目录
mkdir -p /mnt/home
mount -o subvol=@home,compress=zstd:3 /dev/sda3 /mnt/home
```
## 安装系统
### 复制系统文件
1. 确认一下你要用的源目录是存在的:
```
ls /run/livekit/sysroots/desktop | head
```
如果能列出 `/etc` `/lib` 之类,确认你的 livekit 确实是有离线包,我们就开始使用 rsync 复制
2. 执行 rsync 命令复制
```jsx
rsync -aAXHv \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/run/livekit/sysroots/desktop/ \
/mnt/
```
### 生成 fstab
1. 先获取 UUID
```
blkid
```
记住:
- sda3 的 UUIDbtrfs 系统分区)
- sda2 的 UUIDext4 boot 分区)
- sda1 的 UUIDFAT32 EFI 分区)
2. 编辑 fstab
```
nano /mnt/etc/fstab
```
写入(用你实际 UUID 替换):
```
UUID=<sda3的UUID> / btrfs subvol=@,compress=zstd:3 0 0
UUID=<sda2的UUID> /boot ext4 defaults 0 2
UUID=<sda3的UUID> /home btrfs subvol=@home,compress=zstd:3 0 0
UUID=<sda1的UUID> /boot/efi vfat defaults 0 1
```
保存退出
### 准备 chroot
1. 挂载系统目录
```
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
mount --bind /run /mnt/run
```
2. 然后进入系统:
```
chroot /mnt /bin/bash
```
如果成功,你的提示符会变化,会被重新定位到 `/`。期间如果提示 “tty: ttyname error: No such device” 错误是正常的。
### 杂项
1. 生成 machine-id
```
systemd-machine-id-setup
```
2. 重建 initramfs
```
dracut -f
```
## 安装 GRUBUEFI
1. 确认 EFI 挂载:
```
ls /boot/efi
```
没返回是正常的,有这个文件夹就行
2. 安装
```
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=AOSC
```
3. 然后生成配置:
```
grub-mkconfig -o /boot/grub/grub.cfg
```
## 后处理
### 设置 root 密码
```
passwd
```
### 退出并重启
```
exit
umount -R /mnt
reboot
```
安装完成
![](https://assets.mitsea.cn/blog/posts/2026/03/%E5%9C%A8%20btrfs%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%20AOSC%20OS/%E5%9B%BE%E7%89%87%201.png)
由于是从 livekit 复制出来的系统,所以默认 hostname 还是 livekit可以改一下
```
hostnamectl hostname your-new-hostname
```
> Photo by [Frode Myklebust](https://unsplash.com/@famyklebust?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/photos/hills-and-ocean-under-a-pastel-sky-UbDdynMmcX0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)