2011년 1월 17일 월요일

디스크 조각 모음


디스크 조각 모음.

defrag

디프레그.
fragment 상태의, 논리적으로 조각난 file system을 정리하는 것.





"논리적"으로 조각난다!? fragmentation


조각은 조각인데 "논리적"으로 조각난다?
아주 오래전부터 PC에서 많이 사용돼 오던 MS-DOS는 FAT라는 방식의 file system을 사용하고 있었다. File system의 맨 앞쪽에 FAT라는 공간을 만들어 놓고, FAT에 "저장되는 file의 이름, 등록정보, 용량, 사용중인 cluster 정보" 등을 몰아넣는 방식이다.

여타의 PC용 file system에도 이런 문제는 있지만, 이것은 전부 이놈의 FAT라는 멍청한 구조때문이다. 그림을 통해서 알아보자.





이것이 FAT를 사용한 file system의 모습이다.
그림에서 보는 바와 마찬가지로, 1이라는 2개의 FAU 공간을 사용하는 파일의 정보는 FAT에 "a,b의 연속된 공간에 1이라는 파일이 있다"는 식으로 나타난다. 2라는 4개의 FAU 공간을 사용하는 파일의 정보는 FAT에 "c~f의 연속된 공간에 2라는 파일이 있다"는 식으로 나타나며, 3이라는 파일도 그렇다.

그럼 여기서 파일 2를 지웠다고 생각해 보자.




이렇게 나타날 것이다.

이제 여기에 1개의 FAU 공간을 사용하는 A라는 파일을 저장한다고 생각해 보자.
FAT의 특성상 앞부분의 빈 공간부터 가능한 한 많은 공간을 한 file에게 주려고 애쓰기 때문에 아래와 같은 모양이 될 것이다.




A라는 파일의 정보는 c라는 FAU 하나만을 사용한다고 나와있다.

이 상태에서 4개의 FAU 공간을 사용하는 B라는 파일을 저장한다고 생각해 보자.
앞부분부터 차곡차곡 채우려다 보면 아래 그림처럼 될 것이다.




어라? B는 4개의 FAU 공간을 사용하기는 했지만, FAT에 기록된 내용이 조금 다르다. "d~f, 그리고 저~ 뒤에 있는 j에 나뉘어서 B가 저장돼 있다."는 뜻이다. 이렇게 알파벳 순서처럼 정해진 디스크의 저장 위치가 끊어지는 것을 "논리적으로 조각난다"고 한다.

이렇게 논리적으로 조각난 파일은, 위의 그림에서 B라는 파일을 읽을 때 f까지 읽은 다음 한참 뒤의 j를 추가로 읽어야 하므로 f에서 j까지 건너뛰느라 시간 지연이 생긴다. 즉 논리적으로 조각난 파일로 작업할 때에는, 속도가 느려진다.

또, 논리적으로 조각난 이 파일을 삭제한 다음 복구하려고 해도, FAT의 정보는 "B라는 파일은 def로 구성된 파일이었다"는 정도밖에 남지 않기 때문에, 조각난 j 또는 그 이후의 부분은 복구가 쉽게 되지 않는다.




그럼 이렇게 일단 논리적으로 조각이 난 후에 이것을 정리하지 않고 또 파일이 들어가면 어떻게 되는지 보자.

일단 위의 상태에서 파일 3이 삭제된다고 생각하면 아래와 같이 된다.




여전히 B는 j가 따로 떨어져 있는 상태이다.

이 상태에서 아까 지운 2를 다시 저장한다고 생각해 보자.




어라? 2도 FAU의 위치가 조금 바뀌면서, i에서 k 사이가 이빨이 하나 비게 됐다.

결국, 논리적으로 조각이 난 상태에서 파일을 자꾸 읽고 쓰면, 점점 더 많이 조각이 나게 된다는 뜻이다.






조각을 모으자. 디프레그.

자, 그럼 이제 조각을 모아서 파일의 복구 안정성도 높이고, 속도도 빠르게 하자.

역시 그림을 통해서 알아보는게 우리같이 머리 잘 안돌아가는 사람에게는 좋겠다.(핫, 나만 그런가... --;)







이것이 위에서 예를 들었던 "조각난 상태"의 file system이다. 조각들을 모아보자.

먼저, FAT에서 뒤쪽에 위치한 B라는 파일이 디스크의 여유 공간 중 가장 마지막으로 몰려간다.




그러면 결국 아래와 같은 상태가 된다.




자, B라는 파일의 조각은 모아졌다. FAT에서 B라는 파일의 정보가 m부터 p까지 연속된 자리에 놓여있다고 나타났다.

이제 2라는 파일의 조각을 모아보자. 이렇게 하면 될 것이다.




"어? 이상하다? 단순히 k에 있는 부분만 j로 옮기면 연속이 되는것 아닌가?"
그렇다. 실재로 그렇게 하는 경우도 있다. 하지만 이렇게 해서는 A라는 파일과 2라는 파일의 사이에 d, e, f라는 빈 공간이 생기게 되고, 이 빈 공간에 새로운 파일이 끼어들어가면서 또다른 조각이 생길 수 있기 때문에 조각을 모을 때에는 k만을 j로 옮기는 것이 아니라 빈 공간의 가장 앞부분부터 채워나가는 것이다.

하여간 2의 조각을 모으면 이렇게 된다.




자, 2도 B처럼 FAT에서 d,e,f,g의 연속된 위치에 놓였다고 나타났다. 이제 B만 다시 앞의 빈칸을 메꾸러 오면 끝이다. 이렇게...




그러면 조각 모음은 끝이 나고, 최종적인 상태는 다음과 같이 깔끔하게 나타난다.




사실 조각 모음 자체는 FAT에서 "이 파일은 연속된 위치에 있다"는 상태가 되면 이미 끝이다. 하지만 조각 모음을 통해서 디스크의 읽고 쓰는 속도를 높이기 위해서는 파일과 파일 사이에 불필요한 빈 공간이 없는 편이 낫다. 그래서 윈도우 98 등에서 디스크 조각 모음을 할 때 선택적으로 "조각만 모음"할 것인지, "속도 향상을 위해 디스크 전체 조각 모음"할 것인지를 지정할 수 있는 것이다.


참고로, 디스크 조각 모음을 할 때에는, 이런 식으로 현재 있는 파일의 위치를 임의의 다른 위치에 임시로 옮긴 다음 다시 재정렬하는 방식으로 진행된다. 결국, 디스크 조각 모음을 하려면 하드디스크에 아주 약간이라도 여유공간이 있어야만 한다는 이야기이다.
NTFS로 구성된 file system의 경우, 25% 이상의 여유공간이 없으면 디스크 조각모음을 시작조차 할 수 없다. --;






디프레그를 위한 프로그램들

MS-DOS 6.0 에서는 defrag.exe라는 명령으로 file system의 논리적인 조각을 모을 수 있었다. 이 defrag.exe 라는 프로그램이 Norton의 speedisk.exe를 라이선스 받아서 기능을 조금 간소화 한 것으로, 두 프로그램은 사실상 동일하다. 외관상 모양이 조금 다를 뿐.

Windows 95 이후에는 운영체제 자체에 비교적 괜찮은 디프레그 도구(디스크 조각 모음 도구)가 기본적으로 들어간다. "순수"라고 하기는 좀 그렇지만 MicroSoft의 자체 기술로 만들어낸 것으로, 그럭저럭 괜찮게 조각을 모아준다.

Windows NT에서는 이야기가 조금 달라진다. Version 4.0 까지는 디스크 조각 모음 도구가 포함돼 있지 않다. NT 계열의 운영체제에서 사용 가능한 NTFS 파일시스템의 특성상 "조각 모음을 할 필요가 없다"는 개발 당시의 말도 안돼는 컨셉때문에, 굳이 돈을 들여 조각 모음 도구를 NT 전용으로 개발할 필요성을 자각하지 못한 MS의 잘못이다.

NT 계열에서 디스크 조각 모음을 하기 위해서는 Diskeeper 등의 조각 모음 전용 utility를 별도로 구매해야 한다. 뭐, 조각 모음 안하고 살겠다면 별 관계 없지만 NT 계열처럼 작은 용량의 file이 수천개씩 모여있는 운영체제를 쓴다면 조각 모음을 하고, 안하고의 속도 차이가 "하늘과 땅"과도 같다. --;

실제로 NT 계열 운영체제인 Windows XP를 사용할 때, 처음 설치하고 그냥 booting할 때의 시간을 100이라고 하면, 디스크 조각 모음을 가볍게(?) 한번 돌려주고 booting할 때의 시간은 40 정도에 불과하다.

위에서 예로 든 Diskeeper는 후에 기능을 간소화해서 Windows 2000부터 기본적으로 "부록"으로 들어가게 되었다.


이렇게 조각모음 유틸리티를 쓰는 것 말고, 다른 방법을 사용할 수도 있다.

GHOST 등을 사용해서 하드디스크의 image를 만든 다음, 재기록하는 것만으로도 file system의 모든 조각을 모을 수 있다. 하지만 하드디스크에 저장된 데이터만큼의 추가 공간이 별도의 partition으로 여유가 있어야 한다는 문제가 있다.

윈도우에서 권장할 만한 디스크 조각모음 프로그램으로는 개인 경험상 auslogic disk defrag 정도가 좋았다.


참고로, 윈도우 7을 사용한다면, 켜놓고 방치하면 매주 수요일쯤 자동으로 조각모음을 하기도 하니, 조각모음을 별로 신경 안써도 좋겠다.


OS/2의 HPFS 또는 맥의 HFS에 대한 디스크 조각모음이 없다고?

OS/2의 HPFS는 조각모음이 필요 없다.(의견이 분분하지만, 결국 사장되어버린 OS라서 토론해도 별로 의미가 없겠다)

맥의 HFS는, OS9까지는 조각모음이 필요했지만(노턴선생님의 스피드 디스크 정도가 일반적이다) 조각모음 하고자 하는 하드디스크 외의 다른 디스크로 부팅해야 하는 번거로움이 있다.

맥의 HFS+, 즉 OSX에서 일반적으로 관리되는 하드디스크는, 디스크 조각모음이 필요 없다.
하드디스크 공간이 충분히 여유가 있다면 (통상적으로 빈 공간이 전체 디스크 공간의 20% 이상) 디스크 조각 모음은 파일을 생성할 때 기본적으로 자동으로 되며, 혹시 피치 못할 사정으로 데이터가 조각났다면, 시간이 날 때 맥이 자동으로 조각모음을 진행한다.
자세한 것은 애플 홈페이지의 About disk optimization with Mac OS X에서 확인하시든가 마시등가...

댓글 4개:

  1. 오오오 대단하시네요ㅎㅎㅎㅎ
    사실 제 컴퓨터 조각모음이 좀 이상해서 인터넷 찾아보다가 여기까지 들어왔는데요~
    지금 윈도우7 쓰고 있는데, 디스크 조각 모음에 들어가면
    디스크가 4개 나오는데요.
    C드라이브랑 D드라이브랑, SAMSUNG_REC 그리고
    마지막에 SYSTEM 이렇게 나오거든요
    근데 마지막 SYSTEM 드라이브가 뭔지는 잘모르겠는데
    6%조각나있다고 나와 있어서, 조각모음을 했는데
    전혀 줄어들지가 않고 계속 6%로를 유지하고 있어서요
    원래 그런건지 아니면 제가 뭘 모르는건지 궁금해서 그러는데
    혹시 왜 그런지 알려주실 수 있으실까요???><

    답글삭제
  2. 익명님//
    C드라이브는 윈도우가 설치된 드라이브이겠고, D드라이브는 아마도 데이터 저장용 파티션이겠군요.
    SAMSUNG_RECovery 파티션과 SYSTEM 파티션은, 시스템 복구 기능을 위한(윈도우 7의 복구 기능이 아니라, 해당 노트북 전용) 파티션입니다.
    아마 어떤 어떤 파일들을 사용했는지에 대한 로그 정도가 조각나 있을 것이니, 전혀 신경 안쓰셔도 괜찮을 듯 합니다... ^^
    위에서 언급했지만, 빈 공간이 충분히 있는지 또한 눈여겨 보시길... :)

    답글삭제
  3. 우왓~완전 감사해요ㅎㅎㅎ
    사실 익명이 아니라 지메일로 로그인해서 쓸려고 했는데,
    로그인했는데도 자꾸 로그인하라고 몇번 튕겼더니...ㅋㅋㅋ
    도움 주셔서 정말 감사합니다 :)

    답글삭제
  4. 익명님//
    도움이 되셨다니 다행입니다.
    어제 그제 구글 블로그 서비스의 로그인 부분이 조금 흔들거리긴 하더군요. 저도 몇번이고 로그인 재시도했습니다 ㅠㅜ

    답글삭제