使用dd来备份还原mbr,分区表

Lucid Lynx (长期支持)
头像
qy117121
论坛版主
帖子: 49906
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
送出感谢: 17 次
接收感谢: 335 次
联系:

Re: 使用dd来备份还原mbr,分区表

#16

帖子 qy117121 » 2011-04-27 7:50

从来不被分这个
渠月 · QY    https://vz.rs/u
本人只会灌水,不负责回答问题

无聊可以点一下→ http://u.nu/ubuntu
长头发的和尚
论坛版主
帖子: 12127
注册时间: 2008-01-11 17:02
送出感谢: 0
接收感谢: 4 次

Re: 使用dd来备份还原mbr,分区表

#17

帖子 长头发的和尚 » 2011-04-27 19:48

DD命令太强大了
你往幸福的方向挥挥手,从此我便追随你永不回头。
hxzqwe
帖子: 16
注册时间: 2010-08-23 17:27
送出感谢: 0
接收感谢: 0

Re: 使用dd来备份还原mbr,分区表

#18

帖子 hxzqwe » 2013-01-13 23:29

我先mark一下
明天用到 :em04
头像
xubuner
帖子: 3
注册时间: 2013-09-07 19:40
系统: Debian
送出感谢: 0
接收感谢: 0

Re: 使用dd来备份还原mbr,分区表

#19

帖子 xubuner » 2013-11-02 18:47

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 次。
poke707
帖子: 31
注册时间: 2012-06-19 22:35
送出感谢: 7 次
接收感谢: 1 次

Re: 使用dd来备份还原mbr,分区表

#20

帖子 poke707 » 2014-03-20 22:16

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个是什么?
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33
送出感谢: 21 次
接收感谢: 1951 次

Re: 使用dd来备份还原mbr,分区表

#21

帖子 poloshiao » 2014-03-21 6:33

请问为何备份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
头像
xubuner
帖子: 3
注册时间: 2013-09-07 19:40
系统: Debian
送出感谢: 0
接收感谢: 0

Re: 使用dd来备份还原mbr,分区表

#22

帖子 xubuner » 2014-07-08 22:30

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盘或者第二快硬盘引导
回复

回到 “Ubuntu 10.04 LTS”