㈠ linux 修復grub開機引導(ubuntu)
問題 : 有時候Linux系統/boot分區損壞時,啟動Linux系統時直接進入字元介面的grub引導,並沒有進入到系統或者開機顯示 error:unknow filesystem提示
解決辦法:
Linux開機自動會進入到grub引導介面(如果沒進入到grub引導介面可以按C鍵進入)
第一步:找到系統對應的扇區及/boot/grub目錄
注意 :假設是硬碟介面類型sd,hd0對應是sda hd1對應是sdb
(hd0)≠(hd0)
(hd1,gpt2)=(hd1,2)
ls (hd1,gpt2) 查看(hd1,gpt2)扇區信息(盤符、空間等)
ls (hd1,gpt2)/ 查看(hd1,gpt2)扇區下的內容(文件、文本等)
如果列印每個扇區目錄信息,會出現兩種情況:
1、ls (hd1,gpt2)顯示Unknow filesystem提示說明這個扇區不是我們要找系統分區
2、ls (hd1,gpt2)顯示/boot /proc等系統目錄信息說明這個扇區是我們要找的系統分區
如果找到對應扇區的系統分區,可能會遇到兩種情況:
1、 A目錄下有/boot/grub
2、A目錄下有/boot,B目錄下有/grub (此時在第二步載入系統內核要使用 set prefix=(hd1,gpt2)/grub 命令)
grub > ls
(hd0), (hd1), (hd1, gpt1), (hd2,gpt2), (hd3, gpt3)
第二步:載入系統內核
grub > set root=hd1,2 #此處不需要括弧,加括弧也可以,hd0和hd1是有區別
grub > set prefix=(hd1,2)/boot/grub
grub > linux /vmlinuz root=/dev/sdb2 #vmlinuz必須使用TAB補全(可能有後綴),注意sda或sdb需要看自己的實際情況
grub > initrd /initrd.img-xxx #TAB補全,多內核情況下版本需統一
grub > boot
提示 :如果在boot之後不幸進入BusyBox,說明參數設置有問題,可以仔細查看出錯的日誌,再重啟系統後重復執行第二步操作(重啟系統後上面設置的參數會被清空)。
第三步:修改grub引導
如果成功進入系統,記得要馬上信息grub引導,不然重啟系統後問題還是存在
sudo update-grub2 #grub2命令(高版本使用grub2)
$ sudo grub-install /dev/sdb
第四步:重啟系統
重啟系統後即可正常進入系統
reboot
㈡ 如何由linux進入grub
出現grub?
那你的系統還沒有啟動啊,grub只是一個引導程序。
一般情況下你要告訴grub你需要啟動那個驅動器的系統。
如果你的windows系統是安裝在c盤的
那麼你可以這樣啟動你的系統:
grub>rootnoverify
(hd0,0)
grub>chainloader
+1
就可以進入windows系統了。
如果你確定你安裝了linux的話,你需要制定
kernel
和
initrd
文件。
如下:
grub>kernel
(hd0,x)/boot/vmlinuz
ro
root=label=/1
(如果你不知道你的linux安裝在哪兒了,你只需要輸入到"(hd0,
"然後你按tab鍵,系統會自動列出你當前盤中的分區信息,一般linux都是安裝在第一個ext3分區的。假如是(hd0,2),你把x替換成2就可以了,下面同理)
grub>initrd
(hd0,x)/boot/initrd.img
grub>boot
就可以了,其中的x代表你安裝linux的分區。
㈢ Linux如何啟動流程Linux啟動流程詳解
在BIOS階段,計算機的行為基本上被寫死了,可以做的事情並不多;一般就是通電、BIOS、主引導記錄、操作系統這四步。所以我們一般認為載入內核是linux啟動流程的第一步。
第一步、載入內核
操作系統接管硬體以後,首先讀入 /boot 目錄下的內核文件。
我們查看一下,/boot 目錄下面大概是這樣一些文件:
$ ls /boot config-3.2.0-3-amd64 config-3.2.0-4-amd64 grub initrd.img-3.2.0-3-amd64 initrd.img-3.2.0-4-amd64 System.map-3.2.0-3-amd64 System.map-3.2.0-4-amd64 vmlinuz-3.2.0-3-amd64 vmlinuz-3.2.0-4-amd64第二步、啟動初始化進程
內核文件載入以後,就開始運行第一個程序 /sbin/init,它的作用是初始化系統環境。
由於init是第一個運行的程序,它的進程編號(pid)就是1。其他所有進程都從它衍生,都是它的子進程。
第三步、確定運行級別
許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啟動的程序。但是,不同的場合需要啟動不同的程序,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。
Linux預置七種運行級別(0-6)。一般來說,0是關機,1是單用戶模式(也就是維護模式),6是重啟。運行級別2-5,各個發行版不太一樣,對於Debian來說,都是同樣的多用戶模式(也就是正常模式)。
init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。如果你打開它,可以看到第一行是這樣的:
initdefault的值是2,表明系統啟動時的運行級別為2。如果需要指定其他級別,可以手動修改這個值。
那麼,運行級別2有些什麼程序呢,系統怎麼知道每個級別應該載入哪些程序呢?回答是每個運行級別在/etc目錄下面,都有一個對應的子目錄,指定要載入的程序。
/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d上面目錄名中的"rc",表示run command(運行程序),最後的d表示directory(目錄)。下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程序。
$ ls /etc/rc2.d README S01motd S13rpcbind S14nfs-common S16binfmt-support S16rsyslog S16sudo S17apache2 S18acpid ...可以看到,除了第一個文件README以外,其他文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啟動的意思(啟動腳本的運行參數為start),如果這個位置是字母K,就代表Kill(關閉),即如果從其他運行級別切換過來,需要關閉的程序(啟動腳本的運行參數為stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第一個啟動的程序是motd,然後是rpcbing、nfs......數字相同時,則按照程序名的字母順序啟動,所以rsyslog會先於sudo啟動。
這個目錄里的所有文件(除了README),就是啟動時要載入的程序。如果想增加或刪除某些程序,不建議手動修改 /etc/rcN.d 目錄,最好是用專門命令進行管理。
第四步、載入開機啟動程序
前面提到,七種預設的"運行級別"各自有一個目錄,存放需要開機啟動的程序。不難想到,如果多個"運行級別"需要啟動同一個程序,那麼這個程序的啟動腳本,就會在每一個目錄里都有一個拷貝。這樣會造成管理上的困擾:如果要修改啟動腳本,豈不是每個目錄都要改一遍?
Linux的解決辦法,就是七個 /etc/rcN.d 目錄里列出的程序,都設為鏈接文件,指向另外一個目錄 /etc/init.d ,真正的啟動腳本都統一放在這個目錄中。init進程逐一載入開機啟動程序,其實就是運行這個目錄里的啟動腳本。
下面就是鏈接文件真正的指向。
$ ls -l /etc/rc2.d README S01motd -> ../init.d/motd S13rpcbind -> ../init.d/rpcbind S14nfs-common -> ../init.d/nfs-common S16binfmt-support -> ../init.d/binfmt-support S16rsyslog -> ../init.d/rsyslog S16sudo -> ../init.d/sudo S17apache2 -> ../init.d/apache2 S18acpid -> ../init.d/acpid ...這樣做的另一個好處,就是如果你要手動關閉或重啟某個進程,直接到目錄 /etc/init.d 中尋找啟動腳本即可。比如,我要重啟Apache伺服器,就運行下面的命令:
$ sudo /etc/init.d/apache2 restart/etc/init.d 這個目錄名最後一個字母d,是directory的意思,表示這是一個目錄,用來與程序 /etc/init 區分。
第五步、用戶登錄
開機啟動程序載入完畢以後,就要讓用戶登錄了。
一般來說,用戶的登錄方式有三種:
(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄
這三種情況,都有自己的方式對用戶進行認證。
(1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,核對密碼(linux還會再多運行一個身份核對程序/etc/pam.d/login)。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啟動這個shell。
(2)ssh登錄:這時系統調用sshd程序(linux還會再運行/etc/pam.d/ssh ),取代getty和login,然後啟動shell。
(3)圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器為gdm(GNOME Display Manager),然後用戶輸入用戶名和密碼。如果密碼正確,就讀取/etc/gdm3/Xsession,啟動用戶的會話。
第六步、進入 login shell
所謂shell,簡單說就是命令行界面,讓用戶可以直接與操作系統對話。用戶登錄時打開的shell,就叫做login shell。
linux默認的shell是Bash,它會讀入一系列的配置文件。上一步的三種情況,在這一步的處理,也存在差異。
(1)命令行登錄:首先讀入 /etc/profile,這是對所有用戶都有效的配置;然後依次尋找下面三個文件,這是針對當前用戶的配置。
~/.bash_profile ~/.bash_login ~/.profile需要注意的是,這三個文件只要有一個存在,就不再讀入後面的文件了。比如,要是 ~/.bash_profile 存在,就不會再讀入後面兩個文件了。
(2)ssh登錄:與第一種情況完全相同。
(3)圖形界面登錄:只載入 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 不管有沒有,都不會運行。
第七步,打開 non-login shell
老實說,上一步完成以後,Linux的啟動過程就算結束了,用戶已經可以看到命令行提示符或者圖形界面了。但是,為了內容的完整,必須再介紹一下這一步。
用戶進入操作系統以後,常常會再手動開啟一個shell。這個shell就叫做 non-login shell,意思是它不同於登錄時出現的那個shell,不讀取/etc/profile和.profile等配置文件。
non-login shell的重要性,不僅在於它是用戶最常接觸的那個shell,還在於它會讀入用戶自己的bash配置文件 ~/.bashrc。大多數時候,我們對於bash的定製,都是寫在這個文件裡面的。
你也許會問,要是不進入 non-login shell,豈不是.bashrc就不會運行了,因此bash 也就不能完成定製了?事實上,Debian已經考慮到這個問題了,請打開文件 ~/.profile,可以看到下面的代碼:
if [ -n "$BASH_VERSION" ]; then if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi上面代碼先判斷變數 $BASH_VERSION 是否有值,然後判斷主目錄下是否存在 .bashrc 文件,如果存在就運行該文件。第三行開頭的那個點,是source命令的簡寫形式,表示運行某個文件,寫成"source ~/.bashrc"也是可以的。
因此,只要運行~/.profile文件,~/.bashrc文件就會連帶運行。但是上一節的第一種情況提到過,如果存在~/.bash_profile文件,那麼有可能不會運行~/.profile文件。解決這個問題很簡單,把下面代碼寫入.bash_profile就行了。
if [ -f ~/.profile ]; then . ~/.profile fi這樣一來,不管是哪種情況,.bashrc都會執行,用戶的設置可以放心地都寫入這個文件了。
Bash的設置之所以如此繁瑣,是由於歷史原因造成的。早期的時候,計算機運行速度很慢,載入配置文件需要很長時間,Bash的作者只好把配置文件分成了幾個部分,階段性載入。系統的通用設置放在 /etc/profile,用戶個人的、需要被所有子進程繼承的設置放在.profile,不需要被繼承的設置放在.bashrc。
順便提一下,除了Linux以外, Mac OS X 使用的shell也是Bash。但是,它只載入.bash_profile,然後在.bash_profile裡面調用.bashrc,而且不管是ssh登錄還是在圖形界面里啟動shell窗口都是如此。
㈣ grub啟動程序配引導置及命令行介面詳解
Linux系統的啟動引導程序有LiLo和grub,但由於LILO的缺陷——只能識別0-1023范圍內的柱面構成的分區中的內核文件,因此目前已逐漸被grub所取代,本篇主要圍繞grub legacy開展描述。
grub全稱為Grand Unified Bootloader,grub的版本經過多年的發展,其現有版本分為grub 0.X(grub legacy) 和grub 1.X(grub 2)。其中目前Centos 7已經採用grub2位啟動引導程序,Centos6和Centos5 普遍沿用grub legacy版本。
grub引導程序分為三個階段:
1、stage1:用於啟動Boot loader來載入stage2的內容至內存中;
2、stage1_5:其能夠識別內核和stage2所在的分區的文件系統格式類型,幫助引導stage2.
3、stage2:讀取grub.conf 配置文件,並實現引導功能的擴展;
在Linux系統中,與系統啟動相關的文件均存儲在/boot目錄下,如grub、vmlinuz、initramfs等等。
與grub相關的配置文件包括:/etc/grub.conf和/boot/grub/grub.conf,其實/etc/grub.conf是指向/boot/grub/grub.conf的軟鏈接,grub程序在引導啟動時會讀取這個配置文件並按照該文件的配置參數引導啟差悉動系統灶慶慎。
通常其內容為:
default=0 :表示有多個grub引導菜單時,選擇哪一個作為默認啟動引導菜單,default=0表示默認使用第一個title菜單中的配置;
timeout=5 :在grub選擇菜單中,5秒內,如果用戶沒有選擇任何一個title,則使用default中指定的titile菜單中的配置進行啟動。
splashimage :指定引導菜單中的背景圖片的路徑;
titile :指定title菜單到的名稱;
root :表示kernel和initrd文件所在的分區路徑,而不是「根分區」;其設置格式為:root (hd#,#),硬碟均會被識別為hd,第一個#表示第幾個硬碟,從0開始;地第二個#表示同一個硬碟上的不同分區,也使用數字標識,從0開始;
kernel :通常用於指定要運行的內核文件路徑,如:/vmlinuz-2.6.32-642.el6.x86_64;另外也可在其後設置相關的內核參數,如:ro表示只讀,root表示指定根分區所在路徑,關閉selinux等等;
initrd :為內核運行指定其可用的ramdisk文件,其版本須與內核版本相一致;
1、提供引導菜單,並提供互動式的命令行介面;在菜單界面,按e可進入編輯模式,用於編輯菜單,按c可以進入命令模式;
2、載入用戶選擇的內核或操作系統,並允許傳遞相應的內核參數給內核;可選擇隱藏此菜單;
3、為菜單提供保護機制,可為編輯菜單設置認證或為啟用內核或操作系統進行認證;
在系統開機啟動過程中,有幾秒的過渡頁面,此時按任意鍵可進入到菜單頁面中:
進入到菜單頁面後,如果存在著多個內核,此時可按上下鍵選擇需要啟動的內核,或者按e進入內核編輯模式,按c可進入grub的命令行模式。
在菜單頁面按c即可進入命令行介面,在此命令行介面, 我們可以配置相關的grub設置,如指定root 路徑、kernel文件的路徑等等。grub命令行介面的常用指令有:
grub程序提供了相關的認證機制用於系統保護,如防止惡意用戶隨意通過單用戶模式修改root密碼或啟動其他內核。
設置認證的方法為:在相應的grub.conf配置文件中,添加passwd -md5 STRING。
如下圖為提供grub菜單的編輯認證:
下隱敬述為為對應的內核啟動提供密碼認證:
1、使用grub-install命令
DEVICE:安裝的目標磁碟;
--root-directory=DIR:指grub映像文件的存放位置,默認為當前系統根目錄。grub-install會在指定的目錄下創建boot/grub/的層級目錄,並生成相關的grub文件生成在DIR/boot/grub/下。
2、在grub命令行下安裝grub
輸入命令grub進入grub命令行:
在grub程序出現損壞時,我們還可以利用上述方法對其進行修復:
也可以通grub命令行來修復grub程序:
方法一:利用安裝光進入救援模式進行grub修復
插入光碟,進入救援模式。
在完成相關的硬體檢測及引導程序,依次設置語言、鍵盤及是否啟動網路,接著系統會查找根分區,隨後選擇continue以讀寫的方式掛載根文件系統。
點擊OK,最後選擇start shell。
至此grub已修復完成,系統應能正常啟動。
方法二:將損壞的硬碟拆卸掛載到其他Linux系統上進行修復
修復完成後,將對應硬碟拆卸掛載回原來的系統,再啟動驗證即可。
補充:如何在Linux系統不重啟下添加或移除硬碟。
添加命令為:
移除命令為:
這兩個命令的成功與否在於對應的數字ID是否正確,其格式為:
㈤ Linux( bootloader)啟動操作系統過程
Linux Booting Process:
(1) BIOS
功能:執行計算機系統完整性檢測;通電液凳自檢;搜索/載入/執行 boot loader程序。
一旦 boot loader 程序被探測到,並且載入到內存,BIOS會把控制權交給它。
(2) MBR
MBR位於引導盤(Bootable Disk)的第一個扇區(512B)。
通常是在 /dev/sda 或者 /dev/hda 。
注意:引導盤(bootable disk)和引導分區(bootable partition)的區別。
(3) GRUB
GRUB = Grand Unified Bootloader
如果在系統中安裝有多個內核鏡像,你可以選擇某一個被執行。
GRUB展示了一個啟動畫面,等待幾秒,如果你不輸入任何字元,它將會按照grub配置文件的規定載入默認的內核鏡像。
Grub配置文件在: /boot/grub/grub.conf
它包含了內核和initrd.img
(4) Kernal
(注意Kernal和kernel不一樣)
Kernal按照grub.conf文件的規定,掛載根文件系統。
一旦kernal啟動,它第一件事情就是執行:sbin/init 進程。
initrd是被kernel用做臨時根文件系統,直到Kernal掛載了根文件系統。
(5) INIT(凳埋團Initilization)
根據 /etc/inittab 文件決定Linux運行層級,運行級別決定了哪個初始化程序(Initial Programs)被載入到啟動項。
(6) Run Level
根據你的運行級別的設定,操作系統會執行下來對應的文件夾下的程序:
Linux的7個棗橘運行級別(Run levels):
標準的Linux運行級別為3或者5,如果是3的話,系統就在多用戶狀態;如果是5的話,則是運行著XWindow系統。不同的運行級別有著不同的用處,也應該根據自己的不同清晰來設置。例如,如果丟失了root口令,那麼可以讓機器啟動進入單用戶模式來設置。
如果是使用S(Start)開頭的程序,那麼是用在啟動的時候,
如果是使用K(Kill)開頭的程序,那麼是用在關機的時候。
㈥ Linux怎麼進入grub啟動菜單
啟動的時候按住shift鍵,就會出現grub菜單,按e鍵可以編輯某個條目。
㈦ 簡述grub啟動引導程序配置及命令行介面詳解
1、grub 命令行介面(一次性設置)
系統啟動過程中按 c 鍵可進入grub 命令行界面,就可以自定義grub 啟動參數了。常用命令有:
help ##查詢幫助
help COMMAND ##查詢命令幫助
ls : 顯示系統磁碟及分區情況
root (hd#,#) :將hd#的第#號分區設置為根分區;(CentOS 6)
kernel /PATH/TO/KERNEL_FILE : 設定本次啟動用到的內核文件(CentoS 6)
set root=(hd#,msdos#) : 將第#塊硬碟的第#個分區設置為根分區;(CentOS 7)
linux /PATH/TO/KERNEL_FILE : 設定本次啟動用到的內核文件(CentoS 7)
r oot=/dev/mapper/cl-root ro init=/bin/sh : 指明根分區路徑;以ro/rw格式掛載; 第一個運行的程序是bash ;
initrd /PATH/TO/INITRAMFS_FILE_FILE : 為選定的內核提供額外的ramdisk ;
CentOS 7:
然後boot 重啟,將會出現以下定製的系統了:
CentOS 6:
2、grub 配置文件: 永久配置是要在grub 的配置文件中配置的;
CentOS 6 : /boot/grub/grub.cfg
default=0 : 設置默認啟動菜單項;編號從0開始;
timeout=5 : 設置菜單項等待被選擇的時長
title CentOS Express ##定義內核菜單選項
root (hd0,0)
kernel /vmlinuz-VERSION-release ro [selinux=0] root=/dev/mapper/vg0-root (根據系統設置)
initrd /initramfs-VERSION-release.img
CenOS 7 : /boot/grub2/grub.cfg (/etc/grub2.cfg ), 不要直接修改 ;
grub2-mkconfig會調用/etc/grub.d中的腳本去搜集/etc/default/grub 中的配置參數,生成/etc/grub2.cfg ;
/etc/default/grub中的參數被修改,就可以使用grub2-mkconfig重新生成/etc/grub2.cfg
#grub2-mkconfig –o /boot/grub2/grub.cfg
3、給Grub 添加保護
CentOS 6:
配置項:
default=0
timeout=5
password [--md5] STRING : 菜單編輯認證 ;
title TITLE :
root (hd#,#) :
kernel /PATH/TO/VMLINUXZ_FILE [PARAMETERS]
initrd /PATH/TO/INITRAMFS_FILE
password [--md5] STRING : 啟動選定的內核或操作系統時需要進行認證;
CentOS 7:
a.添加grub菜單和命令行的密碼認證:
>>> grub2-setpassword ##輸入密碼兩次生成/boot/grub2/user.cfg 文件
>>> cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CC6F56BFCFB90C49E6E16DC7234.....
>>>grub2-mkconfig -o /boot/grub2/grub.cfg ##重新生成配置文件
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-
Found initrd image: /boot/initramfs-0-rescue-.img
done
>>> shutdown -r now
再次鍵入e 或 c ,系統都會要求輸入用戶名和密碼的;
rel: https://www.thegeekdiary.com/centos-rhel-7-how-to-password-protect-grub2-menu-entries/
b. 刪除grub 密碼保護(刪除掉user.cfg,重新生成配置文件即可)
>>>rm -rf /boot/grub2/user.cfg
>>>grub2-mkconfig -o /boot/grub2/grub.cfg
>>>reboot
㈧ 如何用命令行啟動Linux下的虛擬機
1.如果正殲斗是ubuntu 12.04 或者之後的版本,修改/etc/default/grub 文件:
打開終端輸入:
sudo nano /etc/default/grub //nano 是最簡單的文本編輯器,你也可以使用vim
找到現面這改配行:
GRUB_CMDLINE_LINUX_DEFAULT=」quiet splash」
修改為:
GRUB_CMDLINE_LINUX_DEFAULT=」舉磨text」
更新grub配置文件:
sudo update-grub
重啟即可
2.如果是fedora 15之後的版本:
打開終端輸入:
su //獲得root許可權
systemctl enable multi-user.target
reboot
㈨ linux下啟動按什麼鍵進入grub選項
方向鍵,進入grub選擇項
按E編輯啟動菜單
編輯完畢回車返回grub菜單
按B啟動linux
如果在grub菜單下按C直接進入grub命令行