# 1. 系統救援 ## 系統救援 - 1 :核心相關資料錯誤造成的問題 * 問題描述: 為了測試核心開機功能,不小心將 initramfs 檔案刪除,導致系統無法順利開機。 * 建議救援方式: 使用原版光碟處理,請進入系統救援的模式,並依據系統既有的核心版本,將 initramfs 重建 * 注意事項: (1)重建時 initramfs 時,應考慮 grub2 的原本設定檔 (可能會在哪裡?),以找到正確的檔名,方可順利成功開機喔。 (2)你可以使用任何一個 RockyLinux 9.x 的光碟做救援,但是需要注意不同的核心版本的問題! 開機後你會發現  強制關機  準備 Rocky Linux 9.x 安裝光碟或 USB 開機碟  開機時選擇「Troubleshooting」 > 「Rescue a Rocky Linux system」   選擇 1,讓系統嘗試掛載原來的根檔案系統。  光碟環境會提供`chroot /sysroot` 指令, 讓你進入原本系統的根目錄環境。  輸入『 df 』應該會看到原本系統資料通通掛載在 /mnt/sysroot 底下, 因此請使用『 chroot /mnt/sysroot 』指令來進入原本的系統。   先確認你系統使用的是哪一個核心版本 請記住你想要重建的版本(通常是最新的或你使用的那個)。  >[!Note] lib/modules >主要用於存放與當前或安裝內核版本相對應的核心模組 前往 /boot 目錄,你會發現沒有initramfs的檔案  ### 使用 `dracut` 工具來重建 `initramfs` 單純執行:`dracut -v` `-v`:列出詳細過程 會嘗試建立一個預設的 initramfs 檔案(通常是目前正在執行的核心的版本)  參考: [Unit13-13.2.5節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit13.php#ex) 開機檔案的救援問題 ## 系統救援 - 2 :管理員手滑造成的 root 屬性問題 * 問題描述: 因為幫用戶設定屬性,結果不小心『可能』修改到 root 這個帳號的相關屬性資料。 * 救援目標: (1)root 密碼恢復到 myRockyL9 (2)root 登入時可順利取得 bash shell 。 ```bash= echo 'myRockyL9' | passwd --stdin root usermod -s /bin/bash root ``` ```bash= # 檢查 /etc/passwd 中 root 欄位是否正確設定為: root:x:0:0:root:/root:/bin/bash ```   關機後重新調整設定  開機後按下方向鍵調整選單,使用舊的核心開機  之後你就可以拿回圖形化介面了 參考: [Unit07](https://linux.vbird.org/linux_basic_train/rockylinux9/unit07.php#7.2) 系統救援 # 2. 開機選單的處理 **修改目標 :** 1. Timeout 時間 設定為 `15 秒`。 1. 所有核心參數都需加入 `noapic` 參數。 1. 新增一個開機選單項目:回到 MBR(名稱內含 "MBR")。 1. 新增一個開機選單項目:進入圖形界面模式,需使用原有的核心版本,且選單名稱需包含 `mygraphical`。這個設定檔名請設定為 `custom.conf` ```bash= vim /etc/default/grub GRUB_TIMEOUT=15 ``` 使用以下指令更新 grub2 設定(若更改其他核心設定時): ```bash= grub2-mkconfig -o /boot/grub2/grub.cfg ``` :::info 執行 grub2-mkconfig -o /boot/grub2/grub.cfg 是重新生成 GRUB 2 的引導配置文件的標準方法,確保系統啟動選單和內核列表是最新的,反映當前系統狀態和設定 grub2-mkconfig 命令會根據系統中已安裝的內核和配置文件(如 /etc/default/grub 和 /etc/grub.d/ 目錄下的腳本)自動生成一個完整的引導配置文件。 而這個配置文件通常是 /boot/grub2/grub.cfg,它包含了啟動選單的所有條目和啟動參數。 使用這個命令可以在安裝新內核或修改啟動參數後,重新生成引導配置文件,使改動生效。 不建議直接手動編輯 /boot/grub2/grub.cfg,因為它是自動生成的,手動修改會在下次生成時被覆蓋 ::: ```bash= cd /boot/loader/entries/ cp d...-5.14.0-162.6.1.e19_1.x86_64.conf custom.conf vim custom. conf ``` :::info /boot/loader/entries/ 目錄是用於存放啟動項配置文件的位置。啟動項是引導加載器(例如systemd-boot)用來啟動不同作業系統或內核的選項 :::  參考: [Unit13-13.2.4節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit13.php#13.2) **grub2 設定檔維護** # 3. 檔案系統方面的處理,包含分割(注意primary, extended, logical的限制)、格式化、掛載等 ## A. 軟體磁碟陣列管理: 目前的系統有個出現磁碟出問題而快要損毀 (degrade) 的軟體磁碟陣列,找出並修復好該系統。 * 該磁碟似乎==已經被拔除一個 partition== * 找出系統中具==有的跟 RAID 內的 partition 容量相同==,且==沒有被使用的 partition==,那就是這個 RAID 缺乏的磁碟槽 (假設已經被修理好了) * 請==將該磁碟槽加入原本的系統中==,以救援這個磁碟陣列 (讓他變成 clean 的狀態,改變 degraded 的困擾) ```bash= # 查看所有區塊裝置(block devices) lsblk cat /proc/mdstat # /proc/mdstat 是 Linux 核心提供的一個虛擬檔案,用來顯示軟體 RAID 陣列的即時狀態 ```  | 欄位 | 說明 | | --------- | -------------------------------- | | `md5` | RAID 裝置名稱(`/dev/md5`) | | `raid1` | RAID 類型:鏡像(兩份相同資料) | | `vda5[1]` | RAID 成員之一,目前只有這一顆在線 | | `[2/1]` | 表示:這個 RAID 原本應有 2 個裝置,目前只有 1 個在線 | | `[_U]` | 表示:第一顆磁碟壞了或離線(`_` 是壞的,`U` 是正常的) | :::warning 這代表 RAID1 有一顆磁碟已經離線,現在系統只靠單一一顆磁碟在撐(資料還在,但沒有備援)。如果這顆也壞掉,資料會丟失。 ::: ```bash= # 確認是哪一顆磁碟離線,查看詳細資訊 mdadm --detail /dev/md5 ```  | 欄位 | 值 | 說明 | | ----------------- | --------------- | ------------------------ | | `Raid Level` | raid1 | 鏡像 RAID | | `Raid Devices` | 2 | 陣列應有 2 顆裝置 | | `Active Devices` | 1 | 實際在線的只有 1 顆 | | `State` | clean, degraded | 資料完整,但 RAID 結構不完整(缺少備份) | | `Working Devices` | 1 | 只有一顆硬碟有在用 | | `Failed Devices` | 0 | 沒有「標記為壞掉」的裝置(只是有一顆不在陣列中) | | `vda5` | 唯一活著的 RAID 成員 | | :::warning RAID 狀態是 「degraded(降級)」,也就是「目前只剩下一顆硬碟在運作」 ::: ```bash= mdadm --add /dev/md5 /dev/vda4 mdadm --detail /dev/md5 ``` 再次檢查你就會發現 `degraded` 不見了 參考: [Unit14-14.1.2節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit14.php#14.1) **Software RAID 的使用** ## B. LVM 的建立與 VDO 的應用 * 將目前這個系統當中的所有剩餘容量建立成為單一分割槽,並且將 ==system ID 設定為 LVM== * 利用上面這個分割槽,建立一個名為 `thevg 的 VG` ,且`PE 容量`為 ==8M== * ==將 /dev/thevg/thelv 加入到 VDO 的支援==,建立名為如下的 VDO 裝置 * 將 thevg 的==所有容量通通給予名為 thelv== 的 lv * `VDO 虛擬容量`為 ==20G== * 裝置使用 ==/dev/thevg/thelv== * 將 VDO 裝置`格式化`成為 ==XFS== 檔案系統 * 此裝置`開機後會立刻掛載`到 ==/data/vmdata== 目錄下 :::info VDO 的使用需要透過 vdo 以及 kmod-kvdo 模組的支援,因此得要安裝這兩個軟體才行。 ```bash= yum install vdo kmod-kvdo lvm2 ``` ::: ```bash= df -Th fdisk /dev/vda pvcreate /dev/vda6 vgcreate -s 8M thevg /dev/vda6 # 在 thevg 卷組建立一個名為 thelv 的 VDO 邏輯卷, # 實際空間約6GB,虛擬容量20GB,啟用壓縮和重複資料刪除 lvcreate -L 6G --vdo --name thelv --compression y --deduplication y --virtualsize 20G thevg ```  :::warning 目前核心是 EL9.1 版本系列(el9_1) 安裝的 kmod-kvdo 是 EL9.5 版本系列(el9_5) 這兩個版本的核心模組目錄不同,導致模組無法被載入。 ::: ```bash= ll /lib/modules ll /boot dracut -f /boot/initramfs-5.14.0-503.23.2.el9_5.x86_64.img 5.14.0-503.23.2.el9_5.x86_64 # 建立好之後要reboot ``` 這行指令會強制(`-f`)為這個 kernel 建立 `initramfs` 檔案,路徑跟檔名自己指定。 >[!Note] 提醒 >在執行 dracut 建立某個 kernel 的 initramfs 之前,`/lib/modules/<kernel-version>` 必須存在,而且要包含該 kernel 所需的驅動模組、設定等資料。否則 dracut 無法正確生成 initramfs。 ```bash= lvscan vdostats --human-readable ```   >`vdostats --human-readable` 是用來查詢 VDO 裝置統計資訊的工具,讓你用容易理解的容量單位來看設備狀況。 * 將 /dev/thevg/thelv 格式化為 xfs 檔案系統,掛載到 /data/vmdata 目錄下,並且開機自動掛載 ```bash= mkfs.xfs /dev/thevg/thelv vim /etc/fstab /dev/thevg/thelv /data/vmdata xfs defaults 0 0 ``` ```bash= mkdir -p /data/vmdata mount -a # 檢查 df -Th ``` --- ### ==建立 VDO 需要至少 ~5 GiB 實體空間==,因為我失敗過,以下是解救的方法 可以將 /dev/vda6 加大容量,然後把多的空間給 thevg,前提是磁碟還有可用空間可以擴展分割區。 >[!Caution] 警告 >調整現有分割區大小有風險,如果不是 LVM 裸裝到分割區,或有掛載點要非常小心。 ```bash= parted /dev/vda print resizepart 6 100% # 把 vda6 擴展到磁碟尾端 quit ``` ```bash= # 讓 OS 重新識別磁區大小變化 partprobe /dev/vda # 擴展 PV 的可用容量 pvresize /dev/vda6 # 確認 VG 容量已變大 vgdisplay thevg ``` `partprobe`:這個指令來自 parted 套件,用來讓 Linux 核心重新掃描磁碟的分割區表,更新系統內核對磁碟分割區的認知。 參考: [Unit14-14.4.2節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit14.php#14.4) **使用於虛擬機器磁碟應用的 VDO 機制** # 4. 系統效能處理 ## A. 請改用『 throughput-performance 』來動態調整系統效能 ```bash= # 先啟動這個服務 systemctl start tuned systemctl enable tuned systemctl status tuned ``` ```bash= tuned-adm list # 使用 throughput-performance tuned-adm profile throughput-performance # 顯示目前使用中的效能設定檔 tuned-adm active # 使用 tuned 的檢查功能 tuned-adm verify ``` 參考: [Unit13-13.1.7節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit13.php#13.1) **系統效能優化 - tuned, tuned-adm** **搜尋關鍵字 `throughput-performance`** ## B. 調整核心參數,讓每次開機都會修改成為底下這樣: * /proc/sys/vm/dirty_ratio 改成 40 * /proc/sys/vm/dirty_background_ratio 改成 5 * /proc/sys/vm/swappiness 改成 10 ```bash= vim /etc/sysctl.conf vm.dirty_ratio = 40 vm.dirty_background_ratio = 5 vm.swappiness = 10 ``` | 參數名稱 | 說明 | | ------------------------------- | -------------------------------------------- | | `vm.dirty_ratio = 40` | 當記憶體中髒資料(未寫入磁碟的資料)達到 40% 時,強制觸發寫入 | | `vm.dirty_background_ratio = 5` | 髒資料達 5% 時,背景開始寫入磁碟 | | `vm.swappiness = 10` | 控制系統多傾向使用 RAM 而非 swap,數字越低越偏向使用記憶體(預設通常是 60) | 這些調整主要針對 I/O 效能和記憶體使用效率做優化,特別適用於高效能伺服器環境。 ```bash= # 立即套用參數 sysctl -p /etc/sysctl.conf # 檢查(選用) cd /proc/sys/vm cat dirty_ratio cat dirty_background_ratio cat swappiness ``` 參考: [Unit13-13.1.5節](https://linux.vbird.org/linux_basic_train/rockylinux9/unit13.php) **搜尋關鍵字 `使用 /etc/sysctl.conf 處理核心參數`**
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up