使用 LVM 升級 Fedora
大多數用戶發現使用標準流程升級從一個 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
邏輯卷。你也可以從 現場鏡像 啟動(以便不使用 /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。這不是絕對必要的,但 UUID 應該是唯一的,因此這避免了未來的混淆。以下是在 ext4 根文件系統上的方法:
$ sudo e2fsck -f /dev/vg_sdg/f28
$ sudo tune2fs -U random /dev/vg_sdg/f28
然後刪除不再需要的快照卷:
$ sudo lvremove vg_sdg/f26_s
Do you really want to remove active logical volume vg_sdg/f26_s? [y/n]: y
Logical volume "f26_s" successfully removed
如果你單獨掛載了 /home
,你可能希望在此處製作 /home
的快照。有時,升級的應用程序會進行與舊版 Fedora 版本不兼容的更改。如果需要,編輯舊根文件系統上的 /etc/fstab
文件以在 /home
上掛載快照。請記住,當快照已滿時,它將消失!另外,你可能還希望給 /home
做個正常備份。
配置以使用新的根
首先,安裝新的邏輯卷並備份現有的 GRUB 設置:
$ sudo mkdir /mnt/f28
$ sudo mount /dev/vg_sdg/f28 /mnt/f28
$ sudo mkdir /mnt/f28/f26
$ cd /boot/grub2
$ sudo cp -p grub.cfg grub.cfg.old
編輯 grub.conf
並在第一個菜單項 menuentry
之前添加這些,除非你已經有了:
menuentry 'Old boot menu' {
configfile /grub2/grub.cfg.old
}
編輯 grub.conf
並更改默認菜單項以激活並掛載新的根文件系統。改變這一行:
linux16 /vmlinuz-4.16.11-100.fc26.x86_64 root=/dev/mapper/vg_sdg-f26 ro rd.lvm.lv=vg_sdg/f26 rd.lvm.lv=vg_sdg/swap rhgb quiet LANG=en_US.UTF-8
如你看到的這樣。請記住使用你系統上的正確的卷組和邏輯卷條目名稱!
linux16 /vmlinuz-4.16.11-100.fc26.x86_64 root=/dev/mapper/vg_sdg-f28 ro rd.lvm.lv=vg_sdg/f28 rd.lvm.lv=vg_sdg/swap rhgb quiet LANG=en_US.UTF-8
編輯 /mnt/f28/etc/default/grub
並改變在啟動時激活的默認的根卷:
GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_sdg/f28 rd.lvm.lv=vg_sdg/swap rhgb quiet"
編輯 /mnt/f28/etc/fstab
,將掛載的根文件系統從舊的邏輯卷:
/dev/mapper/vg_sdg-f26 / ext4 defaults 1 1
改為新的:
/dev/mapper/vg_sdg-f28 / ext4 defaults 1 1
然後,出於參考的用途,只讀掛載舊的根卷:
/dev/mapper/vg_sdg-f26 /f26 ext4 ro,nodev,noexec 0 0
如果你的根文件系統是通過 UUID 掛載的,你需要改變這個方式。如果你的根文件系統是 ext4 你可以這樣做:
$ sudo e2label /dev/vg_sdg/f28 F28
現在編輯 /mnt/f28/etc/fstab
使用該卷標。改變該根文件系統的掛載行,像這樣:
LABEL=F28 / ext4 defaults 1 1
重啟與升級
重新啟動,你的系統將使用新的根文件系統。它仍然是 Fedora 26,但是是帶有新的邏輯卷名稱的副本,並可以進行 dnf
系統升級!如果出現任何問題,請使用舊引導菜單引導回到你的工作系統,此過程可避免觸及舊系統。
$ sudo systemctl reboot # or GUI equivalent
...
$ df / /f26
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_sdg-f28 20511312 14903196 4543156 77% /
/dev/mapper/vg_sdg-f26 20511312 14866412 4579940 77% /f26
你可能希望驗證使用舊的引導菜單確實可以讓你回到掛載在舊的根文件系統上的根。
現在按照此維基頁面中的說明進行操作。如果系統升級出現任何問題,你還會有一個可以重啟回去的工作系統。
進一步的考慮
創建新的邏輯卷並將根卷的快照複製到其中的步驟可以使用通用腳本自動完成。它只需要新的邏輯卷的名稱,因為現有根的大小和設備很容易確定。例如,可以輸入以下命令:
$ sudo copyfs / f28
提供掛載點以進行複製可以更清楚地了解發生了什麼,並且複製其他掛載點(例如 /home
)可能很有用。
via: https://fedoramagazine.org/use-lvm-upgrade-fedora/
作者:Stuart D Gathman 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive