1. SLC4 USB Booting Disk 만들기



  • 주의 : 이 작업은 SLC 커널 버전 2.6.9-55.EL.cern 를 기준으로 작성한 것 입니다.


1.1. 부트 이미지파일 다운로드




1.2. 부트 이미지 수정



  • 부트 이미지에서 네트워크가 작동하지 않는 부분을 수정하기 위해서 이 작업을 한다.
  • 즉, skge모듈을 복사하거나 sk98lin을 수정하는 일이다.
  • 모든 작업은 관리자 계정에서 한다.
  • 이미지를 마운트
    [root@clauson Desktop]# ls
    diskboot.img
    [root@clauson Desktop]# mount -oloop diskboot.img /mnt/
    [root@clauson Desktop]# cd /mnt/
    [root@clauson mnt]# ls
    boot.msg isolinux.bin options.msg snake.msg vmlinuz
    general.msg ldlinux.sys param.msg splash.lss
    initrd.img memtest rescue.msg syslinux.cfg
    # 여기서 syslinux.cfg는 부팅할때 부팅옵션을 주는 등의 작업을 하는 스크립트다.

  • initrd.img파일이 네트워크 모듈에 관련하므로 복사해서 수정
    [root@clauson mnt]# cd ~clauson
    [root@clauson clauson]# ls
    Desktop
    [root@clauson clauson]# mkdir img
    [root@clauson clauson]# cp /mnt/initrd.img ./img/

  • initrd.img 파일을 풀어서 마운트
    [root@clauson img]# ls
    initrd.img
    [root@clauson img]# mv initrd.img initrd.img.gz
    [root@clauson img]# ls
    initrd.img.gz
    [root@clauson img]# gunzip initrd.img.gz
    [root@clauson img]# ls
    initrd.img
    [root@clauson img]# mkdir mount
    [root@clauson img]# mount -oloop initrd.img mount/
    [root@clauson img]# ls
    initrd.img mount
    [root@clauson img]# cd mount/
    [root@clauson mount]# ls
    bin dev etc linuxrc lost+found modules proc sbin selinux sys tmp var

  • modules폴더 내의 파일들을 수정 할 것이므로 하위 폴더에 복사
    [root@clauson mount]# cp -a modules/ ../
    [root@clauson mount]# cd ..
    [root@clauson img]# ls
    initrd.img modules mount

  • 모듈폴더 내의 modules.cgz파일을 풀기
    [root@clauson img]# mkdir cgz
    [root@clauson img]# ls
    cgz initrd.img modules mount
    [root@clauson img]# cp ./modules/modules.cgz modules.cpio.gz
    [root@clauson img]# cd modules
    [root@clauson modules]# ls
    module-info modules.dep modules.usbmap pcitable
    modules.cgz modules.pcimap pci.ids
    [root@clauson modules]# cd ..
    [root@clauson img]# ls
    cgz initrd.img modules modules.cpio.gz mount
    [root@clauson img]# cat modules.cpio.gz | gunzip | cpio -idv
    [root@clauson img]# ls
    2.6.9-55.EL.cern cgz initrd.img modules modules.cpio.gz mount

  • skge 모듈을 지금 작업하는 컴퓨터에서 복사하여 넣기
    [root@clauson img]# cd 2.6.9-55.EL.cern/
    [root@clauson 2.6.9-55.EL.cern]# ls
    i686
    [root@clauson 2.6.9-55.EL.cern]# cd i686/
    [root@clauson i686]# cp /lib/modules/2.6.9-55.EL.cern/kernel/drivers/net/skge.ko .
    [root@clauson i686]# ls skge.ko
    skge.ko # 잘 복사해왔다.

  • skge 모듈을 잘 복사했으므로 다시 cgz파일로 압축하고 modules 폴더로 복사
    [root@clauson img]# find 2.6.9-55.EL.cern/ -type f | cpio -o -H crc | gzip -n9 > modules.cgz
    15658 blocks
    [root@clauson img]# ls
    2.6.9-55.EL.cern cgz initrd.img modules modules.cgz modules.cpio.gz mount
    [root@clauson img]# cp modules.cgz ./modules
    cp: overwrite `./modules/modules.cgz'? y

  • modules.pcimap 수정
    [root@clauson img]# cd modules
    [root@clauson modules]# ls
    module-info modules.dep modules.usbmap pcitable
    modules.cgz modules.pcimap pci.ids
    [root@clauson modules]# vi /lib/modules/2.6.9-55.EL.cern/modules.pcimap
    # skge부분을 복사해서
    [root@clauson modules]# vi ./modules.pcimap
    # 이곳에 복사

  • module-info 수정
    [root@clauson modules]# vi module-info
    # sky2를 skge로 수정

  • pcitable 수정
    [root@clauson modules]# vi pcitable
    # sk98lin을 skge로 수정 (vi편집기에서 :%s/sk98lin/skge/g) # /g는 안물어보고 변

  • modules폴더의 모든 파일을 수정했으므로 다시 mount폴더의 modules에 복사
    [root@clauson modules]# ls
    module-info modules.dep modules.usbmap pcitable
    modules.cgz modules.pcimap pci.ids
    [root@clauson modules]# cd ..
    [root@clauson img]# ls
    2.6.9-55.EL.cern cgz initrd.img modules modules.cgz modules.cpio.gz mount
    [root@clauson img]# cp -rf modules ./mount/
    cp: overwrite `./mount/modules/modules.pcimap'? y
    cp: overwrite `./mount/modules/pci.ids'? y
    cp: overwrite `./mount/modules/modules.dep'? y
    cp: overwrite `./mount/modules/modules.cgz'? y
    cp: overwrite `./mount/modules/modules.usbmap'? y
    cp: overwrite `./mount/modules/module-info'? y
    cp: overwrite `./mount/modules/pcitable'? y
    # mount에 modules안의 파일들을 복사했으므로 lookback디바이스로 mount에 연결된 initrd.img도 자연히 바뀌었다.
    [root@clauson img]# umount mount/

  • initrd.img를 모두 수정했으므로 다시 압축한다.
    [root@clauson img]# gzip -n9 initrd.img
    [root@clauson img]# ls
    2.6.9-55.EL.cern initrd.img.gz modules.cgz mount
    cgz modules modules.cpio.gz

  • 압축한 파일을 다시 initrd.img로 바꾸어 본래 자리인 /mnt에 덮어쓴다.
    [root@clauson img]# cp -f initrd.img.gz /mnt/initrd.img
    cp: overwrite `/mnt/initrd.img'? y
    cp: writing `/mnt/initrd.img': No space left on device
    # 그런데 디바이스에 공간이 없다는 에러메세지가 뜬다.
    # 여기서 주의해야한다. initrd.img를 제대로 복사한게 아니기 때문에 나중에 이미지를 새로 만들고 나서 /mnt에 있는 파일들을 복사해올때 initrd.img는 덮어쓰다만 불완전한 파일이다. 그러므로 나중에 initrd.img.gz파일을 initrd.img로 다시 복사하는 과정을 거쳐야 한다.
    # skge모듈을 복사해오는 과정에서 원래 loop device 이미지 크기보다 커졌기 때문이다.
    # loop device 이미지를 새로 만들자

  • 이미지 만들기
    [root@clauson img]# dd if=/dev/zero of=new.img bs=512 count=28800
    28800+0 records in
    28800+0 records out
    [root@clauson img]# ls
    2.6.9-55.EL.cern initrd.img.gz modules.cgz mount
    cgz modules modules.cpio.gz new.img
    # 용량이 15MB인 new.img가 만들어졌다.

  • 만든 이미지를 loop device로 만들고 포맷한 후 부팅가능하게 하고 loop device 해지
    [root@clauson img]# losetup /dev/loop1 new.img
    # loop device로 만들기.
    [root@clauson img]# mkdosfs -v -F12 /dev/loop1
    mkdosfs 2.8 (28 Feb 2001)
    Loop device does not match a floppy size, using default hd params
    /dev/loop1 has 64 heads and 32 sectors per track,
    logical sector size is 512,
    using 0xf8 media descriptor, with 28800 sectors;
    file system has 2 12-bit FATs and 8 sectors per cluster.
    FAT size is 11 sectors, and provides 3593 clusters.
    Root directory contains 512 slots.
    Volume ID is 4785c4ba, no volume label.
    # 포맷완료.
    [root@clauson img]# syslinux /dev/loop1
    # 부팅 가능하게 함.
    [root@clauson img]# losetup -d /dev/loop1
    # loop device 해지.

  • 이미지를 마운트 해서 위에서 준비한 부트 파일들 복사
    [root@clauson img]# mkdir test
    [root@clauson img]# mount -oloop new.img test/
    [root@clauson img]# cd /mnt/
    [root@clauson mnt]# ls
    boot.msg isolinux.bin options.msg snake.msg vmlinuz
    general.msg ldlinux.sys param.msg splash.lss
    initrd.img memtest rescue.msg syslinux.cfg
    [root@clauson mnt]# cp boot.msg isolinux.bin options.msg snake.msg vmlinuz general.msg param.msg splash.lss memtest rescue.msg syslinux.cfg ~clauson/img/test/
    # ldlinux.sys와 initrd.img를 제외한 모든 파일 복사
    # ldlinux.sys는 바로 전 과정에서 syslinux명령(부팅가능한 파일을 만드는 명령)으로 ldlinux.sys을 만들었기 때문에 이미 새 이미지에 들어가 있으므로 제외해야 한다.
    # initrd.img는 앞서 말한 것 처럼 완전하지 않은 파일이다.
    # 아직 안끝났다. /mnt에서 복사해 온 initrd.img파일은 아까 복사하다 공간부족으로 실패한 불완전한 파일이므로 ~clauson/img/initrd.img.gz파일을 initrd.img로 다시 복사해야한다.
    [root@clauson img]# ls
    2.6.9-55.EL.cern initrd.img.gz modules.cgz mount test
    cgz modules modules.cpio.gz new.img
    [root@clauson img]# cp initrd.img.gz test/initrd.img
    [root@clauson test]# ls
    boot.msg initrd.img ldlinux.sys options.msg rescue.msg splash.lss
    general.msg isolinux.bin memtest param.msg snake.msg vmlinuz
    # 이것으로 이미지를 완성했다.

  • 이미지를 완성했으므로 언마운트
    [root@clauson mnt]# umount ~clauson/img/test

  • 만든 새로운 부트 이미지를 USB에 복사
    # 복사 할 USB를 연결하자.
    [root@clauson mnt]# cd ~clauson/img/
    [root@clauson img]# ls
    2.6.9-55.EL.cern initrd.img.gz modules.cgz mount test
    cgz modules modules.cpio.gz new.img
    [root@clauson img]# umount /media/usbdisk/
    # dd명령으로 복사할 때는 언마운트 해야 함.
    [root@clauson img]# dd if=new.img of=/dev/sda
    28800+0 records in
    28800+0 records out
    # mount명령으로 USB를 sda로 마운트 하는지 확인한 후 이 작업을 해야함.

* 모든 작업이 끝났다. 잘 복사 했는지 확인


  • # USB를 뺏다 다시 껴보자.
    [root@clauson /]# cd /media/usbdisk/
    [root@clauson usbdisk]# ls
    boot.msg isolinux.bin options.msg snake.msg vmlinuz
    general.msg ldlinux.sys param.msg splash.lss
    initrd.img memtest rescue.msg syslinux.cfg
    # 모든 파일이 잘 있다.
    # 끝났다.

  • 클러스터에 만든 USB 부팅 디스크로 부팅이 잘 이루어지고 네트워크를 잘 잡는지 확인해보자.
  • 모든 것이 잘 이루어지면 성공

USB Booting Disk 만들기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다