导航:首页 > 编程系统 > grub1命令行启动linux

grub1命令行启动linux

发布时间:2023-05-26 11:16:38

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,它是运行级别的设置文件。如果你打开它,可以看到第一行是这样的:

id:2:initdefault:

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命令行

阅读全文

与grub1命令行启动linux相关的资料

热点内容
win10删除c盘文件会删掉系统吗 浏览:785
qq的独立密码怎么取消 浏览:289
后台的商品数据在哪里看 浏览:795
不用网络加载的单机游戏有哪些 浏览:608
数据线插头怎么接头 浏览:577
网络加载视频失败是怎么回事 浏览:805
传奇账号在哪个文件夹里 浏览:346
百度app在哪里安装 浏览:587
如何设置路由器网络不断网 浏览:471
传到qq群里的文件怎么删除 浏览:861
索尼安卓71更新日志 浏览:234
怎么找手机里的垃圾app 浏览:540
2015蓝桥杯代码填空 浏览:698
安卓数据库dbexecSQL 浏览:227
doc重命名文件格式 浏览:728
getscreen截图工具下载 浏览:719
共识数据是什么时候开始的 浏览:96
数码管显示电压程序 浏览:479
数据库文件有哪个 浏览:543
途强储存在哪个文件夹 浏览:172

友情链接