계산기 사용방법 :

계산기 : http://www.csgnetwork.com/mediasizecalc.html

위 계산기로 계산시 fdisk 정보값을 바탕으로 아래 4가지 입력값을 입력 후 계산하면 결과값이 아래와 같이 산출.
입력값 :
Number Of Heads : 255   Per Drive
Number Of Cylinders : 182401  Per Drive
Number Of Sectors : 63  Per Track
Number Of Byte : 512  Per Sector

결과값 :
Number Of Tracks          : 46512255              Total
Number Of Sectors         : 2930272065           Total
Number Of Bytes            : 1500299297280       Total
Number Of MegaBytes    : 1500299.297280      Total
Number Of GigaBytes     : 1500.299297280      Total


배드섹터 위치 찾기 :
1. HDD 파티션 정보와 모델명은 아래와 같다.
[root@Sample-local data1]# fdisk -l


Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          10       80293+  83  Linux
/dev/sda2              11          75      522112+  82  Linux swap
/dev/sda3              76         140      522112+  83  Linux
/dev/sda4             141      182401  1464011482+   5  Extended
/dev/sda5             141         401     2096451   83  Linux
/dev/sda6             402         499      787153+  83  Linux
/dev/sda7             500         515      128488+  83  Linux
/dev/sda8             516      182401  1460999263+  8e  Linux LVM

[root@Sample-local data1]# sfdisk -d /dev/sda > sda.sf
[root@Sample-local data1]# cat sda.sf
# partition table of /dev/sda
unit: sectors


/dev/sda1 : start=       63, size=   160587, Id=83, bootable
/dev/sda2 : start=   160650, size=  1044225, Id=82
/dev/sda3 : start=  1204875, size=  1044225, Id=83
/dev/sda4 : start=  2249100, size=2928022965, Id= 5
/dev/sda5 : start=  2249163, size=  4192902, Id=83
/dev/sda6 : start=  6442128, size=  1574307, Id=83
/dev/sda7 : start=  8016498, size=   256977, Id=83
/dev/sda8 : start=  8273538, size=2921998527, Id=8e

[root@Sample-local data1]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31500341AS     Rev: CC1H
  Type:   Direct-Access

[root@Sample-local data1]# df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             494M  107M  362M  23% /
/dev/sda1              76M   12M   61M  16% /boot
none                  252M     0  252M   0% /dev/shm
/dev/sda7             122M  5.6M  110M   5% /tmp
/dev/sda5             2.0G  1.6G  278M  86% /usr
/dev/sda6             756M  100M  618M  14% /var
/dev/mapper/lvm_0-home
                      1.4T  1.1T  311G  78% /home


2. 커널 에러메시지 정보는 아래와 같다.
ata1: translated ATA stat/err 0x51/40 to SCSI SK/ASC/ASCQ 0x3/11/04
ata1: status=0x51 { DriveReady SeekComplete Error }
ata1: error=0x40 { UncorrectableError }
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Read (10) 00 88 e6 14 af 00 00 03 00
Current sda: sense key Medium Error
Additional sense: Unrecovered read error – auto reallocate failed
end_request: I/O error, dev sda, ata1: translated ATA stat/err 0x51/40 to SCSI SK/ASC/ASCQ 0x3/11/04
ata1: status=0x51 { DriveReady SeekComplete Error }
ata1: error=0x40 { UncorrectableError }
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Read (10) 00 88 e6 14 af 00 00 03 00
Current sda: sense key Medium Error
Additional sense: Unrecovered read error – auto reallocate failed
end_request: I/O error, dev sda, sector 2296779951


3. 에레메시지에 표기된 배드섹터의 값으로 배드섹터 위치 찾기.
bad sector  : 2296779951

해당 HDD는 Track 당 512Byte 섹터를 적용한 제품으로
(4K 섹터가 적용된 HDD라도 해당 CentOS 4.7_Kernel 2.6.9-78에선 HDD 펌웨어단에서 512Byte로 에뮬레이팅 된다.)
2296779951(배드섹터) * 512 = 1175,951,334,912 Byte 값이 나온다.
위 값을 기바바이트(9자리수를 빼면)로 환산하면 약 1175 Gbyte다.
fdisk의 파티션 정보값과 df 정보를 바탕으로 어림 짐작해도 /dev/sda8 파티션내에서 배드섹터가 발생되었음을 알 수 있다.
즉 /home(유저데이터) 부분에서 발생했다.
* 참고로 해당 서버는 /dev/sda8이 lvm(Single PV)으로 구성되어 있으며, LV 명은 /dev/lvm_0/home 이다.
* 이 문서에 표기된 용량값은 HDD 제조사의 Byte 표기법이다. 즉, OS에서 포맷 후 표기되는 용량이 아니다.
  (df 정보값은 OS 포맷 후 용량이다.)

해당 배드섹터의 위치를 정확히 찾아보면 아래와 같다.(sda.sf 값의 size 참조)
/dev/sda1 ~ /dev/sda7 까지의 값 : (160587 + 1044225 + 1044225 + 4192902 + 1574307 + 256977) * 512 = 4,235,890,176 Byte
/dev/sda8의 값 : 2921998527 * 512 = 1496,063,245,824 Byte
따라서 약 4.3 Gbyte 부터 1,500 Gbyte 사이를 사용하는 /dev/sda8 내의 1175 Gbyte 부분에서 배드섹터가 발생하였으므로
/home 디렉토리내의 데이터 중에 일부가 문제가 생겼다.
* 참고로 sda.sf 값을 참조하지 않고 fdisk -l 의 각 파티션의 Blocks 값을 이용해도 된다.
  (Blocks값 * 2) + 1 = 값        —> 결과 값이 sfdisk -d 에 표시된 size 값과 같다.

그러므로 System(OS) 영역인 /dev/sda1 ~ /dev/sda7 까지 dd로 덤프를 뜬후 System 영역을 복구를 해도 문제가 없겠다.
복구 후 home 디렉토리만 따로 rsync 등으로 백업을 받아서 복구를 마무리하면 된다.

HDD 계산기 사용법 및 배드섹터의 파티션 위치 찾기

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다