当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-13 16:56 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
前几天笔记本摔了一下,怕是磁盘摔坏了。于是用badblocks命令检测了一下坏道,我是按照整个硬盘为参数检测的,花费了几个小时,没有发现坏道。然后关机了,然后就进不了系统了。又来才明白是因为使用了w参数,导致磁盘所有数据毁坏,分区也没了,这个我可以理解。
我的优盘里装有linux系统,优盘主引导记录也装有grub引导程序。然后我就优盘启动了,我又一次运行了badblocks命令,这次还是以sda(就是电脑硬盘)为检测对象,根本不会涉及优盘分区,运行了一晚上,结果显示没有坏道,然后我重启系统,还是优盘启动,这次优盘系统也进不去了。grub进入了rescue模式。
查了查资料,发现grub分为两部分,一部分安装在主引导记录里,另一部分安装在boot分区,我这情况应该是boot分区内的grub损坏了,后来也发现,优盘内的系统文件都还完整的存在,重新将grub安装进优盘就又可以启动系统了。
但我想不通的是,为什么运行badblocks命令会损坏grub,事实证明介质内的文件系统还是完整的啊,而且我检测的是电脑硬盘,根本不涉及优盘分区,实在是想不明白。有了解的吗?


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-13 17:17 

注册: 2009-08-04 16:33
帖子: 16886
送出感谢: 21
接收感谢: 1826
引用:
grub分为两部分,一部分安装在主引导记录里,另一部分安装在boot分区,

1. 目前 Ubuntu 預裝 Grub 2
以 Legacy Bios 來說
Grub 2 分為 3 個部份 A,B,C
A 安裝在 MBR (0~511) byte
B 安裝在 512 ~ 第一個分割區 之間 (如果空間夠) 或 跟 /boot 安裝在同一個分割區的 superblock (如果前面說的空間不夠)
C 安裝在 /boot 同一個分割區
其中 A,B 不是以 檔案型態 存在
引用:
为什么运行badblocks命令会损坏grub

2. 請把 完整指令 寫出來
如果執行完成 有回饋什麼訊息 也請完全複製/貼上來
口頭說明/摘要 有時會遺漏重要資訊


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-13 17:26 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
badblocks -s -w /dev/sda
关于w选项,man手册说不要使用,会擦除磁盘数据,因为它会按照先写后读的方式检测坏道。这一点已经不重要了,我用优盘的linux系统运行该命令也是检测的sda即电脑磁盘,优盘介质应该不会受到影响,事实也证明优盘内的文件系统完整存在,因为我重新将grub刷进优盘,系统就又可以正常启动了。
实在不明白为什么运行这个命令后grub会受损。


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-13 17:39 

注册: 2009-08-04 16:33
帖子: 16886
送出感谢: 21
接收感谢: 1826
引用:
badblocks -s -w /dev/sda

1. https://wiki.archlinux.org/index.php/Badblocks
-w
do a destructive write test
引用:
我重新将grub刷进优盘,系统就又可以正常启动了。
实在不明白为什么运行这个命令后grub会受损。

2. 猜測 你重新安裝 grub 2 時
指令是
sudo grub-install /dev/sda
2-1. 參見
viewtopic.php?p=3138391#p3138391
A 安裝在 MBR (0~511) byte
2-2. 當你執行
badblocks -s -w /dev/sda

把這個部份 抹除了

3. 試試
sudo grub-install /dev/sdb
把 /dev/sdb (U 盤)設為最優先開機裝置


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-13 22:35 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
当我执行badblocks -s -w /dev/sda 的时候,电脑磁盘数据全部摸除了,这个我能理解,这个确实会损坏grub程序导致无法引导,甚至连分区都摧毁了。
但是我用优盘Linux时,执行的也是badblocks -s -w /dev/sda命令,而此时优盘是/dev/sdb,所以执行这个命令应该不会影响优盘介质内的数据。但是实际上,执行完毕之后,优盘内的grub程序遭到了损坏,导致无法引导。而优盘介质内的文件系统却还是正常的(这就有点矛盾了,既然介质内数据完整,那么为何grub却有损坏,不能正常引导),当我用命令grub-install /dev/sdb将grub重新写入优盘后就有可以正常引导系统了,说明优盘内的数据没有损坏。


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 5:57 

注册: 2009-08-04 16:33
帖子: 16886
送出感谢: 21
接收感谢: 1826
引用:
当我用命令grub-install /dev/sdb将grub重新写入优盘后就有可以正常引导系统了,说明优盘内的数据没有损坏。

viewtopic.php?p=3138391#p3138391
1. grub-install /dev/sdb
將 A 安裝到 /dev/sdb 的 MBR
1-1. grub-install /dev/sda
將 A 安裝到 /dev/sda 的 MBR
1-2. 提醒
/dev/sda /dev/sdb 的分配 每次開機 可能會改變
並不是永遠不變
所以每次要寫入時 要確認 /dev/sda /dev/sdb 是代表哪個硬盤
sudo fdisk -l
是合適的確認工具
引用:
优盘内的grub程序遭到了损坏,导致无法引导。而优盘介质内的文件系统却还是正常的

2. grub2 開機引導 跟 Ubuntu 其它數據 是可以分割的安裝的
意思是 隨時可以重新安裝 grub 2 產生最新的開機檔案 (不是恢復舊的)
2-1. 只要有合適的工具 硬盤裡的數據 都可以分割安裝/重新安裝


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 8:51 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
我很确定优盘是sdb,毕竟玩了这么多年的linux。我技术上的操作是没有问题的。so,go back to my original question,在没有任何误操作的前提下,为什么运行badblocks -s -w /dev/sda检测硬盘会影响优盘介质sdb内的gurb,而且影响的仅仅是优盘内的boot分区内grub(即没有影响mbr内的grub也没有影响介质内其他文件数据)


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 11:52 

注册: 2009-08-04 16:33
帖子: 16886
送出感谢: 21
接收感谢: 1826
引用:
为什么运行badblocks -s -w /dev/sda检测硬盘会影响优盘介质sdb内的gurb,而且影响的仅仅是优盘内的boot分区内grub(即没有影响mbr内的grub也没有影响介质内其他文件数据)

/dev/sda 有一個 MBR
/dev/sdb 也有一個 MBR
你說的
没有影响mbr内的grub
是指
/dev/sda 的 MBR
還是
/dev/sdb 的 MBR ?


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 15:20 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
sdb内的 我还是这样来描述吧 假设笔记本新增了一块硬盘2 这个硬盘没有分区 里面什么都没有 而笔记本自带的硬盘1内装有linux ok,我使用linux运行之前说的badblocks命令,检测这块新硬盘2的坏道,理论上应该不会对硬盘1产生任何影响对吧?现在的情况就是,运行命令之后硬盘1内的grub受损了。我觉得我发现了badblocks程序的bug,一会联系它的作者


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 18:27 

注册: 2011-02-14 17:46
帖子: 907
送出感谢: 3
接收感谢: 124
很难排除U盘或者usb stack有点问题的可能性吧

badblocks的源码那么简单,很难想象它自身会有问题,文件系统有bug的可能性反而大一点
http://git.kernel.org/cgit/fs/ext2/e2fs ... adblocks.c


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 19:58 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
我觉得不会,因为检测硬盘基本不会涉及到优盘内的文件系统,即使涉及到,也只是运行badblocks命令时,系统从优盘内加载badblocks程序执行,既然可以执行,而且执行完毕后只影响了优盘内的grub,那么我觉得优盘基本没问题。真是想不通了。


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-14 20:01 

注册: 2015-01-21 16:08
帖子: 28
系统: Ubuntu
送出感谢: 3
接收感谢: 0 次
或许真的是badblocks程序本身的问题呢,因为我这样使用这个命令的情况可能有点特殊,作者可能没有考虑到这种情况。


_________________
我不满足于熟练的使用工具,而是喜欢深究其背后的原理。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-15 9:26 

注册: 2011-02-14 17:46
帖子: 907
送出感谢: 3
接收感谢: 124
U盘和usb stack本来就没那么可靠,所以它们有问题不那么容易排除吧
badblocks千把行而已,可以自己看看有没有哪里可能有逻辑漏洞


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 运行badblocks导致grub引导损坏 实在想不明白为什么
帖子发表于 : 2015-07-16 8:01 

注册: 2009-08-04 16:33
帖子: 16886
送出感谢: 21
接收感谢: 1826
引用:
但是我用优盘Linux时,执行的也是badblocks -s -w /dev/sda命令,而此时优盘是/dev/sdb,所以执行这个命令应该不会影响优盘介质内的数据。但是实际上,执行完毕之后,优盘内的grub程序遭到了损坏,导致无法引导。而优盘介质内的文件系统却还是正常的(这就有点矛盾了,既然介质内数据完整,那么为何grub却有损坏,不能正常引导),当我用命令grub-install /dev/sdb将grub重新写入优盘后就有可以正常引导系统了,说明优盘内的数据没有损坏。

1. 現在電腦的開機韌體 都具備 第一優先開機裝置 失敗 就自動搜尋 第二優先開機裝置 ...
除非你把 這個 自動搜尋優先開機裝置的機制 阻檔
否則要下結論說 是從哪個 開機裝置 成功開機 需要補強證據
引用:
我还是这样来描述吧 假设笔记本新增了一块硬盘2 这个硬盘没有分区 里面什么都没有

2. https://zh.wikipedia.org/wiki/%E4%B8%BB ... 0%E5%BD%95
標準 MBR 結構
0 ~ 445 byte 共 446 bytes
446 ~ 511 byte 共 66 bytes
2-1. 如果你的硬盤 曾經分割過了以後
只是 把分割區刪除
並不會把整個 MBR 以及 512 byte ~ 以前第一分割區前端之間的空間 全部歸零
還是會 影響 grub 2 開機 存取 A, B 部份 (如果 B 部份是存入 512 byte ~ 以前第一分割區前端之間的空間)
要 硬盤 /dev/sda 不影響 Grub 開機 必須使用 合適的工具 把 0 byte ~ 以前第一分割區前端之間的空間 全部歸零
2-2. 這個現象 在 RAID 跟 LVM 更明顯
2-3. 意思是 硬盘没有分区 並不表示 就里面什么都没有
引用:
我觉得我发现了badblocks程序的bug,一会联系它的作者
或许真的是badblocks程序本身的问题呢,因为我这样使用这个命令的情况可能有点特殊,作者可能没有考虑到这种情况。

3. 鼓勵你 大膽假設
要作結論 要再補強更多證據

4. 補充
如果你使用一顆硬盤 希望 硬盤裡面 完全是空白的 (意思是 不會受到任何影響)
先試試 dd 把 硬盤歸零
http://manpages.ubuntu.com/manpages/viv ... /dd.1.html
dd - convert and copy a file
dd if=/dev/zero of=/dev/sda
4-1. /dev/sda 並不是固定的
最好每次開機後
要寫入前 都使用
sudo fdisk -l
確認是不是 /dev/sda
以免闖下大禍


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Yahoo [Bot] 和 0 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译