Fedora分区扩容以及如何修复引导
起因
Linux分區過小,想將Windows下的一個不用的區分出一部分空間來進行擴容。直接在Windows下將D盤減小容量后,重啟出現grub rescue字樣,無法進入系統。
解決過程
首先檢索grub rescue,結果很多,總結步驟如下:
1.先輸入ls回車,查看顯示的內容。如:
(hd0) (hd0,msdos14) (hd0,msdos13) (hd0,msdos12)....2.然后找出哪個盤安裝了系統,嘗試所有的,直到返回內容不再是error: unknown filesystem.為止。
ls (hd0,msdos1)/boot ls (hd0,msdos2)/boot3.如果出現包含img文件的目錄,即為linux系統所在目錄,也是grub2所在目錄
4.然后設置grub2啟動
set root=(hd0,msdos13)/boot/grub2 set prefix=(hd0,msdos13)/boot/grub2 insmod normal normal5.便進入之前的引導界面了。
但是這只是臨時的辦法,還需要修復grub之后才能完全解決這一問題,否則重啟還會出現一樣的界面。這里我因為還要進行擴容,所以就沒有直接修復grub,而是先研究擴容去了。
既然grub的問題可以解決,那么我就更大膽了,直接在windows下,用diskdirector將swap分區移動到空閑分區右邊,使得空閑分區與linux主分區相鄰,便于之后的擴容。
但是這里一個很尷尬的問題是,diskdirector沒法直接對linux的主分區進行擴容!在容量的設置上是鎖死的!不知道是由于不支持ext4的原因還是本就如此。
沒辦法,只好換別的工具了。
在之前查如何擴容時,有資料說用fdisk是無法直接進行擴容的,還提到了一個工具叫Gparted,可以用其提供的LiveCD進行U盤啟動從而調整分區大小,于是我如法炮制,很輕松地在U盤系統里將主分區完成了擴容。
正當我滿心歡喜打算按照之前的方法進入系統再修復grub的時候,發現Linux系統卡在“Reached Target”這樣一句話,無法進入系統,這真是當頭一桶涼水。
Reached target Initrd File Systems Reached target Initrd Default Target進行檢索之后發現如果等幾分鐘,系統會出現別的錯誤信息,我的大致是
ALERT! /dev/disk/by-uuid/xxxxxxxxx does not exist. Dropping to a shell initramfs:_沒辦法,繼續檢索,試驗解決方案。
在這期間,我也明白了這是什么緣故。因為我改變了swap分區的大小和位置(之前在windows下移動了swap,也改變了大小),導致swap分區的uuid失效了,而linux啟動過程中是會按照之前記錄的swap分區的uuid進行掛載等操作的,比如/etc/fstab文件里就進行了掛載操作,但是應該不止于此,因為我在liveCD里改了這個文件也并沒有修復問題。
那么最終的解決方案是在這里,Ubuntu下的代碼為:
sudo mount /dev/sda1 /mnt sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt update-initramfs -u update-grub reboot我又滿心歡喜地去LiveCD里進行如法炮制,結果在chroot的時候又報錯了,提示執行文件格式不正確。
好吧,查了一會之后發現是Gparted提供的liveCD是32位的,不能對64位系統進行chroot操作…
沒辦法,找別的LIVECD吧。在找的過程中,發現一個很好的網站,The LiveCD List · The LiveCD List,列出了一系列的LiveCD和其大致大小以及用途,通過RESCUE標簽和是否有64位進行篩選后,再進行U盤制作,啟動測試,發現有些無法正常啟動,OpenSUSE的RESCUE鏡像無法進入桌面,CentOS直接進入也會黑屏,還是調成Basic Graphic模式才能進。
搞了這么久總算快弄完了,在CentOS里輸入chroot,成功!但是,接下來兩命令又報錯…
好吧,這是Ubuntu的命令,我得找Fedora下等價的,如下:
dracut -f /boot/initramfs-currentimage grub2-mkconfig -o "$(readlink /etc/grub2.conf)"然后重啟,還得再輸一遍
set root=(hd0,msdos13)/boot/grub2 set prefix=(hd0,msdos13)/boot/grub2 insmod normal normal終于,成功進入了系統!
之后一點收尾工作,修復grub2,命令如下(因為我的系統在第二塊硬盤上,所以是sdb,另外這里不需要寫數字,比如sdb2之類的):
sudo /sbin/grub2-install /dev/sdb感想
像grub rescue這種基礎的問題,Baidu就能很好提供解決方案了,但是像找update-initramfs和update-grub在Fedora下的等價命令,還是得靠Google,用AOL也行。
以前弄過Windows PE做的U盤系統,現在都能做Linux的U盤系統了,感覺自己這么幾年還是學到了一點東西嘛!
總結
以上是生活随笔為你收集整理的Fedora分区扩容以及如何修复引导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html简洁漂亮的个人简历,个人主页,个
- 下一篇: 孙陶然-36条军规