linux备份分区表,及dd命令

时间:2023-01-16 21:37:40
今天重做了系统,原因分区表用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、备份MBRlinux@linux-desktop:~/ex$ sudo dd if=/dev/sda of=mbr bs=512 count=1  #输入文件/dev/sda, 输出文件mbr(自己定义),输入(出)块大小512字节,复制一次,由于mbr是512个字节,所以读取写到mbr文件中了1+0 records in1+0 records out512 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)字符补齐。