SDB:系統升級

(Redirected from SDB:System upgrade)
Jump to: navigation, search
這篇指引告訴您如何使用 Zypper 進行 openSUSE 的發行版本升級。
可適用於 openSUSE 推薦文章 相關文章
Icon-checked.png

Icon-manual.png Icon-help.png
Logo-geeko mini.png
版本:
11.2+
從 openSUSE 11.2 開始, 由之前版本進行 live 升級已被 官方支援。 如此可以適切的進行一個完全的作業系統升級,而不必每件事情從頭開始。

摘要

這個頁面解釋如何使用一個工具或一系列步驟的命令來升級您的系統為最新版的 openSUSE。

進行線上升級有許多益處,但相對的也有一些壞處。

好處是:

  • 您只需要下載需要升級的套件,如此可以大量減少使用的頻寬。
  • 在升級的過程中,您仍可以使用您的工作站 (即使我們並不建議您這樣做); 停機的時段只有升級之後的重開機。
  • 您不需要浪費一張 DVD,也不需要 DVD 燒錄機。 (您也可以從網路或 USB 隨身碟開機,並從網路安裝剩餘的部份...)

壞處是:

  • 如果您有任何理由造成升級中斷 (例如: 停電, 網路斷線) 而程序無法繼續,您可能只留下一個損壞的系統 (當然要看您是在哪個程序中斷)。
  • 如果您有多個系統要升級,您每一次都要使用頻寬,如果是這樣,您還是下載 ISO 影像比較好。
  • 它不像使用離線 DVD 升級方式會執行所有的清理與維護工作。

警告: 請不要跳版升級!例如:不要從 13.1 直接升級到 42.1。應該先從 13.1 升到 13.2,接著才從 13.2 升到 42.1。

其他升級方式:離線升級,也就是傳統的 DVD 升級。詳情請參閱 offline upgrade。這個方法比較安全也比較好用。除非您有好理由非要使用別種方法,否則最好還是使用離線升級


支援的劇本

從 32 位元 openSUSE 升級到 Leap 是不被支援的。Leap 只支援 64 位元系統。若您的硬體支援 x86_64,您可以先升級 32.2 到 64 位元系統。請見從 32 升級到 64 位元

在 AArch64 架構下 (64 位元 ARM 平台),不支援從 Leap 42.1 升級到 Leap 42.2。請重新安裝系統。

請小心注意,在原則上,這個程序僅能"盡力而為",因為有第3方的軟體以及無數的相關設定,這表示可能因為某些可能的組合而造成了升級過程失敗。

並且請記住下列重要原則:

  • 所有重要資料必須在開始升級前先行備份。
  • 在執行 zypper dup 前,您必須更新您的系統到目前執行版本的最新狀態。
  • 您只能夠執行 zypper dup 升級到次一個釋出版本。跳版升級 (如從 13.1 --> 42.1) 是不支援的。

準備您的安裝

支援的 起始點是上一個 openSUSE 的釋出版本加上所有當前的更新。請注意這並不包括您自行加入的 OBS (openSUSE Build Service) 套件庫。建議您請先停用所有的 OBS 套件庫,等到系統升級完成後再啟用它們。下列的步驟說明:在您升級到下一個版本之前,如何更新您的 openSUSE 發行版本,得到最新的更新套件。


發行紀事

您可以在發行紀事中找到所有關於升級的重要步驟與有關變更套件的資訊。


命令列

1. 檢查您的更新套件庫以存在並啟用。

zypper repos --uri

檢查 URI (位址)欄位的值應為 http://download.opensuse.org/update/13.2/ (對於 openSUSE 13.2 或更早的版本,用您的版本來代替 13.2),或是 http://download.opensuse.org/update/leap/42.1/oss/ (對 openSUSE Leap 42.1 或之後的版本,用您的版本來代替 42.1),且 Enabled (已啟用) 欄位應為 Yes (是),如下面的範例,

#  | Alias           | Name            | Enabled | Refresh | URI
---+-----------------+-----------------+---------+---------+---------------------------------------
1  | repo-update     | repo-update     | Yes     | Yes     | http://download.opensuse.org/update/13.2/

如果在 Enabled (啟用) 的欄位為 No(否), 使用下面命令更改,

zypper modifyrepo --enable repo-update
其中 ‘repo-update’ 是更新套件庫的名稱。
如果他已經存在並啟用,請跳到步驟3。

2. 新增更新套件庫。 (對於 openSUSE 13.2 或更早版本)

zypper addrepo --check --name 'openSUSE-13.2-Update' http://download.opensuse.org/update/13.2/ repo-update
記得用您的版本來代替 13.2。

(對於 openSUSE Leap 42.1 或之後版本)

zypper addrepo --check --name 'openSUSE-Leap-42.1-Update' http://download.opensuse.org/update/leap/42.1/oss/ repo-update
記得用您的版本來代替 42.1。

3. 移動 /var/cache 到一個獨立的子卷

注意:如果 root 檔案系統並非 Btrfs 或者您是從 42.2 升級,請跳過該小節,從步驟 4 繼續。

/var/cache 包含了許多暫時性的資料,例如在每次升級時暫存不同版本 RPM 套件的 Zypper 快取。故為了要儲存這個大部分是重復且暫存性質的資料,快照所要佔用的磁碟空間會非常快速地增加。要解決這個問題,將 /var/cache 移到一個獨立的子卷:

  • 找出 root 檔案系統的裝置名稱
df /
  • 找出所有子卷的父子卷。若是安裝 openSUSE 13.2,該子卷名稱為 @:
btrfs subvolume list / | grep '@'
  • 若該指令未輸出任何訊息,表示您沒有名稱為 @ 的子卷。在這個情況下,您可以使用 ID 為 5 的子卷。這是過去舊版本的 openSUSE 所使用的子卷。
  • 掛載該子卷到一個暫時的掛載點:
mount /dev/<root-device> -o subvol=5@ /mnt
若您沒有 @ 子卷,請改掛載 ID 為 5 的子卷:
mount /dev/<root-device> -o subvolid=5 /mnt
  • /mnt/var/cache 可能已經存在且與 /var/cache 指向相同的目錄。要避免資料遺失,請移動它:
mv /mnt/var/cache /mnt/var/cache.old
  • 產生一個新的子卷:
btrfs subvol create /mnt/var/cache
  • 若之前有移動舊資料到 /var/cache.old,將它移到新的位置:
mv /var/cache.old/* /mnt/var/cache
若不是,則執行:
mv /var/cache/* /mnt/var/cache/
  • 移動後,將 /mnt/var/cache.old 移除 (可選擇):
rm -rf /mnt/var/cache.old
  • 自暫時的掛載點卸載該子卷:
umount /mnt
  • 在 /etc/fstab 中替 /var/cache 子卷加入新項目。您可以拿現有的子卷設定當模版來複製。請確保不要動到 UUID 的內容 (因為這是 root 檔案系統的 UUID),並修改子卷的名稱與掛載點來和 /var/cache 的設定一致。
  • 掛載在 /etc/fstab 中設定的新子卷:
mount /var/cache

4. 更新系統到最新的套件。

zypper refresh
zypper update

要取得更多資訊,請參閱 Zypper 使用方法

圖形化工具

請見 YaST 線上更新


執行升級

下列步驟將告訴您如何更新您的 openSUSE 發行版本到下一個版本 (亦即,13.2 -> 42.1)。再次強調,任何的第三方或是 OBS 套件庫可能會引起不必要的麻煩,是故建議您在進行升級前停用或移除它們。

在開始之前

請確認您已閱讀過您將要安裝的新版本已知問題清單。有些問題可能會影響升級程序。一般來說,這些問題都會列有解法或暫時性方案,故請您對即將遇到的問題先有心理準備。

並且請閱讀發行紀事以了解新發行有那些變更與技術問題。

命令列

以 42.2 -> 42.3 為範例:

  • 列出所有您加入的套件庫
zypper lr
然後移除所有您不再需要的第三方/OBS 套件庫
zypper rr <alias>
  • 修改所有剩下的套件庫位址指到新的發行版本 (需要以 root 執行)
# cp -Rv /etc/zypp/repos.d /etc/zypp/repos.d.Old
備份舊檔,然後:
sed -i 's,42\.2,42.3,g' /etc/zypp/repos.d/*
  • 使用新套件庫更新套件列表 (您可能會被要求接受新的 GPG 金鑰)
zypper --gpg-auto-import-keys ref
若您未移除第三方/OBS 套件庫,您可能會遇到一些錯誤,主要是這些套件庫可能尚未存在或是它們使用了料想不到的位址。建議您先移除它們,等到升級完成後再加入新版本的套件庫。
  • 現在可以執行完整的版本升級了。
強烈建議您不要在 runlevel 5 (圖形模式),而是在 runlevel 3 (文字 + 網路) 或是虛擬終端機 (virtual console) 下執行升級。

不幸地很多時候 WIFI 連線只有在 runlevel 5 時才能管理或使用,故在維持登入圖形模式的情況下,使用虛擬終端機會是一個最好的方法。

有時候人們會在升級時遇到 X 執行階段 (session) 停住或當掉,導致升級程式被中斷,這將會留下一個狀態不一致的系統。

要切換到 runlevel 3,請詳見 SDB:Switch_runlevel

要留在 runlevel 5,但是使用虛擬終端機,請按 control-alt-F1 (範例)。


zypper dup
使用上面的命令 zypper 將下載所需的套件並以成堆 (in heaps) 的方式安裝。若要事先下載所有套件,請使用:
zypper dup --download "in-advance"
如果您在正式釋出日期(例如,42.2 是在 2016 年 11 月 16 日發布)之前進行上面的發行版本升級,您可能會安裝到一個候選版本或某個里程碑版本,您將需要再次執行最後的 zypper dup 步驟來接收最終的釋出。


  • 如果之前有使用第三方套件庫,請找到並加入相對應的 openSUSE leap 42.3 第三方套件庫。
警告 請小心使用,使用第三方套件庫會增加升級的風險,有可能造成升級不完全正確。
zypper addrepo --name <名稱> <位址> <別名>

或,如果您有 URL 的 .repo 檔案:

zypper ar <url.repo>
  • 升級完成後,建議您重新啟動系統來開始使用新核心及更新後的套件。

另外, zypper up 也可以有空就執行一下已確定您有各個啟用的套件庫中最新的套件。 YOU (Yast Online Update,YaST 線上更新) 只會從官方套件庫下載針對安全性問題的更新。



其他 openSUSE 或是 SUSE 專案的連結

openSUSE 論壇