Ubuntu26.04TLS

重装系统后的一些基础设置。(双系统)

安装过程索然无味,但是 btrfs 文件系统值得记录。

一、环境准备

  1. 下载安装 ventoy
  2. 下载镜像
1
https://releases.ubuntu.com/resolute/ubuntu-26.04-desktop-amd64.iso
  1. ventoy 处理 U盘,然后放进去 ISO 文件

二、安装系统

  1. 开机 LOGO 后,按 F2
  2. 调整启动顺序,将U盘置顶
  3. 关闭 Boot Security
  4. 进入 Live 系统
  5. 一直下一步,
  6. 分区挂载
    • 选择 btrfs 文件系统挂载 /
    • 选择 ESP 分区挂载到 /boot/efi
  7. 安装结束后,继续体验系统,千万不能重启

三、尝试使用 btrfs

3.1 子卷结构迁移

刚安装系统后系统会挂载在 /target

  1. 打开终端,提权到 root,方便后续操作
1
sudo -i
  1. 确认磁盘分区
1
lsblk
  1. 卸载安装程序残留的挂载点
1
umount -R /target
  1. 挂载 btrfs 分区到到 /mnt 下,物理机可能是 /dev/nvme0n1p3,虚拟机可能是 /dev/vda3
1
mount /dev/vda3 /mnt
  1. 创建标准的 Ubuntu 子卷
1
2
3
4
5
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@var_cache
btrfs subvolume create /mnt/@var_log
  1. 使用rsync将系统文件同步到子卷,根目录
1
rsync -aAXv --exclude={'/@','/@home','/home','@snapshots','@var_cache','@var_log','/var/log','/var/cache'} /mnt/ /mnt/@/
  1. 迁移其余子卷
1
2
3
rsync -aAXv /mnt/home/ /mnt/@home/
rsync -aAXv /mnt/var/log/ /mnt/@var_log/
rsync -aAXv /mnt/var/cache /mnt/@var_cache
  1. 清理顶层的旧文件,需要先开启 bash 的扩展通配符功能
1
2
3
cd /mnt
shopt -s extglob
rm -rf !(@|@home|@snapshots|@var_log|@var_cache)
  1. 确认只有 5 个子卷
1
ls -al
  1. 创建挂载点
1
2
3
mkdir -pv /mnt/@/.snapshots
mkdir -pv /mnt/@/var/log
mkdir -pv /mnt/@/var/cache

3.2 配置 fstab 与修复引导

nano 用起来不爽,live 系统联网后,apt install vim

  1. 编辑 /etc/fstab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo vim /mnt/@/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/nvme1n1p2 during curtin installation
# /dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 / btrfs defaults 0 1
/dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 / btrfs defaults,subvol=@,compress=zstd:1,noatime 0 1
/dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 /home btrfs defaults,subvol=@home,compress=zstd:1,noatime 0 2
/dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 /.snapshots btrfs defaults,subvol=@snapshots,compress=zstd:1,noatime 0 2
/dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 /var/log btrfs defaults,subvol=@var_log,compress=zstd:1,noatime 0 2
/dev/disk/by-uuid/fa935543-e5dd-4937-a0d6-f4cf9a967b91 /var/cache btrfs defaults,subvol=@var_cache,compress=zstd:1,noatime 0 2
# /boot/efi was on /dev/nvme1n1p1 during curtin installation
/dev/disk/by-uuid/12BC-B74A /boot/efi vfat defaults 0 1
  1. 挂载虚拟文件系统并进入 Chroot
1
2
3
umount -R /mnt
mount -o subvol=@ /dev/vda3 /mnt
mount /dev/vda1 /mnt/boot/efi
  1. 挂载必要的系统接口目录 (如果是 UEFI 启动,通常还需要挂载 efivars,防止 grub-install 报错找不到 EFI 变量)
1
2
3
4
5
6
7
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run

mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
  1. 为了重新生成引导,需要使用chroot进入刚装好的系统
1
chroot /mnt
  1. 更新并重装 GRUB,(注意:这里是整个磁盘如 nvme0n1 或 vda,不带分区号)
1
grub-install /dev/vda
  1. 更新 grub 菜单 (它会自动识别 rootflags=subvol=@)
1
update-grub
  1. 退出chroot并重启机器
1
2
3
exit
umount -R /mnt
reboot

3.3 部署Timeshift & GRUB快照

3.3.1 Timeshift

  1. 验证btrfs文件系统是否成功,需要看到 5 个子卷
1
sudo btrfs subvolume list /
  1. 配置镜像源,清华源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
sudo vi /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# Types: deb-src
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: resolute resolute-updates resolute-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 以下安全更新软件源为官方源配置
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# Types: deb-src
# URIs: http://security.ubuntu.com/ubuntu/
# Suites: resolute-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# 预发布软件源,不建议启用

# Types: deb
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: resolute-proposed
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

# # Types: deb-src
# # URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# # Suites: resolute-proposed
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
  1. 安装并配置 Timeshift
1
2
sudo apt update
sudo apt install timeshift -y
  1. 可视化界面进行配置,最后创建初始快照。

3.3.2 安装 GRUB 启动菜单集成

  1. 安装依赖
1
sudo apt install git make inotify-tools -y
  1. 下载并 编译安装 grub-btrfs
1
2
3
4
cd ~
git clone https://github.com/Antynea/grub-btrfs.git
cd grub-btrfs
sudo make install
  1. 为守护进程添加 Timeshift 兼容配置
1
2
sudo mkdir -p /etc/systemd/system/grub-btrfsd.service.d
echo -e "[Service]\nExecStart=\nExecStart=/usr/bin/grub-btrfsd --syslog --timeshift-auto" | sudo tee /etc/systemd/system/grub-btrfsd.service.d/override.conf
  1. 修复 Ubuntu UUID 读取问题

    这个问题困扰导致多次卡 grub

1
sudo vim /etc/grub.d/41_snapshots-btrfs

搜索 ^\s*UUID 定位到代码。将代码中的 /^\s*UUID/ 替换为 /^[ \t]*UUID/

1
2
root_uuid_subvolume="$(btrfs subvolume show / 2>/dev/null | \
awk -F':' '/^[ \t]*UUID/ {gsub(/^[ \t]+/, "", $2); print $2}')"
  1. 重新加载配置并启用后台监控服务
1
2
sudo systemctl daemon-reload
sudo systemctl enable --now grub-btrfsd
  1. 查看 当前grub-btrfsd服务状态正常监控到快照
1
sudo systemctl status grub-btrfsd
  1. 手动更新grub查看启动项正常识别并生成
1
sudo  update-grub

注意: 这一步正确的话,会显示出杠创建的快照,否则不要重启,不然一定卡 emergency mode

  1. 重启进入 grub 后验证,是否有快照。

四、优化

4.1 美化 grub

  1. 安装依赖
1
2
apt install git grub2-common
apt install git imagemagick
  1. 克隆仓库
1
git clone https://github.com/vinceliuice/grub2-themes
  1. 安装
1
2
cd grub2-themes
./install.sh -t vimix -s 1080p
  1. 修正 grub 的启动顺序
1
2
3
sudo vim /etc/default/grub
GRUB_DEFAULT=4
GRUB_RECORDFAIL_TIMEOUT=12
  • GRUB_DEFAULT ,默认指向第五个启动项
  • GRUB_RECORDFAIL_TIMEOUT,默认等待时长 12 秒
  1. 更新 grub 配置
1
sudo update-grub

五、常见问题

5.1 双系统时间不一致

原因

  • Windows 与 Linux 看待硬件时间的方式不同。
  • Windows 把电脑的硬件时钟(RTC)看成是本地时间,即 RTC = Local Time,Windows 会直接显示硬件时间;
  • 而 Linux 则是把电脑的硬件时钟看成 UTC 时间,即 RTC = UTC,那么 Linux 显示的时间就是硬件时间加上时区。

解决

法一:修改 windows 识别时间

1
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

或者打开「注册表编辑器」,定位到

1
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

目录下,新建一个 DWORD 类型,名称为 RealTimeIsUniversal 的键,并修改键值为 1 即可。

法二:修改 Linux 硬件时钟为本地时间

1
timedatectl set-local-rtc 1 --adjust-system-clock