作者: ken

主機與系統規劃-新手篇

No Comments

標題實在看不出來筆者想分享些什麼,不過從特別指明的“新手篇”看得出來內容不會太艱澀,也必定看得出來筆者的程度只能是分享新手級的內容了;我真的是,沒謙虛的。

所以趕快講目的:從遠端管理的角度看來,若主機遇到任何問題,都是從遠端就必能解決的嗎?會不會有必須至現場的狀況?筆者不敢說一定沒有,但依筆者的程度,。。。就是一定有啦。那麼,能否還是不用到現場去?依筆者的程度,好像可以。。。嗯,這就是本文的目的囉。

本文涉及了 Ubuntu 的安裝,所以會從以前的文章連結至此。也因為本文最適合剛要安裝系統的讀者,期有一個 foreseeing 的系統規劃。

而在筆者成功完成此規劃時,其實已經繞了好幾圈的路才達標。因此下篇會是進階的蝦子摸象篇。

後記補充

  • ubuntu iso/desktop/amd64,版本 20.04.0,20.04.2,於安裝一開始的檔案檢查會個別有 3 個及 17 個檔案錯誤,其與 unetbootin 搭配之下。而使用 20.04.1 才會沒有錯誤。故可使用這版,之後再更新。
  • tuxboot 可使用 dpkg 安裝其 .deb 套件,並且會出錯,再使用 apt 修復安裝便可完成安裝。
  • unetbootin 則使用 ppa 以完成安裝。

適用場景

  • 必適用於處理本機,也適用於被遠端管理
  • 主機主系統的檔案系統出現錯誤,必須 un-mount 才能處理
  • 主系統的完整備份與還原
  • 其他筆者沒遇過沒想到的場景

江湖一點訣,說破就這樣

開機後會先出現 Grub 開機選單,若沒出現便是隱藏起來了。開機選單是可以規劃的,可規劃預設由哪一個磁碟/分割區來開機。若主系統出現問題而須 un-mount 才能進行除錯,我們可修改開機選單,並 reboot,下次便由另一個副系統 boot up,再對該主系統進行修復。參與的角色有 unetbootin 能讓我們製作 Ubuntu 的 USB 開機安裝磁碟,也有 Clonezilla(透過 Tuxboot 製作)提供遠端備份還原的強大功能。也因此我們的構思就有雛形了:在主機上只有一顆硬碟的前提下,我們規劃了以下幾個分割區,一個是由 unetbootin 製作出來的 Ubuntu 系統安裝光碟的分割區(適用於本地,非必要。但建立它對往後應該便利許多。例如我們若要嘗試安裝某不信任軟體或擔心會造成系統 crash 的就可由它開機,當成沙盤的功用);一個是 clonezilla 分割區(同樣非必要,但若要作整個系統的備份及還原,用它會省事許多);一個是主系統分割區;最後一個是副系統,其用以救援主系統的。
因此簡單一句話,若是 Linux 玩家,應都會覺得上述是不錯的規劃的。

規劃

  • 前題:只有一顆硬碟 /dev/sda。很不幸的,我們無法直接在目的主機上規劃,而必須額外地準備這顆硬碟的 USB 硬碟外接盒,並在 Ubuntu 工作機上透過 USB 規劃。(在採取其他可行性規劃的過程中所遭遇到的問題,筆者都會在下一篇摸索篇中交待)
  • /dev/sda1:unetbootin,USB installation disk/partition
  • /dev/sda2:clonezilla,backup tool disk/partition
  • /dev/sda3:Main system
  • /dev/sda4:Sub system for rescue
  • (事實上若全在本機救援的話就不需要副系統,因為 ubuntu 安裝光碟該區就能是副系統的角色,但要遠端管理就須設定遠端登入的資訊因此依筆者程度就需另一個副系統)
  • 安裝光碟製作出來後,以 Ubuntu 16.04 而言是佔用 1.7G,Ubuntu 18.04 是 2.1G,Ubuntu 20.04 是 2.8G(若使用 persistence space 需再加 4.3G「註:當 FAT32 時。若是 ext4 則大小又不一樣了,更大,10G」),考量以後擴充,sda1 就抓 10 G
  • clonezilla 好像不大,但硬碟好像很大,且 clonezilla 本身所處的磁碟好像不給使用於儲存,所以 sda2 就抓 1G
  • sda4,副系統:因安裝完的 ubuntu,版本 16.04 佔用不到 4.5 G,版本 18.04 佔用不到 6G,版本 20.04 佔用不到 8 G。若考量到備份還原的 image file 要存放至此,空間便得預留下來(也就是先浪費掉了)。不然抓個 12G 應綽綽有餘(筆者抓 100G;副系統反而要比主系統大,對吧)。剩下的當然就是給主系統了。
  • 各透過 unetbooin 和 tuxboot 建立目的磁碟,但同時有 installation disk 和 backup tool disk,會造成衝突。因此,額外的處置與指令將是避開的技巧。
  • 安裝的順序將是,沒有順序,都可以;只要主系統是最後一個安裝即可。但又,不同的安裝順序,會導致不同的安裝程序及時間。因為一來四個分割區上所安裝的對象都會搶 MBR/GPT 開機啟動磁區。再來須確保最後一個安裝的,會安裝 Grub 在開機啟動磁區。
    然而這樣的順序會快速很多:在另一台電腦上透過 USB 外接硬碟,先裝 clonezilla partition,接著裝 installation partition,之後拿到目的主機使用 installation partition 灌主系統和副系統。主副系統上都有 Grub 開機管理程式,因此二者誰管開機都是可以的,但原則上誰都要可開對方。
  • 故筆者的順序將是先裝 clonezilla partition,接著 installation partition,接著灌副系統,最後灌主系統,選單的根將是主系統。而在此之前需先製作硬碟分割。接下來讓我們興奮地開始吧!

在工作電腦上安裝 Unetbootin 及 Tuxboot

  • Ubuntu repositories 並沒有 Unetbootin 及 Tuxboot。Unetbootin 是拿來製作 Ubuntu 開機安裝 USB 碟,Tuxboot 則是製作 Clonezilla USB 碟。因此我們需要在工作機上安裝這兩支工具。但有點麻煩,須開啟其他屬性的套件庫,如下操作:
  • 開啟 shell,指令:
  • sudo apt update
  • 接者,在“顯示應用程式”的“搜尋框”中鍵入“software & update”或“軟體與更新”,啟動該應用程式。
    如圖,分別於“Ubuntu 軟體夾”及“更新夾”中,將對應的選項打勾。不同版本的 Ubuntu 可能會不同,但原則上都打勾即可。
  • 套用/退出後,再次執行:
  • sudo apt update
  • 接著,我們要分別載入 Unetbootin 和 Tuxboot 的 ppa 來源列表
  • sudo add-apt-repository ppa:gezakovacs/ppa
  • sudo apt-add-repository ppa:thomas.tsai/ubuntu-tuxboot
  • sudo apt update
  • 更新列表後接著安裝
  • sudo apt install unetbootin
  • sudo apt install tuxboot
  • 完成後,容筆者偷笑一句:其實 Tuxboot 是用不到的。。。

分割 USB 外接硬碟/分割區規劃

  • 如前述規劃,(sda1, 10G),(sda2, 1G),(sda3, 剩下),(sda4, 100G)
  • 使用 MBR 而非 GPT,採取 dos 相容模式,且全都格式化成 ext4
  • 插入裝著目的硬碟的 USB 硬碟外接盒後(請確認您的外接硬碟是哪個路徑裝置。我們可透過 ls -l /dev/[sh]d* 指令來確認 USB 碟的路徑,看拔出插入多了哪個裝置路徑。以筆者為例是 /dev/sdd)
  • 開啟 shell,
  • 製作硬碟分割區的指令:
    sudo fdisk /dev/sdx
  • 格式化分割區的指令:
    sudo mkfs -t ext4 -L “標籤名稱” /dev/sdxx (注意雙引號)
  • 接著一序列的動作如圖(圖片有點小,請在瀏覽器中放大)
  • 完成後,下 sudo blkid 查看目的分割區是否都已被指定了 UUID。表示已可被系統掛載。

製作 Ubuntu 安裝區於第一分割區,Clonezilla 備份區於第二分割區

  • 請注意,官網建議 Clonezilla 必須使用 Tuxboot 來規劃進 USB 隨身碟。因為官方特別指明若使用 Unetbootin 製作的話會出現問題。(可能因此)官方才會修改 Unetbootin,再版出來 Tuxboot 以相容於 Clonezilla。然而筆者實測結果 Tuxboot 製作出來的,是無法與其他開機磁區共存的,也就是說 Tuxboot 只適用於單啟動分割區的磁碟。因此筆者不得不轉而使用 Unetbootin。再加上實測結果,在製作 Clonezilla 開機分割區的過程當中確實出現錯誤,忽略之。而在之後實際使用上筆者並沒有遇到問題。
  • 第一步,先製作 Clonezilla 於 /dev/sdd2,我們需先將分割區 mount 上。
    sudo mkdir /mnt/Clonezilla
    sudo mount -t ext4 /dev/sdd2 /mnt/Clonezilla
  • 接著執行 Unetbootin 如圖,請注意,targetdrive=/dev/sdd2 一定得使用這樣的形式
  • 執行出來後選擇“映像檔”,點取“ISO 檔案“並選擇 clonezilla 的 iso 檔或 zip 檔都可以
  • 確認是選 USB 磁碟機及 /dev/sdxx 無誤後,按確定開始複製。
    過程中會出錯如下圖,點選 三個中之一皆可(畢竟已出錯)原因可能是檔案已存在,覆不覆寫都沒差且,該檔(筆者的是兩支檔案)看起來用途應是支援美化界面顯示,即,之後執行 Clonezilla,它的選單確實有差異,但應是不影響使用的。
  • 接著便完成製作了。
  • 如下圖,退出後我們檢查一下 /mnt/Clonezilla,確實有存放檔案了
  • 然後退上一層再卸載該分割區
  • 並再確認一次 Clonezilla 內沒東西後再把該目錄刪除
  • 接著換製作 Ubuntu 光碟到 /dev/sdd1
  • 建立並掛載至 Unetbootin 目錄
  • 執行 Unetbootin,指令如上圖
  • 操作製作方式亦同
  • 完成後,亦同的操作如下

至目的主機安裝主副系統

  • 接下來就純粹是安裝了,我們將安裝副/主系統。
  • 將目的硬碟裝至目的主機,開機,若沒意外,會從硬碟上的第一個分割區 Ubuntu 安裝光碟開機,因為我們是先裝 Clonezilla,才裝 Ubuntu installation CD,所以開機啟動磁區會被後者覆蓋,即,由 Ubuntu installation CD 掌控。
  • 因此出現開機選單後,選擇 Install Ubuntu。我們準備開始安裝副系統。建議選擇最小安裝即可,當中選擇自規劃分割區,並將分割區四/副系統掛載成根目錄“/”,要不要格式化皆可。
  • 安裝完成後,重新開機,在使用者看來 Ubuntu installation CD 消失了,只剩副系統。沒關係,隨後處理。
  • 開機進副系統後,先不要急著更新,我們要先回復開機啟動磁區成我們希望的樣子。
  • sudo gedit /etc/grub.d/40_custom
  • 這是自定義開機選單,讓使用者加入可開機的分割區,功能很多請自行研究。
  • 在文檔最後下一行加入以下這段

menuentry “Ubuntu Installation CD” {
set root=(hd0,1)
chainloader +1
}

menuentry “Clonezilla” {
set root=(hd0,2)
chainloader +1
}

  • 20201017 補充一:重開機後開機選單會出現所追加的項目。但若無法順利啟動該分割區,筆者的案例是出現 invalid signature,那麼追加如以下設定應就會成功了。
    menuentry “name” –id ‘tagname’ { #注意是 – -id
    #若是 Windows NTFS 系統再追加以下這行


    #insmod chain (20230506 這又後來追加的,預設省略,若失敗,再嘗試將二模組都加入;前述者也是比照)
    # (此外,追加在選單頭加上 –id ‘tagname’,則下述的則可便利使用成 GRUB_DEFAULT=tagname;參考自鳥哥。)

    #insmod ntfs
    set root=(hdx,x)
    # 追加以下這行,而其中的 ABCD 是分割區的 UUID,透過 sudo blkid 來查詢到。注意各選項開頭都是雙 dash,即 – -no-floppy…
    search –no-floppy –fs-uuid –set ABCD
    chainloader +1
    }
  • 20201017 補充二:承上仍無法啟動該分割區,則進入 BIOS SETUP,檢查 boot 的相關設定,將 UEFI 改為 LEGACY。另外這類型的問題也可能發生在安裝 Ubuntu 時。皆起因於 BIOS/UEFI-LEGACY/boot sequence/fdisk-GPT-MBR 等合稱搭配的因素。
  • 這是告訴 Grub,在選單中新增一項,名稱是 Ubuntu Installation CD,位於 hd0,第一個分割區,chainloader 是指示跳躍到該分割區的第一個磁區,並把掌控權交給該磁區(執行)。另一項則是 Clonezilla。存檔離開。
  • 另外,開機選單的本身組態,適需要而修改:sudo gedit /etc/default/grub
    如下圖,像筆者會註解掉 GRUB_TIMEOUT_STYLE=hidden,那麼開機時就強制出現選單。將 GRUB_TIMEOUT=10 改為,例如 5,表示選單出現/倒數 5 秒。
    最重要的是,GRUB_DEFAULT=0,表示(從開機出現的選單中來數)預設由第 1 行的項目開機,換言之,往後您加入了一項,其排在第八行,那麼,當下您修改成 GRUB_DEFAULT=7,更新套用後,下次開機便由該項/分割區開機啟動。
  • 接著更新套用:sudo update-grub
  • 下一步,重新開機後,會出現由副系統所管理的開機選單,並新出現了 “Ubuntu Installation CD”(及 “Clonezilla”)兩行,選它來開機,因為我們副系統都已處理好了,我們正準備再一次安裝主系統。所以您會看到 Ubuntu Installation CD 的選單接著出現,選 Install Ubuntu。
  • 安裝主系統/同副系統操作,可選完整安裝。安裝完成後比照副系統的處理方式。
  • 以上,就醬。大功告成。
  • 接著,若有什麼東西省略,例如遠端登入副系統,請參考以前文章/不就是創建主系統的全記錄嗎。
  • 備註:至此,是由主系統 Grub 管理啟動開機選單,例如,我們若要改成副系統來管理,則只需開機進副系統,下:
    sudo grub-install /dev/sda,便會把它自己的(副系統) Grub 啟動管理程式建在 sda 上(覆蓋原先主系統所建的)。並接著下 sudo update-grub 即可。
  • 補充:當時在安裝主/副系統時並未指定 swap 分割區,故其預設都會建立檔案型的 swap 區,位於 /swapfile,筆者看到的預設大小是 2G。可更高,通常至少是記憶體的 1.5 倍。例如記憶體大小 16G,那就,例如設定成 32G,如下:
    取消 swapfile
    sudo swapoff /swapfile
    刪除之
    sudo rm /swapfile
    建立 swapfile,需等一會兒
    sudo dd if=/dev/zero of=/swapfile bs=32k count=1024k
    更改屬性成 0600
    sudo chmod 0600 /swapfile
    設定成 swap 區屬性
    sudo mkswap /swapfile
    啟用 swap 區
    sudo swapon /swapfile
    透過 free -h; swapon -s; swapon –show;(注意是 – – sh)來查看

結語

文章後段筆者懶得再抓圖了XD,不過應都有交待清楚。因為這個主題實務上耗用了筆者超級多的時間,包含將要寫的後一篇文章/可能會交待不清楚來龍去脈了因為前後經過太多天了。。。不過學到的一些指令用法應都會寫出來/那才是重點,及,從頭到尾都在目的主機上規劃是不太可能的別輕易嘗試的重點。
20201018 補充:以上筆者興致勃勃地說要新增一篇進階篇,但至今仍未寫出,可能也不會寫了,冷掉了 XD。簡單講,起因於目的為了在由光碟開機後(整個系統唯讀),作完整的更新後(故使用了 ram disk)再來安裝 Unetbootin,但如此會導致在記憶體有限的前提下因“完整更新”而完全消耗掉致未果。筆者在這樣的前提下一連串的嘗試克服與學習到的東西。

Categories: Linux

Tags: , ,

PHP Code Snippets Powered By : XYZScripts.com