팀 업무중에 네트웍장비에 들어가는 시스템 디스크의 이미지를 만들어 내는 것이 있다. 쉬운 말로 하면, 마치 지금 당신이 사용하고 있는 컴퓨터 시스템과 똑같은 것을 만들어 낸다면, 똑같은 장비에 똑같은 하드디스크 내용만 있으면 가능하므로 그 하드디스크 내용을 어딘가에 복사해두어 다음 컴퓨터에 복사하기 위한 일을 말하는 것이다. 장비야 공장에서 찍어 내는 것이고, 거기에도 하드디스크 비슷하게 디지털 카메라에 들어가는 CF card 같은 것이 하드디스크처럼 돌아가는 것이다.

내가 이 업무를 파악했을 때, 약간 불합리(?)한 요소가 있는 것을 보았다. 일단 만드는 순서를 보자면(매번 일어나는 일이다.),

1. 제품을 빌드한다.
2. CF disk 의 파티션을 두개로 나눈다. (sfdisk)
3. 파티션을 포맷하고(mkfs), 두개의 파티션을 두 개의 임시디렉토리에 각각 할당(mount)한다.
4. 부트 로더를 CF disk에 설치하여 부팅가능하게 한다.
5. 빌드된 제품과 OS를 위 두 임시디렉토리에 복사하여, 설치된 것처럼 만든다.
5. CF disk의 데이터를 통째로 하나의 이미지(image) 파일로 떠서(dd) 테스트팀에 전달한다.

불합리한 요소란, 2,3번인데 항상 빌드장비에는 CF disk가 있어야만한다. 그렇다면, 여러 CF가 나와야할 경우 제품별로 빌드장비가 모두 있어야만하고, 이에 따라 빌드 장비 관리 이슈가 늘어나게 된다.

문제는 CF disk 없이 테스트팀에 전달할 이미지 파일을 어떻게 만드느냐이다. 며칠 궁리한 결과,

선행작업
1. CF disk의 파티션을 두 개로 나눈다. (sfdisk)
2. 파티션을 포맷하고(mkfs), 두개의 파티션을 두 개의 임시디렉토리에 각각 할당(mount)한다.
3. 부트 로더를 CF disk에 설치하여 부팅가능하게 한다.
4. 이상의 CF disk의 데이터를 통째로 하나의 이미지(image) 파일로 떠놓는다.(dd)

빌드후작업
5. 부트로더까지 들어 있는 이미지 파일을 일부분만 임시 디렉토리에 할당한다. (loopback mount; mount -o loop,offset=XXX )
6. 빌드된 제품과 OS를 위 두 임시디렉토리에 복사하여, 설치된 것처럼 만든다.
7. 디렉토리 할당 해제후(umount) 변경된 이미지(image) 파일을 테스트 팀에 전달한다.

loopback mount가 이미지의 일부만 가능한 것을 이용하여, 깨끗한 이미지를 복사해두어 이미지를 만들 필요시마다 사용하는 것이다. 이렇게 되면, 최초 선행작업에서만 CF disk가 필요하고 다음부터는 CF disk의 이미지를 가지고 사용하므로 하나의 빌드장비에서 여러 종류의 CF disk를 만들어 낼수 있다.

아이디어 수준에서 원 개발자에게 말해놓았으니, 조만간 바뀌리라 기대한다. ;)
아마 이런 생각을 못하였던 이유가 image의 offset을 주는 방법으로 mount하는 방법이 쉽게 발견되지 않아서인듯하다. 나도 찾는데 시간이 걸렸으니... 또다른 이유에서였다면, 더 찾아 봐야지.
이미지에서 파티션 일부의 위치를 찾는 방법은
$ sfdisk -d /dev/hda
# partition table of /dev/hda
unit: sectors

/dev/hda1 : start=       32, size=    47072, Id=83, bootable
/dev/hda2 : start=    47104, size=    80896, Id=83
/dev/hda3 : start=        0, size=        0, Id= 0
/dev/hda4 : start=        0, size=        0, Id= 0

hda1의 경우 start=32 인데, 32에 512를 곱한 16384가 되어
mount -o loop,offset=16384 /images/20060523_165634_v4100F.img /mnt/cf1
과 같이 하면된다.

신고
  1. listen 2006.06.01 16:19 신고

    이런 글 읽으면 참 재미있어 보인단 말이야...
    추상화의 단계를 높이거나, 점점 원론쪽으로 기울어 가는 나로서는 쉽게 접하기 힘든 일들이라서...
    부럽구려 친구...

+ Recent posts