我的原文鏈接:https://www.52pojie.cn/thread-1139724-1-1.html
很多事情,不能想當然,不能看到文檔或者書上寫的簡單盯另,就不親自做一遍。親自做的時候要出,才會發(fā)現你的機器會跳出各種各樣書上或者文檔上沒有寫到的情況捉偏。遇到困難迎難而上去解決倒得,才會有更大的收獲。
在之前的帖子里夭禽,我提到過在服務器上想測試UEFI安裝方式的rhel7升級8霞掺。這個帖子是關于這部分的詳細內容。
本文涉及到了一下內容:
1讹躯、RHEL的鎖定發(fā)行版本方法
2菩彬、LVM池的一些使用經驗
3、Linux系統(tǒng)Boom快照的使用方法(重點內容潮梯,網上搜了半天沒有教程骗灶,也許我是第一個寫boom使用教程的?)
4秉馏、熱插拔硬盤后rhel系統(tǒng)沒有識別耙旦,需要手動重新識別硬盤的命令
5、命令行模式下的grub手動加載啟動系統(tǒng)
6沃饶、GRUB2的一些較為深度的探索
說一下我當前系統(tǒng)的狀況吧母廷。我是win2012R2的系統(tǒng)轻黑,用UEFI的方式安裝了RHEL7.6。就結果而言琴昆,安裝完RHEL無法啟動氓鄙,也沒有GRUB,仍然直接進入WIN系統(tǒng)业舍。EFI分區(qū)里有了REDHAT的文件夾抖拦。我手動添加了UEFI啟動項,發(fā)現進入了GRUB命令行模式舷暮。又手動加載系統(tǒng)态罪,啟動成功后,制作了GRUB.CFG文件下面,才實現了GRUB的啟動复颈。在這個系統(tǒng)里,GRUB的各種文件一概都沒有沥割,重裝也不管用耗啦。官網下載了GRUB2手動編譯,安裝的EFI版本机杜。到現在帜讲,還是一堆BUG沒有解決……
一開始,我下載的是rhel7.7椒拗,結果發(fā)現不支持升級似将,官網說只支持7.6升級到8.1,并且提示通常會遇到Btrfs等相關問題需要解決蚀苛。我就又下載了rhel7.6在验,安裝完成后做了一些其他實驗(例如先用UEFI模式裝WIN后再裝RHEL導致/BOOT下的EFI跑到了WIN的EFI里面導致無法啟動RHEL,并且缺失grub如何修復實驗枉阵、自動雙擊打開NTFS译红、搭建KMS自動激活服務器、搭建WEB網頁服務器管理兴溜、docker管理侦厚、用bin升級BIOS與管理和診斷模塊、VNC控制等等拙徽,都是在這里實驗成功的)刨沦。
在想做的實驗差不多都做完了,接下來該做升級兼容性實驗了膘怕。
首先我把發(fā)行版本設定為7.6想诅,避免升級給升多了
subscription-manager release --set 7.6
這里提示,如果使用了版本鎖的話,要先清除掉
yum versionlock clear
升級到最新的7.6系統(tǒng)
yum -y update
由于我目前的系統(tǒng)来破,本身并不是純凈安裝(和WIN是雙系統(tǒng)篮灼,引導都是專門改過的),另外之前做實驗又裝了各種各樣的包徘禁。用leapp的默認腳本升級诅诱,沒有辦法升級。下面開始一步一步來處理問題送朱,做這個實驗應該又會學到不少知識娘荡。
由于當前系統(tǒng)的復雜性,我先用boom給root做一個快照驶沼,萬一壞了我也好有個補救措施炮沐。
首先安裝boom
yum install lvm2-python-boom
安裝完成后創(chuàng)建一個26G的快照分區(qū),起名字叫rollback76(快照分區(qū)是用來保存你的更改內容的回怜,超出快照空間的部分會導致快照失效大年。平時使用不需要如此之大,我也是為了不用計算可以無腦放置鹉戚。我當前系統(tǒng)本身有可能動用的快照空間鲜戒,我估計最多也就是10G)
(當時我是在WIN下壓縮出來30GB安裝RHEL,其中1G是boot抹凳,有3G是交換分區(qū),所以剩下26G的系統(tǒng)分區(qū)伦腐。加上換算數值之后的縮小部分的話赢底,系統(tǒng)分區(qū)的實際容量是25.36G,交換分區(qū)是3.93G)
lvcreate -s -L 26G??-n rollback76?rhel/root
(-s是指定我要快照rhel/root分區(qū)柏蘑,-L是指定分區(qū)大小26g幸冻,-n是制定名字叫rollback76,我的VG名字叫做rhel咳焚,注意修改成自己名字)
但是這時候提示vg的vfree空間不足,輸入vgs后看到vfree只有4mb
于是乎調整我的windows分區(qū)大小,從尾部挪出來30gb用來增加vg池的容量(調整選項里不能從頭部挪動只能尾部)
https://blog.51cto.com/yijiu/1329332
這篇文章里寫lvm2的使用很詳細
https://wiki.archlinux.org/index.php/GRUB_%28簡體中文%29#UEFI_Shell
這里詳細講解了GRUB2
我先是創(chuàng)建了一個分區(qū)孤页,然后在命令行下添加到池里
創(chuàng)建完分區(qū)之后洼怔,用這個分區(qū)創(chuàng)建pv分區(qū)(我的分區(qū)號是sda8)
pvcreate /dev/sda8
然后添加到vg組里(我的vg組名字叫做rhel)
vgextend rhel /dev/sda8
現在再用vgs就可以看到vfree已經空余出30gb,這回空間夠了
接下來用上面的命令又官,用26gb創(chuàng)建了一個用于boom快照的分區(qū)
lvcreate -s?-L 26G??-n rollback76?rhel/root
現在就可以創(chuàng)建快照了
boom create --title "Root Snapshot - 20200323" --rootlv rhel/rollback76
再次注釋:最后一句是我的vg池rhel里的rollback76分區(qū)延刘,大家再用的時候要改成自己的。
創(chuàng)建的速度幾乎是瞬間完成六敬,反饋信息里包含了設備ID碘赖、版本、內核、啟動ramfs普泡、還有l(wèi)vm.lv指向位置是rhel/rollback76播掷。
創(chuàng)建成功后,要把快照加到grub2里撼班,重新生成一下grub.cfg
grub2-mkconfig > /boot/grub2/grub.cfg
上面的是通常生成的位置叮趴。我之前裝雙系統(tǒng),引導在efi/EFI/redhat里面权烧,上次裝完后grub我在兩個地方都生成了眯亦,也不知道到底從哪里啟動的。這次我只寫這一個地方般码,試驗一下妻率。
試驗完成,啟動的是efi文件目錄下的grub.cfg板祝,我的啟動文件是shimx64-redhat.efi宫静,網上說64位系統(tǒng)用這個好。經過我自己試驗券时,用grubx64孤里、shimx64、shimx64-redhat.efi都是可以開機啟動的橘洞,似乎沒有什么分別捌袜。
最后boom list一下,可以看到我們的快照已經成功生成了炸枣。
快照一次具體占用多少空間我不知道虏等,因為分區(qū)改成這樣的快照模式之后,就無法加載了适肠,是快照專用分區(qū)霍衫。boom建議容量是要和現有root分區(qū)一樣或者大一點。
重啟電腦后侯养,看到我的啟動項里多出來一個Snapshots敦跌。我打開了一下,報了一行錯誤:
error: file /efi/redhat/x86-64-efi/blscfg.mod not found
這里報錯逛揩,是我自己復雜的系統(tǒng)構成導致柠傍,正常是可以顯示的。
通常這里會顯示出當前的快照息尺,用物理機安裝RHEL或者CENTOS的同學携兵,就可以用這種方式來實現像虛擬機一樣的快照功能,避免自己一不小心給弄錯哪里導致無法還原搂誉。在進入快照之后徐紧,仍然可以重啟進入普通狀態(tài),都是可以自己選擇的。
既然是經驗分享并级,那這里我多說一下刪除快照的方式:
首先拂檩,打開快照的列表:boom list
可以看到第一行寫的有BootID號,你找到你要刪除的ID號嘲碧,然后執(zhí)行刪除命令
boom entry delete d2c8369
(這里假裝d2c8369是你要刪除的ID號)
之后再運行boom list稻励,就能看到你刪除的快照已經不見了。
如果你想刪除快照分區(qū)愈涩,可以執(zhí)行下面的命令:
lvremove rhel/rollback76
然后會詢問是否刪除望抽,YES即可。
如果你從快照選項進入系統(tǒng)履婉,是臨時進入快照煤篙。
假如你快照完了之后,進入普通模式毁腿,做系統(tǒng)實驗辑奈、安裝各種軟件,意外把系統(tǒng)搞壞了已烤,想還原快照怎么辦呢鸠窗?下面說一下永久性回滾到快照狀態(tài)應該如何操作:
lvconvert --merge /dev/rhel/Root Snapshot - 20200323
(Root Snapshot - 20200323是我文章上面寫過的,我創(chuàng)建的快照的名字胯究。)
系統(tǒng)會提示稍计,快照當前是打開狀態(tài),下次重啟電腦會恢復到這個快照唐片。我們reboot重啟電腦丙猬,就回滾成功了》丫拢回滾完成后,這個快照就沒了庭瑰,因為變成了你正在使用的系統(tǒng)星持。有需要的話,可以重新再創(chuàng)建一個快照弹灭。
boom快照的使用方法督暂,我就先寫這么多。我在網上搜了一下穷吮,沒找到寫boom快照使用方法的教程逻翁,我這里就寫下來,方便想要給linux拍攝快照使用的朋友捡鱼,有個地方可以查看的到八回。
當然,想到此就實現快照功能的前提是正常安裝的情況下。我這個情況屬于特殊情況缠诅,會報一個錯誤溶浴,暫時無法實現快照恢復。
看樣子管引,應該是boom釋放或者生成了這么一個文件士败,用來恢復快照時候用的。在百度過后褥伴,這是RHEL8上的GRUB2生成的用來代替GRUB.CFG文件的一個東西谅将。
我試著把I386-PC文件夾改了X86_64-EFI的文件夾名字,復制到了EFI/redhat的下面重慢,開機后饥臂,果然仍舊無法進入快照,提示如下:
error: invalid arch-dependent ELF magic伤锚。
想來也是擅笔,畢竟這是傳統(tǒng)BIOS改為UEFI的工程,只復制個文件夾多半不行屯援。接下來接著研究猛们,如何改造。
首先用grub2-install /dev/sda試了一下狞洋,不行弯淘。提示無法嵌入。
很顯然吉懊,我的7系統(tǒng)應該還需要再找一下原因庐橙。經過一番努力研究過后,我終于發(fā)現借嗽,是我裝的RHEL出的問題态鳖。
剛安裝完成后,我就發(fā)現不能啟動恶导。網上都說浆竭,先裝WIN再裝LINUX,引導會被覆蓋導致WIN無法啟動惨寿。我恰好相反邦泄,我的WIN好好的,RHEL不能啟動裂垦。后來還是我手動添加的UEFI啟動項顺囊,增加EFI引導文件,才讓RHEL成功的啟動了蕉拢。
啟動過后特碳,我發(fā)現沒有grub的其他文件诚亚,沒有GRUB.CFG,普通模式下安裝的各種文件和文件夾都沒有测萎。奇怪了半天亡电,因為暫時對系統(tǒng)沒有什么影響,也就暫時沒管它硅瞧。直到現在試驗快照的時候份乒,頻頻提示缺文件,我打開我虛擬機里的RHEL腕唧,這些文件都好端端的呆在那里或辖。為什么我沒有?
重新安裝grub2枣接,提示還是缺文件颂暇。我打開他找文件的目錄后,發(fā)現了I386-PC的文件夾但惶。
這時候我才恍然大悟耳鸯。原來,我的WIN是UEFI安裝的膀曾,我的RHEL是用U盤安裝的县爬。而BIOS里并沒有什么傳統(tǒng)BIOS啟動或者UEFI啟動的選項。
在啟動列表里添谊,IBM的機器不會像普通機器一樣财喳,傳統(tǒng)啟動的就是名稱,UEFI啟動的會在前面有一個UEFI:XXX的標識斩狱。IBM的機器就是統(tǒng)一的一個設備名耳高。
我在安裝虛擬機的時候發(fā)現,RHEL無法在VMWARE里用UEFI的方式安裝所踊,為什么VMWARE不支持我并不清楚泌枪。
我看到我的U盤是應該是支持UEFI的,里面的EFI文件這些我都確認過秕岛,包含有grubx64.efi工闺。按理說里面是可以UEFI和BIOS兩種啟動都支持的。當然我自己確實沒有試過UEFI能否真的啟動它瓣蛀,只是猜測而已。我在裝系統(tǒng)的時候雷厂,是在BOOT選單里選擇的U盤啟動惋增,這樣一路安裝下來的。
下面我得找個設備測試一下改鲫,到底能不能UEFI安裝诈皿。我先用虛擬機測試一下林束,原本的虛擬機只有一個硬盤,肯定也是沒有空余空間讓我做快照的實驗的稽亏,又在vmware里添加一塊硬盤壶冒,相當于熱插拔了一塊硬盤。插上之后系統(tǒng)沒有識別截歉,需要運行下面的命令讓系統(tǒng)重新識別一下:
for i in /sys/class/scsi_host/host*/scan;do echo "- - -" >$i;done
現在再ls /dev/sd* 就可以看到有一塊新的硬盤了胖腾。
經過實驗,專門再UEFI下安裝了系統(tǒng)瘪松,GRUB2仍然是I386-PC版本咸作。說明我之前錯誤的誤會了IBM的UEFI,不是人家沒有加載U盤里的EFI去安裝RHEL宵睦,人家加載的沒有問題记罚,是RHEL在安裝的過程中出的問題。
如果要讓RHEL在安裝的時候可以安裝為x86_64-efi型的GRUB2的話壳嚎,不知道手動分區(qū)管不管用桐智,下次可以試一試。
無論是我操作失誤烟馅,還是一個沒有發(fā)現的BUG∷低ィ現在既然已經知道了是GRUB2的安裝方式有問題,那么我就手動下載一個GRUB2重新編譯并安裝焙糟,編譯完后發(fā)現還是I386-pc的口渔。我就去GRUB的官網GNU上查手冊,查到了可以手動指定編譯GRUB2為x86_64-efi的指令:
./configure --with-platform=efi --target=x86_64 --disable-werror --prefix=/usr/local/你的安裝位置
make
make install
(一開始我把安裝位置給寫錯了……默認安裝的話直接./configure --with-platform=efi --target=x86_64 --disable-werror就好了穿撮。disable-werror是關閉錯誤提示缺脉,你也可以開著沒關系)
編譯安裝完成后,就可以重新安裝GRUB了:
grub2-install
安裝顯示成功,顯示安裝的是x86_64-efi的版本
哈哈悦穿,重啟電腦~
進入了GRUB的命令行模式……
估計是我安裝完了之后攻礼,忘了grub2-mkconfig > /boot/grub2/grub.cfg
另外,因為我是改造版栗柒,所以我的cfg位置是grub2-mkconfig > /boot/efi/EFI/redhat/grub.cfg
好吧……命令行模式下的grub手動加載啟動系統(tǒng)礁扮。正好本文又多了一個知識點……
首先ls一下,看到了我的硬盤還有硬盤內的分區(qū)
我的EFI在1號分區(qū)瞬沦,BOOT文件在5號分區(qū)太伊,root位置在lvm:rhel下的root分區(qū)
首先設置root為BOOT分區(qū)
root=(hd0,gpt5)
然后加載內核并表明root的位置
linux /vmlinuz-3.10.0…………? root=/dev/rhel/root
initrd /initramfs-3.10.0………………img
(這里提示一下,省略號部分逛钻,是內核的名字僚焦,太長我就不寫了。linux和initrd的命令曙痘,有三個版本芳悲,分別是linux立肘、linux16、linuxefi名扛,initrd也是一樣的命名方式谅年。根據具體情況來選擇。我第一次系統(tǒng)崩潰的時候肮韧,i386版本的grub下我用的linuxefi融蹂,升級成efi版本后,這個命令沒了……我就改用linux命令來啟動了)
(root=/dev/rhel/root這條命令我解釋一下惹苗,不能照搬我的殿较。他的含義是,在dev里桩蓉,我有一個名叫rhel的vg池淋纲,池里有一個分區(qū)名字叫root。如果你不是用的lvm院究,或者改的名字不一樣洽瞬,要用自己的名字)
加載完畢,敲入boot回車业汰,系統(tǒng)正常啟動成功伙窃。
我趕緊先做個grub.cfg:grub2-mkconfig > /boot/efi/EFI/redhat/grub.cfg做完之后,我再試試快照好使不好使了样漆。
呵呵噠……還是grub命令行……莫非我重裝grub后为障,默認cfg的位置又變回去了?放祟!
再來一遍鳍怨,重新生成一個cfg到默認目錄去……
成功了,進入了系統(tǒng)選單跪妥。但是又遇到了一個新的問題………………
沒有發(fā)現linuxefi和initrdefi……
剛才還奇怪鞋喇,怎么變成linux了……我的linuxefi哪里去了。試驗了一下快照眉撵,返現還是找不到x86_64的目錄侦香。看來纽疟,路徑還是有問題啊……問題的關鍵就在于罐韩,我安裝的路徑查看了并沒有什么問題。說明我啟動的grub和我目錄里的grub不是一個grub……
接著折騰吧……
按E進入手動編輯模式污朽,把啟動兩條命令的名字先去掉efi伴逸,按F10先開機再說。
因為系統(tǒng)里裝了兩個grub,我還裝錯了兩次位置……系統(tǒng)里的grub太多了……我決定错蝴,刪除掉重新編譯一次吧……
全套搞完之后,重啟電腦颓芭。神奇的是顷锰,GRUB成了中文的了?亡问!還美化了邊框官紫?
快照仍舊無法啟動,不過這次不是找不到文件了州藕,而是提示和之前我復制粘貼那次一樣的錯誤束世。區(qū)別在于變成了中文提示:
無效的架構相關的ELF魔數,無法找到命令bls_import
進系統(tǒng)依舊是找不到linuxefi……
折騰還是要繼續(xù)折騰的床玻。目前的小結論就是毁涉,對于我剛開始的那種情況,我的WIN2012R2是UEFI啟動锈死,RHEL雖然安裝的是UEFI啟動模式贫堰,GRUB也安裝了linuxefi的啟動文件,但是實際啟動模式確實i386的待牵。整個就是一個混合體……因為是傳統(tǒng)與UEFI的混合體其屏,所以也會有個EFI的文件夾,里面包括了傳統(tǒng)啟動和UEFI啟動的所有文件缨该。因為UEFI和BIOS不可能同時啟動偎行,所以系統(tǒng)默認啟動了UEFI的文件。而我的RHEL實際上并沒有以UEFI的方式安裝(安裝的i386的文件包)贰拿,所以自然也就沒有那些專屬UEFI的文件蛤袒,只是有個GRUB2啟動器罷了。
好生無語啊……繼續(xù)探索吧……
經過多方探索壮不,linuxefi的名稱問題汗盘,無論哪種安裝模式下,grub生成的均是linuxefi名稱的命令询一。在GRUB里的mod列表里隐孽,只有l(wèi)inux和linux16,并沒有這條命令健蕊。至于為什么會這樣菱阵?linuxefi這個命令到底哪里來的?為什么i386可以執(zhí)行x86_64就不能運行缩功?經過研究和百度后晴及,我看到了很多遇到和我一樣的人,不過均沒有結果……
這個問題暫且擱置把嫡锌。
另一個虑稼,boom快照在UEFI啟動模式下無法啟動的問題琳钉,我似乎找出了一些端倪。boom是用blscfg文件來運作的蛛倦,這個文件會聯合/boot/loader/entries里的文件來實現傳統(tǒng)的啟動模式歌懒。當用UEFI啟動時候,雖然有blscfg.mod加載項溯壶,但是只要打開就會提示error: invalid arch-dependent ELF magic及皂。想想也是,用UEFI的啟動方式執(zhí)行傳統(tǒng)啟動模式里的東西且改,確實從道理上也行不通……
在經過長時間的搜索后验烧,發(fā)現遇到這個問題的,都是用的grub-efi型的啟動模式又跛,而解決方法都是刪掉EFI改為傳統(tǒng)的i386-pc模式碍拆。雖然這種方法可以打到我想快照的目的,但是違背了我折騰的精神效扫。傳統(tǒng)啟動可以倔监,UEFI不行,說明還是哪里有問題沒有解決菌仁。就目前而言浩习,暫時找不到解決方法……
這個問題就也先暫且擱置把济丘。
就我寫的快照部分的教程而言,傳統(tǒng)安裝模式安裝的RHEL或者CENTOS摹迷,肯定是可以用的。一直研究下去峡碉,就沒辦法接著完成這篇文章了~接著升級吧近哟,不要快照了,死就死了……
直接執(zhí)行l(wèi)eapp upgrade
在漫長的等待過后吉执,檢測結果提示地来,我的GRUB有問題戳玫,解決后才可升級……
問題內容里寫的是,在/etc/default/grub里沒有發(fā)現文件未斑。
創(chuàng)建了一個grub咕宿,問題解決。
運行l(wèi)eapp upgrade --debug再次檢測~
漫長的等待過后府阀,獲得了徹底堵死我升級之路的終極ERROR:
2020-03-24 21:30:06.559690 [ERROR] Actor: verify_check_results Message: Detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.
之前試過直接裝RHEL8.1,一直無法檢測到我的SAS控制器费就。照此顯示川队,我這臺服務器看來是升級無望了睬澡。內核驅動不支持,以我目前的能力煞聪,多半是解決不了了……
太累了,暫時先休息吧啄糙,隨后再研究云稚。
總結:
用UEFI版本的RHEL不僅是升級,處處有難題静陈,一步一個坎。建議大家還是用傳統(tǒng)啟動方式安裝比較好拐格,能省很多事情刑赶。
傳統(tǒng)版本的RHEL7.6升級8.1,操作并不復雜金踪,也沒遇到什么大問題,可能也是因為本來就沒安裝幾個包吧热康。在虛擬機里試驗成功了劣领,在UEFI安裝的實體機上,現在仍然沒有成功……
青山不改,綠水長流著觉。待我養(yǎng)精蓄銳一下惊暴,我們擇日再戰(zhàn)~