내 파티션 테이블의 첫 번째 항목은 다음과 같습니다.
$ sudo hexdump -Cv -n 16 -s 446 /dev/sda
000001be 80 01 01 00 83 fe ff ff 3f 00 00 00 81 1c 20 03 |........?..... .|
( -Cv 출력 포맷을 설명하는 16 -n 16 바이트를 요구하고 (446) -s 스킵 제 446 바이트)
넌 내 첫 번째 파티션은 기본 리눅스 파티션 인 것을 알 수 있고,이 분할 섹터 63 (실시 예를 참조하여 시작될 [파티션 테이블의 구조는 [1]).
그런 다음 첫 63 개의 섹터와 다른 파티션을 제외하고 / dev / sda1과 / dev / sda는 정확히 동일 할 것으로 예상합니다.
그러나 이것은 사실이 아닙니다. / dev / sda1의 섹터 # 2는 / dev / sda의 섹터 # 65와 정확히 같지 않습니다 (그러나 매우 유사하며 16 바이트 만 다릅니다).
$ sudo hexdump -Cv -n 512 -s 65b /dev/sda
00008200 00 20 19 00 90 03 64 00 2d 00 05 00 5a 2f 56 00 |. ....d.-...Z/V.|
00008210 b6 b1 16 00 00 00 00 00 02 00 00 00 02 00 00 00 |................|
00008220 00 80 00 00 00 80 00 00 00 20 00 00 d8 38 ee 4c |......... ...8.L|
00008230 9a 01 ef 4c 05 00 24 00 53 ef 01 00 01 00 00 00 |...L..$.S.......|
00008240 59 23 e9 4c 00 4e ed 00 00 00 00 00 01 00 00 00 |Y#.L.N..........|
00008250 00 00 00 00 0b 00 00 00 00 01 00 00 3c 00 00 00 |............<...|
00008260 42 02 00 00 7b 00 00 00 85 23 eb f2 71 67 44 f5 |B...{....#..qgD.|
00008270 bb 8f 6f f2 3a 59 ff 4d 55 62 75 6e 74 75 00 00 |..o.:Y.MUbuntu..|
00008280 00 00 00 00 00 00 00 00 2f 75 62 75 6e 74 75 00 |......../ubuntu.|
00008290 d8 3c df 5d 00 88 ff ff 52 d0 ef 1d 00 00 00 00 |.<.]....R.......|
000082a0 c0 40 51 b6 00 88 ff ff 00 4e c8 bb 00 88 ff ff |.@Q......N......|
000082b0 c0 f6 86 b8 00 88 ff ff 30 2e 0d a0 ff ff ff ff |........0.......|
000082c0 38 3d df 5d 00 88 ff ff 00 00 00 00 00 00 fe 03 |8=.]............|
000082d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000082e0 08 00 00 00 00 00 00 00 00 00 00 00 8a 53 d3 0e |.............S..|
000082f0 7c 7a 43 e4 8b fb ca e0 72 b7 fa c8 01 01 00 00 ||zC.....r.......|
00008300 00 00 00 00 00 00 00 00 16 4c 47 4b 0a f3 03 00 |.........LGK....|
00008310 04 00 00 00 00 00 00 00 00 00 00 00 fe 7f 00 00 |................|
00008320 24 b7 0c 00 fe 7f 00 00 01 00 00 00 22 37 0d 00 |$..........."7..|
00008330 ff 7f 00 00 01 00 00 00 23 37 0d 00 00 00 00 00 |........#7......|
00008340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 |................|
00008350 00 00 00 00 00 00 00 00 00 00 00 00 1c 00 1c 00 |................|
00008360 01 00 00 00 e9 7f 00 00 00 00 00 00 00 00 00 00 |................|
00008370 00 00 00 00 04 00 00 00 9f 7d bb 00 00 00 00 00 |.........}......|
00008380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00008390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000083f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
대
$ sudo hexdump -Cv -n 512 -s 2b /dev/sda1
00000400 00 20 19 00 90 03 64 00 2d 00 05 00 5a 2f 56 00 |. ....d.-...Z/V.|
00000410 b6 b1 16 00 00 00 00 00 02 00 00 00 02 00 00 00 |................|
00000420 00 80 00 00 00 80 00 00 00 20 00 00 df 76 ef 4c |......... ...v.L|
00000430 df 76 ef 4c 06 00 24 00 53 ef 01 00 01 00 00 00 |.v.L..$.S.......|
00000440 59 23 e9 4c 00 4e ed 00 00 00 00 00 01 00 00 00 |Y#.L.N..........|
00000450 0
답변
내 시스템 에서이 효과를 재현 할 수 있었기 때문에 좋은 발견. 내 사이트에서는 / dev / hda에서 발생하므로 SCSI 문제가 아닙니다.
# uname -a
Linux X.X.X 2.6.26-2-686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686 GNU/Linux
whitequark
캐시 문제 라고 생각 합니다. 귀하의 사이트에서 발생한 일에 대한 해석은 다음과 같습니다 ( 그래도 내 설명이 정확한지는 확실하지 않습니다 ).
/ dev / sda1이 사용 중입니다. 따라서 “sync”는 저널이 플러시 될 때마다 (또는 유사한) 수퍼 블록을 업데이트합니다. 디스크 / dev / sda1이 변경되었습니다.
그러나 커널은 / dev / sda 및 / dev / sda1에 대해 결합 된 캐시를 사용하지 않고 두 “파일”자체가 캐시입니다. / dev / sda1 (동기식)을 업데이트해도 / dev / sda의 캐시는 무효화되지 않습니다. 따라서 / dev / sda에서 읽은 값은 이전 캐시 값 (캐시가 하드 드라이브와 동기화되지 않음)을 표시하고 / dev / sda1은 올바른 (새로운) 값을 표시합니다.
여기 내 편에 보이는 상황이 있습니다. 나는 / dev / hda에서 덤프를하기 전에 여기에 왔기 때문에 이미 오래된 데이터를 캐시했다.
# od -tx1z -N 10k /dev/hda2 > NOW1
# dd ibs=512 skip=1975995 if=/dev/hda | od -tx1z -N 10k > MAIN1
# diff NOW1 MAIN1
3,4c3,4
< 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 be 1a 39 00 >..1.W.a..}....9.<
< 0002020 4e ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >N.!.............<
---
> 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 4e 1b 39 00 >..1.W.a..}..N.9.<
> 0002020 52 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >R.!.............<
# od -tx1z -N 10k /dev/hda2 > NOW1
# diff NOW1 MAIN1
3,4c3,4
< 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 be 1a 39 00 >..1.W.a..}....9.<
< 0002020 4e ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >N.!.............<
---
> 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 4e 1b 39 00 >..1.W.a..}..N.9.<
> 0002020 52 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >R.!.............<
# od -tx1z -N 10k /dev/hda2 > NOW2
# dd ibs=512 skip=1975995 if=/dev/hda | od -tx1z -N 10k > MAIN2
# diff MAIN1 MAIN2
# diff NOW2 MAIN2
3,4c3,4
< 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 f0 19 39 00 >..1.W.a..}....9.<
< 0002020 41 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >A.!.............<
---
> 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 4e 1b 39 00 >..1.W.a..}..N.9.<
> 0002020 52 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >R.!.............<
106c106
< 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 01 00 >................<
---
> 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 00 00 >................<
334c334
< 0021540 00 80 4d 00 01 80 4d 00 02 80 4d 00 02 00 63 3e >..M...M...M...c><
---
> 0021540 00 80 4d 00 01 80 4d 00 02 80 4d 00 02 00 64 3e >..M...M...M...d><
/ dev / hda는 업데이트를 표시하지 않지만 / dev / hda2는 일부 변경 사항을 표시합니다. 그러나 캐시를 플러시하고 다시 시도하면 모든 것이 동일하게 나타납니다.
# hdparm -f /dev/hda
/dev/hda:
# dd ibs=512 skip=1975995 if=/dev/hda | od -tx1z -N 10k > MAIN2
# diff MAIN1 MAIN2
3,4c3,4
< 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 4e 1b 39 00 >..1.W.a..}..N.9.<
< 0002020 52 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >R.!.............<
---
> 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 dc 1a 39 00 >..1.W.a..}....9.<
> 0002020 96 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >..!.............<
36,37c36,37
< 0010300 00 00 03 00 01 00 03 00 02 00 03 00 00 00 bb 3b >...............;<
< 0010320 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................<
---
> 0010300 00 00 03 00 01 00 03 00 02 00 03 00 00 00 bc 3b >...............;<
> 0010320 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................<
48c48
< 0010600 00 00 06 00 01 00 06 00 02 00 06 00 03 00 18 3f >...............?<
---
> 0010600 00 00 06 00 01 00 06 00 02 00 06 00 04 00 18 3f >...............?<
106c106
< 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 00 00 >................<
---
> 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 01 00 >................<
# od -tx1z -N 10k /dev/hda2 > NOW2
# diff NOW2 MAIN2
# diff MAIN1 MAIN2
3,4c3,4
< 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 4e 1b 39 00 >..1.W.a..}..N.9.<
< 0002020 52 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >R.!.............<
---
> 0002000 00 00 31 01 57 c4 61 02 04 7d 1e 00 dc 1a 39 00 >..1.W.a..}....9.<
> 0002020 96 ea 21 01 00 00 00 00 02 00 00 00 02 00 00 00 >..!.............<
36,37c36,37
< 0010300 00 00 03 00 01 00 03 00 02 00 03 00 00 00 bb 3b >...............;<
< 0010320 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................<
---
> 0010300 00 00 03 00 01 00 03 00 02 00 03 00 00 00 bc 3b >...............;<
> 0010320 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >................<
48c48
< 0010600 00 00 06 00 01 00 06 00 02 00 06 00 03 00 18 3f >...............?<
---
> 0010600 00 00 06 00 01 00 06 00 02 00 06 00 04 00 18 3f >...............?<
106c106
< 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 00 00 >................<
---
> 0012440 00 80 14 00 01 80 14 00 02 80 14 00 00 00 01 00 >................<
재현 방법에 대한 간단한 참고 사항 :
- 시스템이 유휴 상태이고 캐싱을위한 충분한 RAM이 있는지 확인하십시오.
fdisk -u -l
파티션이 시작되는 곳을 찾기 위해 실행 합니다. 내 편에 1975995입니다- 마운트 된 파티션과 전체 드라이브를 선택하십시오.
- 그런 다음 두 덤프 (NOW1, MAIN1)를 수행하고 비교하십시오. 그들은 동등하게 비교해야한다.
- 파티션의 비트를 변경하고 동기화하십시오.
- 더 많은 시간을 남겨주세요.
- 비트를 변경하고 다시 동기화하십시오.
- NOW2를 덤프하면 NOW1과 다릅니다.
- 덤프 메인 2를 수행, 그것은해야 하지 메인 1 다르다!
hdparm
드라이브 라인을 실행하십시오- MAIN2를 다시 덤프하십시오. 이제 MAIN1과 다릅니다.
- 충분히 빠르면 NOW2와 MAIN2가 동일하게 비교됩니다.
답변
비슷한 테스트를 한 후에 차이가 없었습니다. 특정 섹터가 각 덤프간에 작성되었을 수 있습니다.
다음 명령은 / dev / sda 및 / dev / sda1에서 추출 된 동일한 섹터의 첫 ~ 48MB를 비교합니다.
$ diff <(sudo hexdump -Cv -n $((512*100000)) -s 0x7e00 /dev/sda | awk '{$1=""}1' ) <(sudo hexdump -Cv -n $((512*100000)) /dev/sda1 | awk '{$1=""}1' )
여기서 0x7e00은 첫 번째 파티션의 오프셋입니다.