实验服务器的磁盘是最近买的,当卖家问我要普通的还是高级的, 我选择了普通,现在追悔莫及。 今天的分析更加详细。首先发现每次实验,出错的文件都不一样,所以应该不是临界条件的问题。下表总结了出错的位置,原始数据是数据的正确格式,第一次备份和第二次备份分别代表两次连续备份,我恢复出两次备份的数据与原始数据进行比较,发现错误都是某个字符发生了变化:
表中红色的文件,指的是第一次备份发生错误,而第二次备份没有错误。共37个错误中,有32个是因为第二次备份错误。进一步分析这些字符的ASCII码,如下表:
所有字符的变化都是因为一个bit发生了反转,由此几乎可以肯定不是原型系统的bug。综合几点因素考虑:
文件名 | 原始数据 | 第一次备份 | 第二次备份 |
linux-2.6.34.1.tar | ; | ; | ? |
linux-2.6.34.5.tar | a | a | e |
linux-2.6.35.1.tar | (space) | (space) | $ |
linux-2.6.35.2.tar | u | u | w |
linux-2.6.35.3.tar | ci | ci | gk |
linux-2.6.35.5.tar | s | s | S |
linux-2.6.36.0.tar | i | i | m |
linux-2.6.36.1.tar | xr | xr | |v |
linux-2.6.36.2.tar | l | | | l |
linux-2.6.37.2.tar | (space) | (space) | $ |
linux-2.6.37.3.tar | e | e | g |
linux-2.6.38.0.tar | s | s | w |
linux-2.6.38.5.tar | , | $ | , |
linux-2.6.38.7.tar | 1 | 1 | 5 |
linux-2.6.39.1.tar | a | a | e |
linux-2.6.39.2.tar | 1 | 1 | 5 |
linux-3.0.11.tar | (space) | (space) | $ |
linux-3.0.13.tar | C | C | G |
linux-3.0.20.tar | 0 | 0 | 4 |
linux-3.0.22.tar | (space) | (space) | $ |
linux-3.0.26.tar | > | > | 6 |
linux-3.0.28.tar | a | a | e |
linux-3.0.4.tar | (space) | (space) | $ |
linux-3.0.5.tar | sa | sa | wc |
linux-3.0.9.tar | ; | ; | ? |
linux-3.1.2.tar | E | E | D |
linux-3.1.5.tar | l | l | | |
linux-3.2.10.tar | _ | _ | W |
linux-3.2.13.tar | a | a | e |
linux-3.2.16.tar | d | d | l |
linux-3.2.2.tar | C | C | G |
linux-3.2.4.tar | (space) | (space) | $ |
linux-3.2.6.tar | p | p | r |
linux-3.3.5.tar | c | c | g |
字符变化 | ASCII码变化 | 二进制变化 | 次数 |
;->? | 3B,3F | 0010,10110010,1111 | 2 |
a->e | 61,65 | 0110,00010110,0101 | 4 |
(space)->$ | 20, 24 | 0010,00000010,0100 | 6 |
u->w | 75, 77 | 0111,01010111,0111 | 1 |
c->g | 63, 67 | 0110,00110110,0111 | 2 |
i->k | 69, 6B | 0110,10010110,1011 | 1 |
s->S | 73, 53 | 0111,00110101,0011 | 1 |
i->m | 69, 6D | 0110,10010110,1101 | 1 |
x->| | 78, 7C | 0111,10000111,1100 | 1 |
r->v | 72, 76 | 0111,00100111,0110 | 1 |
l->| | 6C, 7C | 0110,11000111,1100 | 2 |
e->g | 65, 67 | 0110,01010110,0111 | 1 |
s->w | 73, 77 | 0111,00110111,0111 | 2 |
,->$ | 2C, 24 | 0010,11000010,0100 | 1 |
1->5 | 31, 35 | 0011,00010011,0101 | 2 |
C->G | 43, 47 | 0100,00110100,0111 | 2 |
o->4 | 30, 34 | 0011,00000011,0100 | 1 |
>->6 | 3E, 36 | 0011,11100011,0110 | 1 |
a->c | 61, 63 | 0110,00010110,0011 | 1 |
E->D | 45, 44 | 0100,01010100,0100 | 1 |
_->W | 5F, 57 | 0101,11110101,0111 | 1 |
d->l | 64, 6C | 0110,01000110,1100 | 1 |
p->r | 70, 72 | 0111,00000111,0010 | 1 |
- 所有的错误都是bit反转;
- 第二备份的反转的概率比第一次要高得多
- 备份较小数据量不会发生反转;