大多数用户发现使用标准升级过程从一个Fedora版本升级到下一个版本很简单。但是,Fedora升级难免会遇到很多特殊情况。本文介绍了一种使用DNF和逻辑卷管理(LVM)进行升级以保留可启动备份以防出现问题的方法。此示例用于将Fedora26系统升级到Fedora28。此处介绍的过程比标准升级过程更复杂。在使用此过程之前,您应该很好地掌握LVM的工作原理。如果没有适当的技能和注意,您可能会丢失数据和/或被迫重新安装系统!如果您不知道自己在做什么,强烈建议您只使用受支持的升级方法。准备您的系统在开始之前,请确保您现有的系统已完全更新。$sudodnfupdate$sudosystemctlreboot#或者使用GUI检查你的根文件系统是否通过LVM挂载。$df/Filesystem1K-blocksUsedAvailableUse%Mountedon/dev/mapper/vg_sdg-f262051131214879816456653677%/$sudolvsLVVGAttrLSizePoolOriginData%Meta%MoveLogCpy%SyncConvertf22vg_sdg-wi-ao----15.00gf24_64vg_sdg-wi-ao----20.00gf26vg_sdg-wi-ao----20.00ghomevg_sdg-wi-ao----100.00gmockcachevg_sdg-wi-ao----10.00gswapvg_sdg-wi-ao----4.00gtestvg_sdg-wi-a-----1.00gvg_vmvg_sdg-wi-ao----20.00g如果你在安装Fedora时使用默认值,你可能会发现root文件系统安装在名为root的逻辑卷(LV)上。卷组(VG)的名称可能会有所不同。查看根卷的总大小。在此示例中,根文件系统名为f26,大小为20G。接下来,确保LVM中有足够的可用空间。$sudovgsVG#PV#LV#SNAttrVSizeVFreevg_sdg180wz--n-232.39g42.39g该系统有足够的可用空间为升级后的Fedora28的根卷分配一个20G的逻辑卷。如果您使用默认安装,您的LVM中将没有可用空间。LVM的一般管理超出了本文的范围,但这里有一些可能的处理方法:1./home在它自己的逻辑卷上,并且/home有很多空闲空间。您可以从GUI注销并切换到文本控制台,以root身份登录。然后您可以卸载/home,并使用lvreduce-r调整和重新分配/home逻辑卷。您还可以从实时映像启动(因此/home不被使用)并使用gpartedGUI实用程序进行分区调整。2.大部分LVM空间分配给根卷,在文件系统中有大量空闲空间。您可以从实时映像启动并使用gpartedGUI实用程序来减小根卷的大小。此时也可以考虑将/home移动到另一个文件系统,但这超出了本文的范围。3.大多数文件系统已满,但您有一个不再需要的逻辑卷。您可以删除不需要的逻辑卷以释放卷组中的空间来执行此操作。创建备份首先,为升级后的系统分配一个新的逻辑卷。确保为系统的卷组(VG)使用正确的名称。在这个例子中它是vg_sdg。$sudolvcreate-L20G-nf28vg_sdg已创建逻辑卷“f28”。接下来,创建当前根文件系统的快照。此示例创建一个名为f26_s的快照卷。$sync$sudolvcreate-s-L1G-nf26_svg_sdg/f26使用默认条带大小64.00KiB。已创建逻辑卷“f26_s”。现在可以将快照复制到新的逻辑卷。当您替换自己的卷名时,请确保目标是正确的。如果您不小心,您可能会不可撤销地删除您的数据。此外,确保从根卷的快照复制,而不是从当前的根卷复制。$sudoddif=/dev/vg_sdg/f26_sof=/dev/vg_sdg/f28bs=256k81920+0recordsin81920+0recordsout21474836480bytes(21GB,20GiB)copied,149.179s,144MB/stonewfile系统的唯一UUID。这不是绝对必要的,但UUID应该是唯一的,这样可以避免将来的混淆。以下是在ext4rootfs上执行此操作的方法:$sudoe2fsck-f/dev/vg_sdg/f28$sudotune2fs-Urandom/dev/vg_sdg/f28然后删除不再需要的快照卷:$sudolvremovevg_sdg/f26_sDoyou真的要删除活动逻辑卷vg_sdg/f26_s吗?[y/n]:y逻辑卷“f26_s”已成功删除如果您单独安装/home,您可能想在这里制作/home的快照。有时,升级后的应用程序会做出与旧Fedora版本不兼容的更改。如果需要,编辑旧根文件系统上的/etc/fstab文件以将快照挂载到/home上。请记住,当快照已满时,它将消失!此外,您可能希望对/home进行正常备份。配置使用新的根首先,挂载新的逻辑卷并备份现有的GRUB设置:$sudomkdir/mnt/f28$sudomount/dev/vg_sdg/f28/mnt/f28$sudomkdir/mnt/f28/f26$cd/boot/grub2$sudocp-pgrub.cfggrub.cfg.old编辑grub.conf并在第一个菜单项之前添加这些,除非你已经有:menuentry'Oldbootmenu'{configfile/grub2/grub.cfg.old}编辑grub.conf并更改默认菜单条目以激活和挂载新的根文件系统。更改此行:linux16/vmlinuz-4.16.11-100.fc26.x86_64root=/dev/mapper/vg_sdg-f26rord.lvm.lv=vg_sdg/f26rd.lvm.lv=vg_sdg/swaprhgbquietLANG=如您所见,en_US.UTF-8。请记住为您的系统使用正确的VG和LV条目名称!linux16/vmlinuz-4.16.11-100.fc26.x86_64root=/dev/mapper/vg_sdg-f28rord.lvm.lv=vg_sdg/f28rd.lvm.lv=vg_sdg/swaprhgbquietLANG=en_US.UTF-8编辑/mnt/f28/etc/default/grub并更改引导时激活的默认根卷:GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_sdg/f28rd.lvm.lv=vg_sdg/swaprhgbquiet"edit/mnt/f28/etc/fstab,将挂载的根文件系统从旧的逻辑卷:/dev/mapper/vg_sdg-f26/ext4defaults11更改为新的:/dev/mapper/vg_sdg-f28/ext4defaults11然后,作为参考,以只读方式挂载旧的根卷:/dev/mapper/vg_sdg-f26/f26ext4ro,nodev,noexec00如果您的根文件系统是通过UUID挂载的,您需要更改此方法。如果您的根文件系统是ext4,您可以这样做:$sudoe2label/dev/vg_sdg/f28F28现在编辑/mnt/f28/etc/fstab以使用该卷标。将该rootfs的安装行更改为如下所示:LABEL=F28/ext4defaults11重新启动和升级重新启动,您的系统将使用新的rootfs。它仍然是Fedora26,但是具有新的逻辑卷名和dnf系统升级的副本!如果出现任何问题,请使用旧的引导菜单引导回您的工作系统,此过程可避免触及旧系统。$sudosystemctlreboot#或等效的GUI...$df//f26Filesystem1K-blocksUsedAvailableUse%Mountedon/dev/mapper/vg_sdg-f282051131214903196454315677%//dev/mapper/vg_sdg-f26205141436492051948364977%/f26您可能想要验证使用旧的启动菜单是否可以让您回到安装在旧的rootfs上的根目录。现在按照此wiki页面中的说明进行操作。如果系统升级出现任何问题,您还将拥有一个可以重新启动的工作系统。进一步考虑创建新逻辑卷并将根卷的快照复制到其中的步骤可以使用通用脚本自动执行。它只需要新逻辑卷的名称,因为现有根的大小和设备很容易确定。例如,可以输入以下命令:$sudocopyfs/f28为复制提供挂载点可以更清楚地了解正在发生的事情,复制其他挂载点(例如/home)可能会有用。
