Defragmentation
NTFS는 FAT[32]보다 fragmentation이 덜 생기는 것으로 알고 있었고, 요즘엔 어차피 하드 디스크의 속도도 빠르고 캐시도 크기 때문에 fragmentation에 대해 그다지 신경쓰지 않고 살고 있었다. 나온지 10년이 꽤 넘었으니, 이젠 특별히 디스크를 여유없게 쓰거나 tmp 파일을 많이 만들거나 하지만 않으면 NT 커널이 어느 정도는 defrag를 알아서 해 줄 것으로 생각하고 있었다. 컴퓨터를 사용하려면 config.sys 정도는 알아서 관리할 수 있어야 했던 20세기가 아니지 않은가!
I was wrong.
나는 회사 노트북과 집의 PC간에 unison file synchronizer를 이용하여 몇 GB 정도의 데이터를 동기화하고 있었는데, 지난 주 출장 다녀온 후 그동안 밀린 동기화를 집의 네트웍 내에서 하면 금방 할 수 있을 것으로 생각했다. 그런데 내부 IP 주소로 연결했는데도 시간이 꽤 걸리는 것 아닌가? 더군다나 집 PC의 하드디스크가 엄청나게 버벅이는 소리를 냈다. 180GB 중 절반 가까이가 남아있는 파티션이었기 때문에 defrag를 할 필요가 없으리라고 생각하고 있었지만 그래도 한번 해보았더니, 웬 걸, 많은 파일들이 수백, 많으면 천개 이상으로 fragmentation 되어 있었다. 디스크가 여유가 많은데도 왜 이렇게 fragmentation이 심할까 하고 봤더니 대충 다음의 프로그램들에 의해 생성된 파일들이었다.
공통점은 네트웍 혹은 인코딩 속도 때문에 긴 시간 동안 크기가 큰 파일을 write하는 프로그램이라는 점이었다. NTFS가 copy처럼 미리 파일 사이즈를 알 수 있는 경우에는 fragmentation을 여간하면 발생시키지 않지만 최종 크기를 모르는채로 파일을 생성하여 긴 시간 동안 write하면서 동시에 다른 파일을 write하면 fragmentation이 많이 발생하는 것 같았다.
XP에 기본으로 포함되어 있는 “조각 모음"을 사용하니 defrag 하는데 시간이 너무 많이 걸려서 중간에 중지하고 diskeeper의 trial 버전을 사용해봤다. diskeeper 로도 꽤 시간이 걸리기는 했으나, 일단 defrag 되고나니 하드 디스크에서 발생하는 소리가 훨씬 줄어들었다는 것을 금새 알 수 있었다. 예전의 명성만 믿고 별 생각없이 구입했던 시게이트 바라쿠다 하드가 너무 소음이 크다고 생각하고 있었는데, defrag를 하는 것 만으로도 이많큼 소리가 줄어들 줄은 몰랐다.
Diskeeper 덕에 문제를 해결하긴 했는데, 이걸 계속 사용하기 위해 구입을 할까 고민하다가 (home version은 그다지 비싸진 않지만, XP의 “조각 모음"과 기능이 많이 달라보이지도 않았다. 하지만 “조각 모음"은 가끔씩 수동으로 돌려줘야 했다) 좀 찾아보니 defrag.exe라는 같은 기능의 command line version이 XP에 포함되어 있다는 것을 알았다. 결국 아래와 같은 batch 파일을 “예약된 작업"에 등록해두고 몇 주 후 다시 증상을 볼 예정이다.
@echo off
echo Defragmentation Starting... > autodefrag.log
defrag c: >> autodefrag.log 2>&1
defrag d: >> autodefrag.log 2>&1
defrag e: >> autodefrag.log 2>&1