蚊章汇 - Stuart D Gathman
type: channel
link: https://linuxcn.bwsl.wang/author/1282/
description: Stuart D Gathman
items: 使用 Btrfs 快照方便升级 Fedora Linux 且易于回退
items: 使用 LVM 升级 Fedora

使用 Btrfs 快照方便升级 Fedora Linux 且易于回退
type: item
date: 2023-10-09T19:37:24+08:00
description: 在 2018 年的一篇 早前的文章 中，我们介绍了在升级 Fedora Linux 前如何利用 LVM 复制根文件系统，以便在可能出现错误的情况下能有一个回退机制。然而如今，Fedora 工作站的默认安装已经是 Btrfs 文件系统了。现在，你可以利用 Btrfs 快照来更简便地创建一个可引导的回退系统。注意，本文不涉及会如何从其它文件系统转换或迁移到 Btrfs 上。确认根文件系统是否为 Btrfs本示例采用的是 Pinebook aarch64 笔记本电脑。在开始前，务必确认你的根文件系统是否采用 Btrfs。要明确，不是所有的定制版或者镜像文件默认都使用 Btrfs。$ df -T Filesystem Type 1K-blocks Used Available Use% Mounted on devtmpfs devtmpfs 4096 0 4096 0% /dev tmpfs tmpfs 998992 0 998992 0% /dev/shm tmpfs tmpfs 399600 6360 393240 2% /run /dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% / tmpfs tmpfs 998996 24 998972 1% /tmp tmpfs tmpfs 5242880 0 5242880 0% /var/lib/mock /dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% /f34 /dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% /home /dev/mmcblk2p2 ext4 996780 551888 376080 60% /boot /dev/mmcblk2p1 vfat 194348 31648 162700 17% /boot/efi tmpfs tmpfs 199796 100 199696 1% /run/user/1000 tmpfs tmpfs 199796 84 199712 1% /run/user/0 列出当前的 Btrfs 子卷以上的示例输出显示挂载在 “根”（/）的文件系统类型是 Btrfs。你会注意到，有三个挂载点显示了相同的备份设备以及 已用 和 可用 的块数。这是因为它们是从同一 Btrfs 文件系统挂载的不同部分（子卷）。比如，/f34 子卷是我去年创建的那个可引导快照。默认的 Fedora Btrfs 安装会创建一个 Btrfs 文件系统，并在其上分别挂载两个子卷，root 和 home ，挂载路径分别为 / 和 /home。让我们一起来看看我还添加了哪些其它的子卷：$ sudo btrfs subvol list / ID 272 gen 110428 top level 5 path root ID 273 gen 110426 top level 5 path home ID 300 gen 109923 top level 5 path f34 ID 301 gen 95852 top level 5 path home.22Jul26 ID 302 gen 95854 top level 5 path f36.22Jul26 在这里，我们有一个来自最近一次系统升级的 f34 子卷，以及两个只读快照 home 和 f36。要添加和删除这些快照，最简单的方法就是挂载 Btrfs 的根目录。我会更新系统并创建当前 f36 root 子卷的新快照。如果你已经重命名了你的 root 子卷，我相信你知道该如何调整以下的示例以适应你的系统。创建 Btrfs 的回退快照$ sudo dnf update --refresh ...更新了很多部分（如果升级了内核还需要重启） $ sudo mkdir -p /mnt/root $ sudo mount /dev/mmcblk2p3 /mnt/root $ cd /mnt/root $ ls f34 f36.22Jul26 home home.22Jul26 root $ sudo btrfs subvol snapshot root f36 Create a snapshot of 'root' in './f36' 因为 Btrfs 快照是以文件系统为基础的，所以并不需要在创建快照之前进行 “同步”，正如我在 LVM 中建议的。要从新的子卷引导为回退，你需要使用你喜欢的编辑器编辑 /mnt/root/f36/etc/fstab。如果你是刚入门的话，nano 就是一款十分简单的文本编辑器，功能基本够用。以下是我 fstab 文件中的一些行：LABEL=PINE …

使用 LVM 升级 Fedora
type: item
date: 2019-08-20T17:57:06+08:00
description: 大多数用户发现使用标准流程升级从一个 Fedora 版本升级到下一个很简单。但是，Fedora 升级也不可避免地会遇到许多特殊情况。本文介绍了使用 DNF 和逻辑卷管理（LVM）进行升级的一种方法，以便在出现问题时保留可引导备份。这个例子是将 Fedora 26 系统升级到 Fedora 28。此处展示的过程比标准升级过程更复杂。在使用此过程之前，你应该充分掌握 LVM 的工作原理。如果没有适当的技能和细心，你可能会丢失数据和/或被迫重新安装系统！如果你不知道自己在做什么，那么强烈建议你坚持只使用得到支持的升级方法。准备系统在开始之前，请确保你的现有系统已完全更新。$ sudo dnf update $ sudo systemctl reboot # 或采用 GUI 方式检查你的根文件系统是否是通过 LVM 挂载的。$ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_sdg-f26 20511312 14879816 4566536 77% / $ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert f22 vg_sdg -wi-ao---- 15.00g f24_64 vg_sdg -wi-ao---- 20.00g f26 vg_sdg -wi-ao---- 20.00g home vg_sdg -wi-ao---- 100.00g mockcache vg_sdg -wi-ao---- 10.00g swap vg_sdg -wi-ao---- 4.00g test vg_sdg -wi-a----- 1.00g vg_vm vg_sdg -wi-ao---- 20.00g如果你在安装 Fedora 时使用了默认值，你可能会发现根文件系统挂载在名为 root 的逻辑卷（LV）上。卷组（VG）的名称可能会有所不同。看看根卷的总大小。在该示例中，根文件系统名为 f26，大小为 20G。接下来，确保 LVM 中有足够的可用空间。$ sudo vgs VG #PV #LV #SN Attr VSize VFree vg_sdg 1 8 0 wz--n- 232.39g 42.39g该系统有足够的可用空间，可以为升级后的 Fedora 28 的根卷分配 20G 的逻辑卷。如果你使用的是默认安装，则你的 LVM 中将没有可用空间。对 LVM 的一般性管理超出了本文的范围，但这里有一些情形下可能采取的方法：1、/home 在自己的逻辑卷，而且 /home 中有大量空闲空间。你可以从图形界面中注销并切换到文本控制台，以 root 用户身份登录。然后你可以卸载 /home，并使用 lvreduce -r 调整大小并重新分配 /home 逻辑卷。你也可以从 现场镜像 Live image 启动（以便不使用 /home）并使用 gparted GUI 实用程序进行分区调整。2、大多数 LVM 空间被分配给根卷，该文件系统中有大量可用空间。你可以从现场镜像启动并使用 gparted GUI 实用程序来减少根卷的大小。此时也可以考虑将 /home 移动到另外的文件系统，但这超出了本文的范围。3、大多数文件系统已满，但你有个已经不再需要逻辑卷。你可以删除不需要的逻辑卷，释放卷组中的空间以进行此操作。创建备份首先，为升级后的系统分配新的逻辑卷。确保为系统的卷组（VG）使用正确的名称。在这个例子中它是 vg_sdg。$ sudo lvcreate -L20G -n f28 vg_sdg Logical volume "f28" created.接下来，创建当前根文件系统的快照。此示例创建名为 f26_s 的快照卷。$ sync $ sudo lvcreate -s -L1G -n f26_s vg_sdg/f26 Using default stripesize 64.00 KiB. Logical volume "f26_s" created.现在可以将快照复制到新逻辑卷。当你替换自己的卷名时，请确保目标正确。如果不小心，就会不可撤销地删除了数据。此外，请确保你从根卷的快照复制，而不是从你的现在的根卷。$ sudo dd if=/dev/vg_sdg/f26_s of=/dev/vg_sdg/f28 bs=256k 81920+0 records in 81920+0 records out 21474836480 bytes (21 GB, 20 GiB) copied, 149.179 s, 144 MB/s给新文件系统一个唯一的 UUID。这不是绝对必…