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 만들기