今天重做了系统,原因分区表用fdisk 查看分区表有错误,我不想再重做了,所以备份一下分区表,以后出错了,直接恢复就行了。

现在的分区如下:

  Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1        2612    20980858+   7  HPFS/NTFS

/dev/sda2            2613       19458   135309127+   5  Extended

/dev/sda5            2613        6529    31463271    7  HPFS/NTFS

/dev/sda6            6530        9141    20980858+  83  Linux

/dev/sda7            9142       11753    20980858+  83  Linux

/dev/sda8           11754       19048    58593280   83  Linux

/dev/sda9           19048       19458     3289088   82  Linux swap / Solaris

备份方法:

1、备份分区表信息

sudo fdisk -l >hda.txt  #分区表信息重定向输出到文件中

2、备份MBR

linux@linux-desktop:~/ex$ sudo dd if=/dev/sda of=mbr bs=512 count=1  #输入文件/dev/sda, 输出文件mbr(自己定义),输入(出)块大小512字节,复制一次,由于mbr是512个字节,所以读取写到mbr文件中了

1+0 records in

1+0 records out

512 bytes (512 B) copied,4.0728e-05 秒,12.6 MB/秒

linux@linux-desktop:~/ex$ ls  #查看备份成功

hda.txt  mbr

主引导记录512字节,前446是程序代码,后64字节包含分区表信息,最后2字节标识是MBR

3、恢复分区表

dd if=mbr of=/dev/sda bs=1 skip=446 count=66  #输入文件mbr,输出 /dev/sda ,块大小1个字节,输入跳过446字节,恢复66个字节,看来恢复的只有66个字节

如果逻辑分区都没有了,则用fdisk 照着hda.txt的信息重分一下就行了。

顺便说一下dd命令的用法

以下来自网络,我没有测试

dd是linux下的一个非常有用的命令,作用是用指定大小的块复制一个文件,并在复制的同时进行指定的转换。

if=输入文件(input file),  如: if=/dev/sda,缺省为标准输入 

 

of=输出文件(output file), 如: of=mbr, 缺省为标准输出

ibs=Bytes,一次读入Bytes个字节,即一个块大小为Bytes个字节

obs=Bytes, 一次写Bytes个字节,即一个块大小为Bytes个字节

bs=Bytes ,同时设置读写块的大小为Bytes字节,可代替ibs,obs

cbs=Bytes,一次转换Bytes个字节,即转换缓冲区大小

skip=blocks, 从输入文件开头跳过blocks个块后再开始复制

seek=blocks,从输出文件开头路过blocks个块后再开始复制(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks, 仅复制blocks个块,块大小是ibs指定的字节数

conv=conversion[,conversion...]

用指定的参数转换文件。

转换参数:

ascii 转换 EBCDIC 为 ASCII。

ebcdic 转换 ASCII 为 EBCDIC。

ibm 转换 ASCII 为 alternate EBCDIC.

block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock 使每一行的长度都为 cbs ,不足部分用空格填充。

lcase 把大写字符转换为小写字符。

ucase 把小写字符转换为大写字符。

swab 交换输入的每对字节。

noerror 出错时不停止。

notrunc 不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。