말 그대로 잡설

psycho 2014. 1. 13. 02:11

 ※ 필자는 하드디스크 공장에서 일해본 경험이 없기 때문에, 현상에 대한 나름대로의 객관적인 분석을 통하여 작성한 부분이 있으며, 그 부분은 "진실"과는 다를 수 있음을 인정한다. 이곳은 진실에 대한 정확한 서술을 추구하므로, "진실"이 아닌 부분이 있다면, 지적 바란다.


 사용에 문제가 있는 하드디스크를 초기화하는 방법에 대해 찾아본 사람이라면 Low level format이라는 것을 들어봤을 것이다. 그리고 그걸 할 때 사용한다는 프로그램들과 그것의 의미, 사용법에 대한 글들도 많이 봤을 것이다. 본 글의 주제는 이것이다. 세간에 많이 알려진 것과 진실의 괴리를 기록해두는 것이 이곳의 원래 목적인 만큼, 이번에도 생각하기에 따라 얼마든지 논쟁거리가 될 수 있는 주제를 선정했다.


 그나마 좀 개념을 제대로 설명해둔 곳도 있지만, 여기에서 확실하게 개념을 붙잡고 가도록 하겠다. 원래 Low level format이라는 건, 디스크에 데이터를 기록하기 위해 필요한 표식을 그리는 과정이다. 아무것도 없는 원형 공간에 그저 비트열을 기록해두는 것으로는, 데이터의 시작이 어디이고 끝이 어딘지조차 알 수가 없다. 그렇기 때문에, 데이터의 시작이 어디이고 끝이 어디이며, 주변에 기록된 다른 데이터와의 간섭을 피하기 위한 공간, 데이터를 잘못 읽었을 때 그것을 검출, 수정할 수 있는 정정용 코드를 위한 공간 등을 미리 표시해두고 그에 따라 데이터를 기록하게 만든 것이다.

 20년쯤 전에는 하드디스크의 Low level format이라는 게 의미가 있었다. 그 당시에는 기술이 그렇게 좋지 못해서 출고 당시부터 배드 섹터가 있는 것은 물론이요, 후술하겠지만 요즘 하드디스크처럼 얌전히 굴린다고 배드 섹터가 안 생기는 게 아니었기 때문에1 주기적으로 정상적인 기록을 위한 "표식"을 새로 만들어줄 필요가 있었다. 그렇지만, 지금은 그렇지 않다. 애초에 "표식"을 새로 만든다는 것 자체가 굉장히 민감한 작업인데다, 현재는 데이터 밀도가 엄청나기 때문에 컴퓨터의 다른 부품들이 발생시키는 조그만 진동마저도 치명적일 수 있다. 그런 이유로 요즘 하드디스크들은 출고시에 특수 무진동 설비 내에서 Low level format을 하며, 출고 이후에는 Low level format 명령을 받더라도 실제로는 Low level format을 수행하지 않는다. 아예 펌웨어 수준에서 막아놓기 때문이다. 정히 하고 싶다면 하드디스크의 기판을 공장에서 Low level format을 할 때 쓰는 기판으로 바꾸어 달아야 한다. 물론 전문가가 아니라면 장비가 있더라도 하지 않는 것이 정신건강에 좋다.

 그렇기 때문에, Low level format이라는 이름을 달고 있는 프로그램이 있다 하더라도 원래 개념 그대로의 "Low level format"을 해 준다고 생각하면 안 된다. 실제로 (개념을 제대로 아는 사람이 써놓은 것이라는 가정하에)설명을 좀 자세히 들여다보면 Zero-fill이라는 다른 용어로 설명하고 있다. 이는 단어 그대로 0을 채워넣는다는 의미로, 이미 표식이 만들어져 있는 하드디스크의 데이터 부분만을 0으로 채워넣는다는 소리다. 즉, 그런 프로그램을 쓰나, 16진 에디터를 가지고 물리 디스크 형식으로 디스크를 연 다음 전체 영역에 0을 써넣으나 똑같다는 소리다.


 이쯤이면 배드 섹터에 관한 의문이 생길지도 모르겠다. 이런 설명 많이 봤을 것이다. "이 프로그램으로는 물리적인 배드 섹터는 없앨 수 없고 논리적인 배드 섹터만 없앨 수 있다". 과연 여기서의 "물리적인"과 "논리적인"은 무슨 뜻일까?

 기본적으로 물리적인 배드 섹터라는 것은, 어떤 이유에서든2 정상적으로 데이터를 읽고 쓸 수 없는 부분을 의미한다. 표식만이 잘못된 것이라면 위에서 말한 "공장에서 하는 Low level format"을 하면 없어지지만, 실제 사용중에 물리적인 배드 섹터가 생겼다면 이 경우는 제외해도 좋다. 그런 경우는 위에서 설명한 "20년 전 하드디스크"에서나 있을 수 있는 일이다. 그렇기 때문에 최근의 하드디스크에서 이 부류의 배드섹터는 문제가 생긴 기계장치(플래터, 헤드 등) 자체를 교체하지 않는 이상 설령 공장에 들고 가서 Low level format을 새로 하더라도 없어지지 않는 경우가 대다수이며, 그냥 그 하드디스크를 버릴 때까지 달고 살아야 한다고 보면 된다.

 반면 논리적인 배드 섹터라는 것은, 실제 하드디스크에서 데이터를 읽고 쓸 수 없는 부분을 의미하는 것이 아니다. 이것은 원래 운영체제에서 "물리적인 배드 섹터"를 관리하기 위해3 파일시스템 수준에서 표시해두는 것으로, 어디까지나 소프트웨어적인 표식이기 때문에 반드시 물리적인 배드 섹터에만 표시해두란 법도 없고, 당연히 없앨 수도 있다. 오히려 요즘에는 배드 섹터를 표시하기보다는 몇몇 특수 응용프로그램이나 악성 프로그램 등에서 예약 영역을 만들기 위해 사용하는 경우가 더 많다. 이것을 없애는 데는 저런 특별한 프로그램이 필요하지도 않다. 일반적인 포맷4 프로그램도 얼마든지 해당 작업을 할 수 있다. 단지 빠른 포맷 옵션만 꺼주면 된다. 빠른 포맷 옵션을 켜둔 상태에서는 기존 파일시스템의 구조 정보를 그대로 활용하기 때문에 한 번 표시된 배드 섹터를 없애지는 않는다.


 그러면 이런 프로그램을 왜 쓰는 걸까? 이런 프로그램들에 대해 일반인들이 막연히 가지는 기대와 실제 동작 사이에서 억지 결론을 이끌어내보자면, 기존의 들쭉날쭉한 패턴 대신 "평평한" 데이터를 기록해줌으로써 일종의 "안정성"을 회복하려는 정도가 되겠다. 실제로 "물리적인" 배드 섹터가 있는 부분도 아닌데 벤치마크 프로그램에서 들쭉날쭉 그래프가 튀는 경우에는 Zero-fill을 몇 번 돌려주면 효과가 있는 경우도 있다. 그렇지만 이건 어디까지나 "정상적인 부분"인 경우고, 당연히 물리적인 배드 섹터에는 효과가 없다. 대부분의 경우 얻을 수 있는 것은 자기 만족감 정도뿐이다.

 가끔씩 실제로 읽고 쓰지 못하던 배드 섹터가 없어졌다는 경우를 볼 수 있는데, 이 또한 특별히 이 부류의 프로그램을 사용해서 벌어진 현상이 아니다. 요즘의 하드디스크들은 혹시라도 발생할 수 있는 배드 섹터를 처리하기 위해 여분의 섹터를 가지고 있으며, 불안정한 섹터가 생기면 펌웨어 수준에서 해당 섹터의 위치 정보를 이 여분의 섹터를 가리키도록 바꿔버린다. 이게 SMART 정보에서 볼 수 있는 "Reallocation"이다. 읽기의 경우에는 "어쩌다 데이터를 제대로 읽어냈을 때"에만 확실하게 위치를 바꾸고5 그렇지 않은 경우에는 처리를 보류하지만6, 쓰기 작업의 경우에는 기존 데이터의 의미가 없어지기 때문에 즉시 위치 정보를 바꿀 수 있다. 새로 할당된 여분의 섹터는 멀쩡하기 때문에 사용자가 보기에는 이전에 있었던 배드 섹터가 없어진 것처럼 보인다. 물론 추후 읽고 쓰는 작업을 할 때는 따로 해당 영역을 찾아가야 되기 때문에 성능이 떨어진다.

 다른 용도라면 보안을 위해 데이터를 파괴하는 정도인데7, 이 경우에도 Zero-fill만 하는 프로그램보다는 여러 패턴을 반복해서 기록하는 Wipe 전용 프로그램을 따로 쓰는 것이 훨씬 유리하다. 자기 매체에 한 번 덮어쓴 정도는 복구가 가능하다는 건 상식이다. 그렇지 않다면 데이터 복구 회사가 어떻게 존재할 수 있겠는가? 그들이 사기를 치는 게 아니라면 말이다.


 어지간히 허와 실을 알아본 듯하니 이쯤에서 사족을 하나 달아놓고 글을 마칠까 한다. 보통 Low level format(엄밀하게 말하자면 Zero-fill)을 하는 프로그램을 소개하는 곳에 가 보면 이 작업이 하드디스크에 무리를 준다는 이야기가 자주 보이는데, 말짱 개소리다. 한 곳에 반복적으로 데이터를 기록하는 것도 아니고 처음부터 끝까지 순차적으로 0을 한 번 기록하는 게 끝인데, 이걸로 무리가 갈 정도면 일반적인 작업시에 걸리는 부하 수준에서는 아예 쓸 수가 없는 물건이 되어 버린다. 이 작업보다는 메모리를 과다하게 사용할 때 스왑을 이용하는 경우나 P2P를 돌리는 쪽이 훨씬 무리가 많이 가는 작업임을 말해둔다.

각주 1

요즘 하드디스크가 오래가지 않는 것은 멀티태스킹이다 P2P다 뭐다 해서 혹사시키기 때문이지 절대로 옛날보다 내구성이 떨어져서가 아니다. 객관적인 내구성 지표는 꾸준히 향상되어 왔다.

각주 2

매체 자체에 결함이 생겼든, 표식에 문제가 생겼든, 기타 기계장치에 문제가 생겼든

각주 3

배드 섹터에 데이터를 기록헤버리면 안 되니까

각주 4

보통 High level format이라 불리는 파일시스템 생성작업

각주 5

불안한 섹터는 잘못된 값이 계속 읽히거나 읽을 때마다 값이 다르며, ECC 정보는 그럴 때 쓰라고 있는 것이다. 활용 가능한 정보를 모두 동원해서 데이터를 정확하게 읽어냈을 때 이 작업을 수행한다.

각주 6

사용자가 확실하게 해당 데이터를 포기하겠다는 의사를 보이지 않은 이상 임의대로 처리할 수 없기 때문이다. 이런 섹터는 보통 Pending sectors 등으로 표현된다.

각주 7

운영체제에서 파일을 지울 때는 속도를 이유로 데이터 영역을 소거하지 않는다.

  1. 요즘 하드디스크가 오래가지 않는 것은 멀티태스킹이다 P2P다 뭐다 해서 혹사시키기 때문이지 절대로 옛날보다 내구성이 떨어져서가 아니다. 객관적인 내구성 지표는 꾸준히 향상되어 왔다. [본문으로]
  2. 매체 자체에 결함이 생겼든, 표식에 문제가 생겼든, 기타 기계장치에 문제가 생겼든 [본문으로]
  3. 배드 섹터에 데이터를 기록헤버리면 안 되니까 [본문으로]
  4. 보통 High level format이라 불리는 파일시스템 생성작업 [본문으로]
  5. 불안한 섹터는 잘못된 값이 계속 읽히거나 읽을 때마다 값이 다르며, ECC 정보는 그럴 때 쓰라고 있는 것이다. 활용 가능한 정보를 모두 동원해서 데이터를 정확하게 읽어냈을 때 이 작업을 수행한다. [본문으로]
  6. 사용자가 확실하게 해당 데이터를 포기하겠다는 의사를 보이지 않은 이상 임의대로 처리할 수 없기 때문이다. 이런 섹터는 보통 Pending sectors 등으로 표현된다. [본문으로]
  7. 운영체제에서 파일을 지울 때는 속도를 이유로 데이터 영역을 소거하지 않는다. [본문으로]