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