linux备份分区表,及dd命令

今天重做了系统,原因分区表用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)字符补齐。

你可能感兴趣的:(shell)