基本工作制度细节:

我使用Ubuntu 12.04服务器CD安装服务器.

我有4个磁盘.在所有磁盘上,我执行了以下操作,类似于this howto:

>创建了一个2GB的交换分区
>创建了256 GB /启动分区
>创建了64 GB RAID10分区(用于root)
>创建了一个占用剩余空间的大型RAID10分区

我将启动格式化为ext3.我在root和大分区上设置了RAID10.我格式化了根一个ext4.我在大文件上创建了一个逻辑卷,并将其格式化为ext4.

由此产生的系统工作正常,并启动良好.

问题详情:

然后我决定记录失败程序.作为第一步,我决定重新安装grub.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However,blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However,blocklists are UNRELIABLE and their use is discouraged..

所以看起来它失败了,但似乎它放弃了,并没有做出改变.所以我重新启动了.启动失败.它只是挂着一个黑色的屏幕,闪烁的光标约4行.如果我按住“Shift”开机,我会在光标左侧显示“GRUB”字样,但没有交互式提示.

此时,我使用boot-repair-disk生成此报告:
http://paste.ubuntu.com/966531/

请注意,在上面的报告中,它表示引导加载程序没有指向core.img的正确扇区. (sda是虚拟cd; sdb是启动盘; sdc是sdb的镜像,但是没有镜像启动,只有一个单独的无关分区,格式化为ext3; sdd和sde有空间用于启动但是没有格式化)

然后我从ubuntu服务器CD启动,启动救援系统,并发出以下命令,完成没有错误(其中sda是虚拟CD,b,c,d,e是a,c的磁盘),在之前的grub命令中d:

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

此时,我使用boot-repair-disk生成此报告:
http://paste.ubuntu.com/966561/

请注意,关于core.img的问题已经消失.它似乎指向正确的部门.

现在如果我尝试启动,我会得到grub提示.如果我运行“set”,我会看到root被找到并设置.如果我运行“ls /”,我会从raid卷中看到我的根目录,包括vmlinuz内核文件.如果我输入“ls / vmlinuz”,则表示“错误:找不到文件”.如果我使用“linux”命令尝试加载内核,它会说同样的错误.如果我使用“ls -l /”,则不会列出vmlinuz文件.

过于冗长的细节,如果您想遵循:

我注意到也没有/boot/grub/grub.cfg,所以我跑了

# grub-mkconfig -o /boot/grub/grub.cfg

但问题仍然存在.

如果我使用“gptsync”工具,则此行为不会发生任何变化.

启动修复磁盘不会修复系统,因为它希望我使用支持EFI的BIOS启动.我简要地研究过这个,但我不知道它是如何工作的.我在我的启动选项中找到了一个UEFI shell,但我对此一无所知,也没有看到如何从那里更改启动(例如从该EFI shell启动CD).

我也读过this page,但Ubuntu没有附带“grub”命令,所以我不能完全遵循它.我可以简单地安装该命令,但我更好奇的是找出Ubuntu安装程序如何安装它而不是设置不同.它是否使用了阻止列表?

这是parted的输出,同时在boot-repair-disk上启动(这里sdb是第一个硬盘,sda从磁盘启动时,“boot”在第二个粘贴链接中更改为“bios_grub”):

Model: ATA Hitachi HUA72303 (scsi)
disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

这是一个不相关的超级旧虚拟机进行比较(对于不熟悉boot-repair-disk的人):
http://paste.ubuntu.com/966799/

这是来自问题系统的最新粘贴,在运行上面的grub-mkconfig之后,还将“bios_grub”设置回“boot”.
http://paste.ubuntu.com/966808/

比较两者,这看起来很有趣:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting Failed:   mount: unkNown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

看起来raid有引导文件,sdb2没有格式化. (尽管如此,系统在运行grub-install之前启动).从救援CD中,“mount -t ext3 / dev / sdb2 / boot”失败.但有意义的是,这会使事情变得混乱,因为grub明确地使用了分区2(在partos命令中将2设置为bios_grub).

所以我做了这样的事情:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

然后重新启动,我再次出现黑屏,没有提示.
http://paste.ubuntu.com/966848/

所以在这一点上,我的猜测是,当设置bios_grub时,grub不会安装到MBR,而不是安装在ext3上的ext3文件系统,而是安装在分区本身上,好像它是EFI …这显然会搞乱那里的ext3文件系统.从我关于EFI的简短阅读中,听起来像EFI假设第一个分区是引导,但在我的情况下,第一个分区是交换,它也应该是FAT而不是无法安装的东西…所以既然这样做很少/没有感觉,我仍然完全失去了一点线索. [编辑:现在我有一个线索…跳过一点更新]

现在当我在boot-repair-disk点击修复时,它会问别的东西.上次错误被隐藏在窗口下面,我不得不拖走另一个看到它.这次主窗口消失了,新窗口显示:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo,flag). Do you want to continue?

所以我点击了是,它说它已成功修复,并创建了另一个粘贴:
http://paste.ubuntu.com/966862/

但我仍然有一个闪烁光标的黑屏.

现在我的理论是,引导被一个非胖的非EFI东西覆盖,这只是grub代码,否则它将会出现在0-63之前的扇区中.我很幸运地在这个页面上发表了一个非常明确的声明,这可能完成了我对这一切意味着什么的理解.然后在我发现之后,杰里米发布了一个答案,如果这是真的,那就确认这是缺失的关键概念.
http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

问题:

到底是怎么回事?为什么grub无法启动?为什么说“找不到档案”?

为什么grub不想在没有这个设置的情况下安装我用parted设置(这不是由Ubuntu安装程序设置的)?我认为我需要安装它的是一个单独的/ boot,它不在LVM或软件RAID中,因为我的root是在RAID中,而分区表是GPT.

Ubuntu CD安装程序如何安装它没有这个问题,没有bios_grub设置?

我也会考虑使用EFI.如果这是一个好主意,并且有一种标准的方式来设置它,我总是在学习新事物.

即使没有回答我的所有问题,最快的答案也会让我感到高兴,这将是一组命令,我可以从救援CD运行,以与安装CD相同的方式修复引导加载程序.如果我可以使用引导系统而不是CD运行它们,那也将是非常好的.

解决方案是使用bios_grub分区,该分区与/ boot分区不同.

默认情况下,bios_grub分区为1MiB,并且必须标记为bios_grub.我是我磁盘上的第一个分区.如果您的分区2实际上是分区建议的/ boot,那就不正确了,您应该创建另一个1MiB分区.

使用GPT和GRUB2,最小文件系统有三个分区:bios_grub,root,swap. (不完全确定需要交换)

为什么grub在运行“grub-install”后无法启动?

未知……你认为它不会修改任何东西,如果它说清楚它不能嵌入,所以它无法工作.

为什么说“找不到档案”?

/ vmlinuz是一个使用启动分区的符号链接,启动分区已损坏. bios_grub代码是在ext3结构的基础上编写的.这可能意味着没有挂载/ boot,并且在那里看到的grub文件实际上在根系统上,而不包含内核.

为什么grub不想在没有这个设置的情况下安装我用parted设置

与MBR不同,GPT分区表没有引导加载程序的空间.因此必须创建特定分区来保存引导代码.在运行“grub-install”之前,使用以下命令指定此分区:

parted /dev/sda set 1 bios_grub on

我以为我需要的只是一个单独的/启动. Ubuntu CD安装程序如何在没有bios_grub设置的情况下安装它?

这个要求似乎是Ubuntu安装程序所需要的全部内容,但它创建了一个不容易破坏的非标准系统.

当GRUB说“此GPT分区标签没有BIOS引导分区”时,它表示bios_grub分区,而不是/ boot.

Ubuntu服务器,gpt分区表,mdadm,grub启动失败的更多相关文章

  1. iOS推送通知适用于Dev而不是Enterprise Distribution

    本网站上没有其他问题,我已经能够找到实际上提出了Dev将工作的原因,但企业分布不会.为什么归档总是使aps环境生产?

  2. ios – testflight库和Xcode 5没有变化现在说“ld:找不到-lTestFlight的库”

    我已经创建了几个月的应用程序,突然Xcode5不想构建它.它只是抱怨以下错误.如果我理解它可以,它会抱怨testflight,但我几周没有改变它.它完美地编译了它.我不得不说我已经尝试将AdobeADMS跟踪库添加到项目中.然后,出现链接器错误.任何提示?

  3. 如何在ios swift项目中为dev n prod使用两个不同的GoogleService-info.plist文件?

    我需要使用两个不同的GoogleService-info.plist来处理dev和prod构建,目前我只是通过在编辑方案中更改“构建配置”来分离dev和prod,但现在我需要有两个不同的.plist文件dev和prod用于处理谷歌分析,pushwoosh等,解决方法对于这种情况,您需要在Dev和Prod的项目中使用带有diffbundleid的不同Targets.之后,您可以链接GoogleSer

  4. openstack安装liberty--安装对象存储服务swift

    通常使用CACHE技術提高性能Accountservers賬戶服務,管理對象存儲中的賬戶定義。Containerservers容器服務,在對象存儲中管理容器或文件夾映……Objectservers對象服務,在存儲節點管理實際的對象,比如文件。Wsgimiddleware處理認證,通常使用OPENSTACKIdentityswiftclient為用戶提供命令行接口使用RESTAPIswift-init初始化和構建RING文件腳本swift-recon一個命令行工具,用於檢索群集的各種度量和測試信息。

  5. (Cross-)编译Swift for Raspberry PI

    Swift现在是开源的.有没有人试过编译Swift的RaspBerryPI?我开始做,但我的8GBSD卡似乎太小了;)是否可以从Ubuntu交叉编译?写Swift打开你最喜欢的文本编辑器,编写一个程序并保存它:编译它并运行它:而已!

  6. Swift 3 dev快照中的POST请求给出了“对成员’dataTask的模糊引用(with:completionHandler :)’

    编辑:我注意到有人在我之后写了这个问题的副本.这里的答案是更好的答案.使用URLRequest结构.在Xcode8中工作正常:另外,出现此错误的原因是URLSessionAPI具有相同的名称方法,但每个都采用不同的参数.因此,如果没有明确的演员,API将会混淆.我认为这是API的命名错误.发生此问题,代码如下:

  7. 针对不同环境的不同Android构建

    我希望能够构建和安装我的应用程序的多个版本(同时),针对不同的环境,如开发,暂存和生产.AndroidManifest.xml中的软件包名称似乎是这里的主要障碍,因为它是唯一标识应用程序的内容.我认为可以简单地在com.mydomain.prod,com.mydomain.staging和com.mydomain.dev之间切换或某种类似的约定,但到目前为止,我还没有运气的包装结构对于这种方法.我

  8. android – 如何在Google Play商店中打开开发者页面(market://)

    ),但我在AndroidDeveloper页面上找不到它.解决方法您只需调用market://dev?id=xxx即可例如.:我希望,这适合您的需求!

  9. 适用于Android dev的可下载字体和“Chrome已停止”错误

    作为Oreo和支持库中新的可下载字体支持的一部分,我已经开始将功能集成到我开发的应用程序中.第一个应用程序是成功的–只需几个活动的简单应用程序.第二个应用程序没有成功.添加可下载字体(基于此资源:https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html)后,我在启动活动时遇到此错误:该应用

  10. Android,设置Linux构建环境,libgl1-mesa-glx:i386包有未满足的依赖项

    解决方法我解决了这个问题.执行以下操作,安装除libgl1-mesa-glx:i386之外的所有软件包:安装libglapi-mesa-lts-saucy:i386而不是libgl1-mesa-glx:i386:现在您拥有正确的AOSP构建环境,并且不会丢失桌面环境.

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部