当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 22 篇帖子 ]  前往页数 上一页  1, 2
作者 内容
16 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2011-04-27 7:50 
头像

注册: 2007-12-14 13:40
帖子: 49877
地址: 志虚国乌由市
系统: Winbuntu
送出感谢: 29
接收感谢: 413
从来不被分这个


_________________
冷轩信

渠月 · QY

本人只会灌水,不负责回答问题

无聊可以点一下→ http://u.nu/ubuntu


页首
 用户资料  
 
17 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2011-04-27 19:48 

注册: 2008-01-11 17:02
帖子: 12127
送出感谢: 1
接收感谢: 6
DD命令太强大了


_________________
你往幸福的方向挥挥手,从此我便追随你永不回头。


页首
 用户资料  
 
18 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2013-01-13 23:29 

注册: 2010-08-23 17:27
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
我先mark一下
明天用到 :em04


页首
 用户资料  
 
19 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2013-11-02 18:47 
头像

注册: 2013-09-07 19:40
帖子: 3
系统: Debian
送出感谢: 0 次
接收感谢: 0 次
Dororo 写道:
billbear 写道:
原来是 wiki 上的错误,我已经修改


好像改完还有错,不知是不是?

还原分区表,跳过主引导记录
dd if=/backup/mbr.img of=/dev/sda bs=1 count=64 skip=446 seek=446

应为
dd if=/backup/mbr.img of=/dev/sda bs=64 count=1 skip=446 seek=446


我实测的结果是:
备份sda第一块硬盘debian的grub引导记录和硬盘分区表如下(备份第一硬盘的前63个扇区,第一硬盘分区表在第一扇区的第447-510字节)
代码:
dd if=/dev/sda of=debian.mbr  bs=512 count=63
说明:块大小为512字节(一个扇区的大小),读取硬盘的前63个扇区
恢复引导记录恢复到第二快硬盘sdb,但是不修改第二块分区表的命令
代码:
dd if=debian.mbr of=/dev/sdb  bs=446 count=1
这里是将sda的引导记录的第一扇区的前446字节恢复到sdb第一扇区
代码:
dd if=debian.mbr of=/dev/sdb bs=512  skip=1 seek=1
这条命令是把sda的引导记录的后62扇区记录跳过sdb的第一扇区执行写入。定义bs为512字节,skip对应if读取的debian.mbr跳过一个扇区(也就是512Byte)。seek对应of,是写入的时候,跳过sdb的的一个扇区。最后就是将mbr的后62个扇区在写入sdb的时候跳过1个扇区写入。最后重启电脑,选择第二块硬盘,也能引导第一块硬盘的debian linux了。

警告:进行写入之前,必须先备份好sdb的mbr和分区表:dd if=/dev/sdb of=目标路径/sdb.mbr 然后方可执行上面的操作。我用上面的方法,实现了第二硬盘可以引导第一硬盘的debian。前面有过失败的教训,我将第一硬盘的sda.mbr 直接dd if=sda.mbr of=/dev/sdb 结果第二硬盘的分区表丢失,因为sda.mbr是第一块硬盘前63扇区的备份,已经包含了第一扇区的第447-510字节的分区表记录。所以在我执行完dd命令后,马上用fdisk -l 才发觉我的第二块硬盘的分区表已经和第一块分区表一样了(两块硬盘都是500G)。幸亏第二块硬盘我是刚刚开始使用,只是放了一些无用的数据。否则后果不堪设想。所以建议大家执行dd恢复mbr前必须备份原来的mbr,执行完dd恢复后建议fdisk -l 检查一下。


最后由 xubuner 编辑于 2014-07-08 22:22,总共编辑了 1 次

页首
 用户资料  
 
20 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2014-03-20 22:16 

注册: 2012-06-19 22:35
帖子: 31
送出感谢: 7
接收感谢: 1
xubuner 写道:
我实测的结果是:
备份sda第一块硬盘debian的grub引导记录和硬盘分区表如下(备份第一硬盘的前63个扇区,第一硬盘分区表在第一扇区的第447-510字节)
代码:
dd if=/dev/sda of=debian.mbr  bs=512 count=63
说明:块大小为512字节(一个扇区的大小),读取硬盘的前63个扇区
恢复引导记录恢复到第二快硬盘sdb,但是不修改第二块分区表的命令
代码:
dd if=debian.mbr of=/dev/sdb  bs=446 count=1
这里是将sda的引导记录的第一扇区的前446字节恢复到sdb第一扇区
代码:
dd if=debian.mbr of=/dev/sdb bs=512  seek=1 skip=1
这条命令是把sda的引导记录的后62扇区记录跳过sdb的第一扇区执行写入。定义bs为512字节,seek对应if读取的debian.mbr跳过一个扇区(也就是512Byte)。skip是写入的时候,跳过sdb的的一个扇区。最后就是将mbr的后62个扇区在写入sdb的时候跳过1个扇区写入。最后重启电脑,选择第二块硬盘,也能引导第一块硬盘的debian linux了。


请问为何备份debian.mbr要count=63??mbr不是只在第一个扇区吗?剩下62个是什么?


页首
 用户资料  
 
21 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2014-03-21 6:33 

注册: 2009-08-04 16:33
帖子: 16811
送出感谢: 21
接收感谢: 1818
引用:
请问为何备份debian.mbr要count=63??

引用:
(备份第一硬盘的前63个扇区,第一硬盘分区表在第一扇区的第447-510字节)
dd if=/dev/sda of=debian.mbr bs=512 count=63
说明:块大小为512字节(一个扇区的大小),读取硬盘的前63个扇区

不能代替原貼文者說明 只能說是猜測
扇區是從 0 起算 0~63 個扇區表示共有 64 個扇區
你也可以試試 count=64 試試
看看 有沒有差異
引用:
mbr不是只在第一个扇区吗?剩下62个是什么?

近代分割 預設是預留 0~63 共 64 個 bytes 爲空白區域
除了 存放 MBR 以外 還存放許多 硬盤及程式的 資訊 (例如 RAID)
如果你要儲存完整的第一個分割區的起點前面的資訊 可以改爲 count=64
第一個分割區則從 第 64 sector 開始爲 第一個分割區的起點
512 bytes/sector x 64 sectors = 32768 bytes 爲 第一個分割區的起點
參見
https://wiki.gentoo.org/wiki/Raspberry_ ... Partitions
http://www.cubieforums.com/index.php?topic=875.0

補充說明
目前 Ubuntu 預設分割工具 gparted 則是預設從 第 2048 sector 爲第一個分割區的起點
所以 0~2047 共 2048 個 sectors
共 512 bytes/sector x 2048 sectors = 1048576 bytes = 1 MiB 是 第一個分割區前面的 空白區域
除了 存放 MBR 以外 還存放更多 硬盤及程式的 資訊
如果你要儲存完整的第一個分割區的起點前面的資訊 可以改爲 count=2048 試試
參閱
http://gparted.org/display-doc.php?name ... -alignment


页首
 用户资料  
 
22 楼 
 文章标题 : Re: 使用dd来备份还原mbr,分区表
帖子发表于 : 2014-07-08 22:30 
头像

注册: 2013-09-07 19:40
帖子: 3
系统: Debian
送出感谢: 0 次
接收感谢: 0 次
poke707 写道:
xubuner 写道:
我实测的结果是:
备份sda第一块硬盘debian的grub引导记录和硬盘分区表如下(备份第一硬盘的前63个扇区,第一硬盘分区表在第一扇区的第447-510字节)
代码:
dd if=/dev/sda of=debian.mbr  bs=512 count=63
说明:块大小为512字节(一个扇区的大小),读取硬盘的前63个扇区
恢复引导记录恢复到第二快硬盘sdb,但是不修改第二块分区表的命令
代码:
dd if=debian.mbr of=/dev/sdb  bs=446 count=1
这里是将sda的引导记录的第一扇区的前446字节恢复到sdb第一扇区
代码:
dd if=debian.mbr of=/dev/sdb bs=512  seek=1 skip=1
这条命令是把sda的引导记录的后62扇区记录跳过sdb的第一扇区执行写入。定义bs为512字节,seek对应if读取的debian.mbr跳过一个扇区(也就是512Byte)。skip是写入的时候,跳过sdb的的一个扇区。最后就是将mbr的后62个扇区在写入sdb的时候跳过1个扇区写入。最后重启电脑,选择第二块硬盘,也能引导第一块硬盘的debian linux了。


请问为何备份debian.mbr要count=63??mbr不是只在第一个扇区吗?剩下62个是什么?

-----------------------------------------------------
首先我纠正我的错误,正确的是:skip对应if,seek对应of
我猜想,除了前面446byte的mbr引导代码外,我的debian是grub1.99的,剩下的62个扇区可能是grub1.99额外的代码。因为我如果备份的总扇区小于63,恢复到u盘或者第二快硬盘后,就无法通过u盘或者第二快硬盘引导


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 22 篇帖子 ]  前往页数 上一页  1, 2

当前时区为 UTC + 8 小时


在线用户

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


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

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

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