RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

1. kdump?

kdump 는 커널 crash 가 일어났을 때 메모리 덤프를 해주는 역할로 구 버전의 diskdump netdump kexec kdump로 대체되었습니다. kdump에서는 raw device, disk partition, nfs, ssh 등을 지원합니다.

 

2. kexec / kdump

1) kexec 의 역할

 kexec는 새로운 커널이 BIOS를 통하지 않고 재부팅이 될 수 있게 해 줍니다. kexec는 부팅시에 메모리에(RAM)에 상주하게 되며 패닉(panic) 발생 시 현재 커널을 정지 시키고 새로운 커널(dump용 커널)을 동작시키는 역할을 합니다.

 

2) kdump의 역할

 /etc/kdump.conf 환경설정 파일을 가지고 있으며, 서버의 panic 상황을 지켜보는 역할을 합니다.

 

3. dump 생성 작동 단계

1) 시스템 패닉 발생.(System panics)

2) kdump 커널로 부팅

3) kdump initramfs 로딩 및 init 작동

4) /etc/kdump.conf에 덤프 타켓이 설정되어 있는지 확인( 5, 아니오 9)

5) /etc/kdump.conf설정에 따라 capture dump

6) capture가 정상적으로 완료 되었는지 확인 ( 12, 아니오 7)

7) /etc/kdump.conf 설정 중 default_action halt 일 경우 ( 14, 아니오 8)

8) /etc/kdump.conf 설정 중 default_action reboot 일 경우 ( 12, 아니오 9)

9) root filesystem을 마운트 한 뒤, pivot_root(change root file system), /sbin/init 진행

10) kdump 서비스 시작

11) capture core CP/proc/vmcore /var/crash/<host-addr>-<date>/vmcore로 진행

12) 재부팅

13) shell drop

14) 시스템 다운(정지)

 

kdump가 설정되면, 패닉 발생 시 덤프를 뜨기 위한 비상용 커널이 미리 메모리에 올라가 있다가, 패닉 발생시 해당 비상 커널로 제어권이 넘어가고(실제로는 특수한 형태의 재부팅이 이루어집니다) 물리메모리(Raw memory)를 읽어 저장하게 됩니다.

 

4. kdump 설정법

1) /etc/kdump.conf

#raw /dev/sda5

#ext3 /dev/sda3

#ext3 LABEL=/boot

#ext3 UUID=03138356-5e61-4ab3-b58e-27507ac41937

#net my.server.com:/export/tmp

#net user@my.server.com

#path /var/crash

#core_collector makedumpfile -c --message-level 1

#link_delay 60

#kdump_post /var/crash/scripts/kdump-post.sh

#extra_bins /usr/bin/lftp

#extra_modules gfs2

#options modulename options

#default shell

 

옵션 설명

1) raw device dump 받기

raw <devicename>

 

2) disk dump 받기

     ext3 <devicename>

     ext3 LABEL=라벨명

     ext3 UUID=f15759be-89d4-46c4-9e1d-1b67e5b5da82

 

생성 디렉토리를 변경

path /원하는 디렉토리명

 

3) NETWORK를 통한 dump file 생성

     NFS설정

net <nfs server>:</nfs/mount>

 

     SSH설정

net <user>@<ssh server>

설정 이 후, service kdump propagate 명령어로 ssh keys를 생성

 

4) dump 파일 생성 옵션

core_collector makedumpfile -c --message-level 1

 vmcore를 대용량의 메모리를 FULL DUMP로 생성하게 되면, 오래 걸리기 때문에 확인 쓸모 없는 페이지를 빼고, 압축을 하여 시간을 단축 시키는 것이 좋다. 옵션 확인 방법은 /sbin/makedumpfile --help로 확인이 가능하다

-c : 각 페이지를 압축하는 옵션

-d : 특정 분석이 불필요한 페이지를 빼는 옵션(X표 있는 것은 제외되는 page)

 

Dump

zero

cache

cache

user

free

Level

page

page

private

data

page

0






1

X





2


X




4


X

X



8




X


16





X

31

X

X

X

X

X

, FULL DUMP를 위해서는 –d 0 옵션을 주어야 하며, -d 31는 가장 적은 양의 덤프 옵션이다.

–c, 옵션과 –d 옵션 적용 시에는 vmcore 생성하는 시간이 늘어날 수 있으니, 재부팅 이 후 빨리 원복이 되어야 하는 시스템에서는 제외 하는 것이 좋다.

 

아무것도 설정 안 했을 시, 기본으로 적용 되는 옵션

path /var/crash

core_collector --message-level 7

 

5) 커널 파라미터 설정

/etc/grub.conf

# grub.conf generated by anaconda

#

#boot=/dev/hda

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Client (2.6.17-1.2519.4.21.el5)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.17-1.2519.4.21.el5 ro root=LABEL=/ rhgb quiet crashkernel=128M@16M

        initrd /boot/initrd-2.6.17-1.2519.4.21.el5.img

 

crashkernel=128M@16M에서 x86시리즈에서는 32bit 64bit든 기본은 128M@16M으로 설정을 한다. 여기에서 128M RAM에 상주하는 용량이다. 기본 권고는 상 위와 같으나 메모리 용량이 클 경우에는 좀 달리한다. 메모리 용량이 256GB이상이거나 TB급일 경우에는 crashkernel=128M@32M로 설정하라는 access.redhat.com 권고가 있으니, vmcore 생성이 정상적이지 않을 경우에는 참조하여 변경 하도록 한다.

 

참조:https://access.redhat.com/kb/docs/DOC-2164 , https://access.redhat.com/kb/docs/DOC-31705

 

5. Daemon 구동

1) kdump daemon 서비스 등록

# chkconfig kdump on (혹은 chkconfig --level 345 kdump on)

 

2) kdump daemon 구동

# service kdump start

 

3) kdump daemon 정지

# service kdump stop

 

4) kdump daemon 상태 확인

# service kdump status

 

6. kdump 테스트 방법

1) Alt+ SysRq + C

/etc/sysctl.conf 에서 kernel.sysrq = 1 로 설정 후 sysctl -p로 활성화 이 후 사용 가능

      키보드에서 Alt + sysRq + C 키를 동시에 눌러서 패닉 유발.

      echo c > /proc/sysrq-trigger 명령어를 통해서 패닉 유발

 

2) NMI_WATCHDOG

서버 HANG 상태로 인하여, keyboard interrupts가 먹혀들지 않아 " Alt+ SysRq + C"로 패닉 유발이 되지 않을 때 셋팅

      /etc/grub.confnmi_watchdog=1(혹은 2) 파라미터를 설정

      (vmware의 경우)nmi 시그널을 보냄

 

3) NMI(Non maskable interrupt) button

H/W에서 지원하는 nmi 버튼을 이용 하기 위한 셋팅

      /etc/sysctl.conf kernel.unknown_nmi_panic = 1을 설정 후 활성화

      /etc/grub.confnmi_watchdog=1(혹은 2) 파라미터를 설정

      nmi 버튼을 누름

 

 

Trackback
Reply
multi-queue?

 리눅스의 sendmail을 이용하여 메일을 발송하면 /var/spool/mqueue/ 디렉토리에 내용을 저장한 뒤에 SMTP로 이용하여 메일을 보내고 완료되면 삭제되는 방식이다.
 소규모 메일 서버라면 상관이 없겠지만 바로바로 발송이 완료되어 삭제가 되어서 큰 문제는 생기지 않지만, 회사의 홍보물 등의 대량으로 뿌리는 메일일 경우에는 문제가 발생할 수도 있다.
 적게는 몇 천, 많게는 몇 만건이상의 메일이 /var/spool/mqueue/ 디렉토리에 쌓이게 되고 이는 성능저하와 시스템 불안정을 초래하기도 한다. 특히나 상대방이 스팸(?) 메일을 받기 싫다고 이상한 메일 주소를 적으면 기하급수적으로 쌓이게 된다.

mailq 명령어를 치면 끝도 없이 올라가는 미발송 쿼리를 볼 수 있다.

 이러한 단점을 해소 하기 위한 것이 바로 multi queue 인것이다. 쉽게 말해서는 /var/spool/mqueue/q1 ,q2, q3 ... 디렉토리를 생성하여 한 디렉토리에 부하가 걸리는 것을 방지하여 병목현상을 줄인다고 생각하면 된다.
그렇다면 장점은 무엇인가?

첫번째, 디렉토리 분산으로 하나의 디스크 파티션을 사용하였을때 생길 수 있는 병목현상을 줄인다.
두번째, queue runner(메일 발송이 안된 메일을 다시 보내기 위한 데몬)이 다중으로 처리하여 효율성을 높힐 수 있다.
세번째, 한 디렉토리에 많은 파일이 있을 때 생기는 속도 저하를 피할 수 있다.

sendmail 8.10버전 이 후버전 부터는 multi queue를 지원하므로 대용량 메일 발송 서버라면 필히 설정을 하도록 하자.

가장 먼저 sendmail 버전부터 확인하고 시작하자.
# echo \$Z | /usr/sbin/sendmail -bt -d0

병렬처리 할 디렉토리 생성
# mkdir /var/spool/mqueue/q{1,2,3,4,5,6,7,8,9}

sendmail QueueDirectory 설정
# vi /etc/mail/sendmail.cf
# queue directory
O QueueDirectory=/var/spool/mqueue/q*

sendmail 재시작
# service sendmail restart

정상적으로 mail queue가 설정이 되어있는지 확인
# [uzoogom]root:~ > mailq
/var/spool/mqueue/q1 is empty
/var/spool/mqueue/q2 is empty
/var/spool/mqueue/q3 is empty
/var/spool/mqueue/q4 is empty
/var/spool/mqueue/q5 is empty
/var/spool/mqueue/q6 is empty
/var/spool/mqueue/q7 is empty
/var/spool/mqueue/q8 is empty
/var/spool/mqueue/q9 is empty

이걸로 완료.
다 기능에 비해서 설정이 무지 쉬우니 왠만하면 꼭 해주자!
Trackback
Reply
언제나 최신버전을 고집하는 얄궂은 특성때문에 이번에 나온 php 5.3을 설치 해 보았다.
신나게 설치하고 나니 오류가 조금 뜬다. 뭔가 함수명이 조금 바뀌고 사라지고 생겨나서 그러한 문제..

가장 먼저 5.3 에서는 TimeZone을 설정하지 않으면 warning을 뿌려된다.

php 5.3서는 기본적으로 사용하던 php.ini-dist 라는 파일이 없어서 당황하게 만든다.
대신 php.ini-development, php.ini-production 2개의 파일이 생기는데 둘 중 아무거나 사용해도 무방하다.
약간의 옵션 차이만 있을 뿐이다.

# Time Zone 셋팅
date.timezone = Asia/Seoul


그리고 적잖이 당황하게 만든 phpinfo보기!
사실 phpinfo를 보기 위해서 적는 아래의 문구 이게 문제가 되었다.
<?      phpinfo();     ?>

위 함수 구문은 short open tag라고해서 축약식으로 쓰는거다.
기본적으론 On이 되어 있는데 5.3에서는 Off로 되어 있어서 shot open tag가 안 먹혀서 php 함수가 안먹혀서 화면에 뿌려주질 않는 것이었다.

php.ini에서 아래를 수정해준다.
short_open_tag = On

이러면 5.3 정상구동-

Trackback
Reply
오류내용)
server/.libs/libmain.a(exports.o).data+0xa44): undefined reference to `apr_os_uuid_get'
collect2: ld returned 1 exit status
make[1]: *** [httpd] Error 1
make[1]: Leaving directory `/opt/httpd-2.2.13'
make: *** [all-recursive] Error 1

해결방법)
아파치 컴파일 시 아래 옵션을 추가 하면 OK!
--with-included-apr

간단하죠!
Trackback
Reply
간혹 서버를 셋팅하고 /etc/vsftpd/vsftpd.conf 정상적으로 셋팅을 하였음에도 불구하고
client에서 500 Ooops error를 뿌려된다면 100프로입니다.

SELinux 이놈이 문제인거죠!

# setsebool -P ftp_home_dir=1

위 커맨드를 입력하면 ftp directory에 대한 접근을 허가를 하게 되고 -P 옵션은 영구적으로 설정을 저장한다는 뜻입니다.
Trackback
Reply

이건 참 리눅스에 대단한 강점이라고 할 수 있는 부분이다.

놀랍지 아니 한가!


여기에서는 perl을 이용하였지만, sed 를 이용하여서도 가능하다.


그리고 혹시 모를상황을 대비하여 백업파일을 생성하고 싶다면

perl -pi -e 에서 perl -pi.bak -e 를 추가하면 자동적으로 "파일이름.bak"가 생성된다.


파일속 mms: 찾기
find . -type f -name "dunetCont.html" -exec grep "mms://vod.xxxx.co.kr" {} /dev/null \;


파일 속 IP 변경하기

find . -type f -name "dunetCont.html" -exec perl -pi -e 's/211.xx.xx.39/vod.xxxx.co.kr/g' {} \;
find . -type f -name "i_pg*.html" -exec perl -pi -e 's/211.xx.xx.39/vod.xxxx.co.kr/g' {} \;
find . -type f -name "[0,1][0-9].html" -exec perl -pi -e 's/211.xx.xx.39/vod.xxxx.co.kr/g' {} \;

압축
for i in $(find . -name 'Cont.html'); do tar -rvf Cont.tgz $i; done


K-IFRS(04.html , 09.html , 14.html , 19.html , 24.html)
for i in $(find *_10103* -name [0,1,2][4,9].html); do tar -rvf IFRS.tar $i; done
find . -type f -name [0,1,2][4,9].html -exec perl -pi -e 's/211.xx.xx.39/vod.xxxxt.co.kr/g' {} \;


수정하기 스크립트
find . -type f -name "dunetCont.html" -exec perl -pi -e 's/211.xx.xx.39/vod.xxxx.co.kr/g' {} \;
find . -type f -name [0,1,2][4,9].html -exec perl -pi -e 's/211.xx.xx.39/vod.xxxx.co.kr/g' {} \;

Trackback
Reply
리눅스에선 파일명을 한번에 쉽게 변경할수 있는 방법이 있다.

바로 rename 이라는 명령어를 사용하는 방법


a_01.html, a_02.html, a_03.html 파일명을
01.html       , 02.html,    03.html 같은 패턴으로 변경할때 유용하다.

# find . -name "*.html" -exec rename a_ / {} \;
Trackback
Reply

Jeus 설치

설치 이전에 자바를 설치 해 준다.
/etc/profile에 자바 PATH를 정확하게 잡아 줄 것.

#JAVA
JAVA_HOME=/usr/java/jdk1.6.0_03
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
export PATH

이후 JEUS 설치 파일을 실행 시켜준다.

# ./jeus50-unix-generic.bin

라이센스 화면에서 y를 입력하고 이 후

Choose Platform
---------------

Choose current system ( platform-architecture )
1)HP-UX PA-RISC
2)HP-UX ITANIUM
3)Solaris Ultra-Sparc
4)Solaris x86
5)AIX 5.x PowerPC
6)Linux i386
7)Linux ITANIUM
8)Linux x86_64(AMD)
Quit) Quit Installer

Choose Current System (DEFAULT: 6):

에서 설치할 플랫폼을 선택한 후, 사용 디렉토리만 설정 해 주면 설치는 끝.
JEUS의 PATH를 잡아 준다.

/etc/profile
#JEUS
export JEUS_HOME=/data/jeus5
export JEUS_HOME
PATH=$PATH:$JEUS_HOME:$JEUS_HOME/lib/system:$JEUS_HOME/webserver/bin
export PATH


* PHP 연동
PHP configure
기본적으로 PHP는 어디에 설치되던 상관은 없다.  php.ini파일은 php설치 한 곳에 카피한다.
# ./configure --prefix=/data/jeus5/webserver/php

# vi /data/jeus5/webserver/config/ws_engine.m
*SVRGROUP
htmlg       NODENAME = "uzoogom", SVRTYPE = HTML
cgig        NODENAME = "uzoogom", SVRTYPE = CGI
ssig        NODENAME = "uzoogom", SVRTYPE = SSI
jsvg        NODENAME = "uzoogom", SVRTYPE = JSV
phpg        NODENAME = "uzoogom", ScriptLoc="/php/bin/php" ,SVRTYPE = PHP

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 1, MaxProc = 5
php         SVGNAME  = phpg,  MinProc = 3, MaxProc = 10

*EXT
htm         MimeType = "text/html",  SvrType = HTML
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
php         MimeType = "application/x-httpd-php", SvrType = PHP
php3        MimeType = "application/x-httpd-php3", SvrType = PHP

위와 같이 수정 후, 저장

환경파일을 읽어들이기
# wscfl -i ws_engine.m
# wsboot (WebtoB 실행)
# wsdown -i (WebtoB 정지)

Trackback
Reply
간혹 로그를 보다보면 쓸모없는 이미지로그 때문에(특히 thumnail) 하루에도 몇 백메가까지 차오르는 것을 봤다.

그런 것을 방지하기 위한 쓸모 없는 로그 안남기는 법!

httpd.conf에 아래와 같이 설정
<IfModule mod_setenvif.c>
        SetEnvIfNoCase Request_URI "\.(gif|jpg|js|css|png|swf|txt|ico)$" do_not_log
        SetEnvIf Remote_Addr "::1" do_not_log
</IfModule>

각 도메인별 로그 부분에서 아래와 같이 설정해주면 된다.

CustomLog uzoogom.com-access_log combined env=!do_not_log


Trackback
Reply
참 조잡하다 = ㅂ=)a
그래도 유용하게 잘 돌아간다~

#!/bin/bash
# scripts by uzoogom

export LANG_ALL=ko_KR.eucKR
day=$(date +%Y-%m-%d)
backuplist=$(cd /backup/ && ls -d *)
list="$day"backup_check.txt

echo "$day backup status" > $list
echo " " >> $list
echo "Success list--------------------------------" >> $list

echo " " > bad.txt
echo "Fail list--------------------------------" >> bad.txt

for checkname in $backuplist
do
        check=$(find /backup/$checkname -type f -name "backupTime($day).txt" | wc -l )

        if [ $check == 1 ]
        then
                echo "$checkname backup is successfully Done!" >> $list
        else
                echo "$checkname backup is Fail. plz check your system." >> bad.txt
        fi

done
cat bad.txt >> $list
success=$(grep "successfully" $list | wc -l)
nonsuccess=$(grep "Fail" $list | wc -l)
sed "1a Success  :"$success"\nFailure:"$nonsuccess"" $list > last.txt
cat last.txt > $list
cat $list | mail -s ""$day" real server backup status" uzoogom@dunet.co.kr serverbin@dunet.co.kr
mv $list /root/SH/checklog
rm -f /root/backup/*.txt
Trackback
Reply
안타깝게도 CPU 타잎 확인 하는 부분은 제대로 계산이 안된다.
이유는 쿼드코어, 코어2듀오, 듀얼코어, 하이퍼스레딩 등 때문에...
사실 좀 더 세밀하게 짜면 정상적으로 할 수있는데 귀찮아서..........

#!/bin/bash
LANG=C
unset GREP_OPTIONS GREP_COLOR

echo "
################################ SYSTEM CHECK uzoogom edition. ################################

1) Network Information-------------------------------------------------------------------------
1-1) HOSTNAME: `hostname`

1-2) Ethernet Information
`ifconfig | grep -v "127.0.0.1" | grep "addr"`

1-3) Route(gateway) Information
`route | egrep '(default|Gateway)'`


2) SYSTEM Information-------------------------------------------------------------------------
2-1)CPU Information
CPU : `cat /proc/cpuinfo | grep "processor" | wc -l` EA
`cat /proc/cpuinfo | grep "model name" | uniq`
`cat /proc/cpuinfo | grep "MHz" | uniq`

2-2) Memory Information
`free -m`

2-3) Partition Information
`fdisk -l | grep dev`

2-4) Disk Information
`df -h`


3) PROCESS Information-------------------------------------------------------------------------
`pstree`


4) Open Port Scanning-------------------------------------------------------------------------
`netstat -antp | egrep '(LISTEN|Address)'`


5) Auto start processor-------------------------------------------------------------------------
5-1) Crontab
`crontab -l`

5-2) chkconfig list
`chkconfig --list | grep "3:on"`

5-3) rc.local
`egrep -v "(#|touch)" /etc/rc.local`
"
Trackback
Reply
요즘에 회사에서 써먹을려고 다시 짠 백업 스크립트
행여나 이 블로그에 흘러들어와서 그걸 그대로 쓴다면 무궁무진한 오류가 뜨니 주의하시요!

#!/bin/bash
#edit by uzoogom 090723
#
# backup configure
host=$(hostname)
day=$(date +%Y-%m-%d)
check=$(mount | grep -c "backup")

# Backup Storage Mounting Check
if [ $check == 1 ]
        then
                echo "Backup Storage Mounting Check .... OK!!"
        else
                echo "Backup Storage Mounting Check .... FAIL!!"
                echo "Exit backup scripts"
                exit 0
fi

# Make a backup Directory
mkdir -p /backup/${host}/{webdata,data,config} 2>/dev/null
mkdir /root/backup/reference 2>/dev/null

# 백업 할 디렉토리를 적을 파일 생성

touch /root/backup/reference/{webdir,datadir,configfile}

# Lists to Backup 백업 할 디렉토리를 적을 파일 생성
WEBDATA=$(grep -v "^#" /root/backup/reference/webdir)
DATA=$(grep -v "^#" /root/backup/reference/datadir)
CONFIG=$(grep -v "^#" /root/backup/reference/configfile)

# TMP Directory
LIST="/tmp/backuplist_$$.txt"

# Target Backup Locations
WEBDATABACKUP="/backup/${host}/webdata"
DATABACKUP="/backup/${host}/data"
CONFIGBACKUP="/backup/${host}/config"
DATABASEBACKUP="/backup/${host}/database"

#
echo "
========================================================================
Starting backup at `date +%Y-%m-%d\ %H:%M:%S`
========================================================================
"

# date to nubmer 증분 백업을 위해서 날자 지정
# 1-Mon, 2-Tue, 3-Wed, 4-Thu, 5-Fri, 6-Sat, 7-Sun
set $(date '+%u')

# backup Time stamp
rm -f /backup/${host}/backupTime*.txt
echo Starting at `date +%Y-%m-%d\ %H:%M:%S` > "/backup/${host}/backupTime($day).txt"

if test "$1" = "6" ;
then
        # weekly a full backup of all data and config. settings:
        #
        echo "Step1. Performing Full Data Backup--------------------------------------"
        tar zcf "$DATABACKUP/data_full_$day.tgz" $DATA 2>/dev/null

        echo "Removing incremental data backups..."
        rm -f $DATABACKUP/data_diff*

        echo "Removing four week old full Data backup..."
        find $DATABACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
        rm -f `cat $LIST`
        echo "------------------------------------------------------------------Done +"
        echo ""

        #
        echo "Step2. Performing Full WebData Backup-----------------------------------"
        tar zcf "$WEBDATABACKUP/webdata_full_$day.tgz" --exclude-from=./reference/exclude  $WEBDATA 2>/dev/null

        echo "Removing incremental data backups..."
        rm -f $WEBDATABACKUP/webdata_diff*

        echo "Removing four week old full WebData backup..."
        find $WEBDATABACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
        rm -f `cat $LIST`
        echo "------------------------------------------------------------------Done +"
        echo ""

        #
        echo ""
        echo "Step3. Performing Full Config Backup------------------------------------"
        tar zcf "$CONFIGBACKUP/config_full_$day.tgz" $CONFIG 2>/dev/null

        echo "Removing incremental config backups..."
        rm -f $CONFIGBACKUP/config_diff*

        echo "Removing four week old full config backup..."
        find $CONFIGBACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
        rm -f `cat $LIST`
        echo "------------------------------------------------------------------Done +"
else
        # incremental data backup:
        #
        echo "Step1. Performing Incremental Data Backup-------------------------------"
        find $DATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
        tar zcfT "$DATABACKUP/data_diff_$day.tgz" "$LIST" 2>/dev/null
        rm -f "$LIST"
        echo "------------------------------------------------------------------Done +"
        echo ""

        # incremental webdata backup:
        #
    echo "Step2. Performing Incremental WebData Backup----------------------------"
        find $WEBDATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
        tar zcfT "$WEBDATABACKUP/webdata_diff_$day.tgz" --exclude-from=./reference/exclude "$LIST" 2>/dev/null
        rm -f "$LIST"
        echo "------------------------------------------------------------------Done +"
        echo ""

        # incremental config backup:
        #
        echo "Step3. Performing Incremental Config Backup-----------------------------"
        find $CONFIG -depth -type f  \( -ctime -1 -o -mtime -1 \) -print > $LIST
        tar zcfT "$CONFIGBACKUP/config_diff_$day.tgz" "$LIST" 2>/dev/null
        rm -f "$LIST"
        echo "------------------------------------------------------------------Done +"
fi

# MySql 용 백업 설정이나, MySql을 마땅히 백업할 서버가 없어서 주석처리
# Database Backup
#
#mkdir -p /backup/${host}/database 2>/dev/null
#DB_DIR="/usr/local/mysql/data"
#
# Create SQL dump of databases and compress:
#echo "
#Archiving Databases...
#"
# Find current databases
# DB=( $(find ${DB_DIR}/ -maxdepth 1 -type d ! -name ".*" | sort | sed -e 's/\/usr\/local\/mysql\/data\///g') )
# Set for loop max counter based on number of databases
# j=${#DB[@]}
# for (( i=0; i&lt;j; i++ )); do
#         mysqldump -u user --password=passwd --opt ${DB[i]} | gzip >"$DATABASEBACKUP/${DB[i]}_$day.sql.gz"
# done
#
#echo "
#Removing two week old database backups...
#"
#find $DATABASEBACKUP -depth -type f \( -ctime +13 -o -mtime +13 \) -print > $LIST
#rm -f `cat $LIST`
#rm -f "$LIST"
#

# backup Time stamp
echo Finished at `date +%Y-%m-%d\ %H:%M:%S` >> "/backup/${host}/backupTime($day).txt"
echo "
========================================================================
Finished: `date +%Y-%m-%d\ %H:%M:%S`
========================================================================
"
exit 0
Trackback
Reply
모든 스크립트의 기본은 정말이지 단순하다.
얼마나 그 명령어에 대해 이해를 하고 있느냐.
단지 그것 뿐이다.

여기에서는 가장 기본적으로 그 해당 명령어를 사용하는 방법은 알고 있으리라 생각하고 적는다.
괜시리 명령어 사용법도 모르면서 스크립트에 덤벼들지 마라. 잘못하면 시원하게 파일을 날릴 수 있으니까!

어찌보면 가장 단순하지만, 가공할만한 잠재력을 가진 명령어 중 하나인 find!
find만 잘 응용해도 열 스크립트 안 부럽다!


1. 특정 파일 속 특정 단어 찾기
ex) html 파일에서 mms:// 찾기
find . -type f -name "*.html" -exec grep "mms://" {} /dev/null \;
(뒤에 /dev/null을 붙이는 이유는 해당 파일명을 보기 위함이다.)

2. 특정 파일 속 특정 단어 바꾸기
ex) html 파일에서 mms://를 http://로 바꾸기
find . -type f -name "*.html" -exec perl -pi -e 's/mms/http/g' {} \;
(유의 할 점은 특수기호[가령 / 같은..]는 인식을 못하기 때문에 문자로 쓰기 위해선 꼭 \를 붙여줘야한다)

3. 특정 파일만 압축하기
ex) html 파일만 찾아서 압축하기
for i in $(find . -name '*.html'); do tar -zrvf html.tgz $i; done

4. 5일 지난 파일 삭제하기
rm -f 'find . -mtime +5'

뭐 기본적으로 이정도만 응용해도 꽤나 훌륭한 결과를 얻을 수 있다.



Trackback
Reply

이제 guest OS 를 설치 해 보자. (Guest OS를 가상화가 될 OS 들을 뜻한다.)

 

 

먼저 새로운 가상화 머신을 위해 H/W 셋팅을 한다.

New Virtual Machine 버튼을 클릭하면 셋팅을 할수있는 창이 뜬다.

 

 

1. 가정 먼저 어떤 타잎으로 설정할건지를 묻는데. 기본적인 Typical을 선택하여 넘어가자.

 

 

2. 여기에서는 가상화서버의 이름을 정한다. 알아보기 쉬운 이름으로 정하는게 관리하기 좋다.

 

 

3. 어떤 데이터 스토리지에 설치를 하느냐.. 파티셔닝을 하지 않았다면 하나만 나오니 그냥 선택

 

 

4. 이제부터가 중요하다. Guest OS를 어떤 것을 설치하느냐에 따라 그 버전에 맞는 항목을 선택해 주어야 한다.

 

 

5. Memory 활당하는 부분

 

 

6. 네트워크 카드 활당하는 부분

 

 

7. 하드 용량 활당하는 부분

 

 

8. 마지막으로 자신이 입력한 정보를 확인 한 후에. OK를 눌르면 모든 환경 설정은 끝이 나게 된다.

 

 

9. Guest OS들이 올라와 있는 모습을 확인 할 수 있다.


Trackback
Reply

정말이지 허망할 정도로 쉬운 vmware ESXi 설치하기.

자 슬슬 자신감이 생기지 않는가? XEN과 비교해보면 정말 놀라울 정도의 편리한 인터페이스다.

 

vmwware ESXi를 설치 완료 후, IP셋팅을 하고 브라우저를 통해 접속하면 아래와 같은 화면이 보인다.

 

Download VMware Infrastructure Client를 클릭하여 설치를 하면, guest OS를 올릴 준비는 완료가 된 것이다.

 

설치 완료 후, 실행 한 상태에서 vmware ESXi 설치 시 입력한 ID/PW를 입력하여 접속 한다.

 

 

접속이 완료 된 화면, 어디서 많이 본 것 같지 않은가? 그렇다. vmware server랑 별반 다를 것이 없는 눈에 익은 인터페이스다!


Trackback
Reply

vmware ESXi의 구성요소는 다음과 같다.

 

VMware ESXi

VMware ESX Server 3i U3 Installable

VMware ESXi 3.5 U3 Installable with HP Management Components

설명할 필요도 없는 vmware esxi 핵심 프로그램이다. H/W 바로 위에 올라가는 개념

 

VMware Infrastructure Client

VMware를 하드웨어에 설치하고 한동안 벙~ 저 있었다.

VMware Infrastructure Client 이게 없다면 ESXi를 설치했다고 한들 guest OS를 올릴 수 없다.

 

물론 무료이긴하지만, 정식 라이센스를 받아야한다.

즉, 무료로 사용할테네 라이센스를 주세요. 라는 묘한 상황인 것이다.

역시 vmware 홈페이지에서 회원 가입하고, 다운로드 후 라이센스 발급을 받아 추후 라이센스를

입력해주면 된다.

 

메뉴얼은 아래를 클릭하여 다운 받아보도록하자.

영어라지만, 별 거없다. 그냥 CD넣고 yes 정도만 눌러줘도 3~4분만에 설치는 완료된다.

 

참- 좋은 세상이다.

 

설치메뉴얼)

http://www.vmware.com/pdf/vi3_35/esx_3i_i/r35/vi3_35_25_3i_i_get_start.pdf

Trackback
Reply

그래도 하반기 프로젝트를 가상화로 정해버렸기 때문에

해야한다. 경제도 어려운 이 판국에.... 일 못하면 튕겨나간다. 찾자 찾자 해서 구글링 한 결과

 

오오. VMware ESXi 라는 무료 가상화 솔루션이 있다!

VMware ESX는 익히 알고있었지만, 뒤에 "i"가 하나 더붙은 이건 무엇인가 하니.

MircoSoft Hyper-V에 자극을 받은 vmware사에서 무료로 내 놓은 vmware ESXi 것이다. 캬하~

 

시간이 좀 지났지만, 왜 이걸 몰랐는지!

 

다운 로드 및 자세한 정보는 Vmware의 문을 두들겨보자.

 

http://www.vmware.com/products/esxi/

 

물론 잊지 말아야 할 것은 자신의 CPU가 가상화를 지원하느냐 하는 것이다!

Trackback
Reply
My Advanced Linux/Virtualization  2009. 7. 24. 16:16

리눅서(linuxer)라면 누구나 한 번 쯤 들어봤을 가상화 기법.

 

XEN이란 무엇인가!

 

Xen은 XenSource의 OS 레벨 Paravirtualization용 무료 오픈 소스 솔루션이다. Paravirtualization에서는 하이퍼바이저와 OS가 가상화에서 협업하고, OS는 변해야 하지만, 성능은 우수하다.

Xen은 협업(게스트 OS를 수정해야 한다) 이 필요하고, 패치 된 OS들만이 Xen을 통해서 가상화 될 수 있다. 전체 가상화 보다 더 나은 성능을 보이기 때문에, 그 자체가 오픈 소스인 리눅스 관점에서 볼 때, 합리적인 절충안으로 볼 수 있다. 하지만, 다른 비 오픈 소스 OS의 지원 같은 전체적인 지원 관점에서 볼 때는 이것이 단점이 될 수 있다.

Xen에서 Windows를 게스트로서 실행하는 것이 가능하지만, Intel Vanderpool 또는 AMD Pacifica를 실행하는 시스템에서만 가능하다. Xen을 지원하는 다른 OS로는 Minix, Plan 9, NetBSD, FreeBSD, OpenSolaris 등이 있다.

 

 

나 역시 가상화를 하려고 했을때 가장 먼저 생각난 XEN 하지만 앞서 설명한  패치된 OS를 도무지 구할 수가 없어서 설정 할 방법이 없었다.

 

그리고 구글링을 해보다보니 XEN 가상화에서 Full virtualization을 지원하는 것 처럼 적힌 것도 있는데, 아마 옛버전에서는 됐을지연정 RHEL5.2에서는 돼지 않음을 확인했다.

 

(2008 오픈소스세미나에가서 레뎃 관계자한테 직접 질문했더니 전가상화는 지원하지 않는다고 말하더라.. 허탈~)


Trackback
Reply

일단, 가상화를 시작하자고 말을 했으니 가상화가 무엇인지부터 알고 시작하자.

여러가지 유형이 있지만, 현재 가장 크게 사용되는 3가지 가상화에 대해서 설명해보자

 

1. Full virtualization (전가상화, 전체가상화)

전체 가상화(네이티브 가상화) 또한 가상화 방식이다. 이 모델은 게스트(guest) OS들과 네이티브 하드웨어 사이를 중재(mediate)하는 가상 머신을 사용한다. (그림 2) "중재(Mediate)"는 핵심적인 단어이다. VMM이 게스트 OS와 베어 하드웨어 사이를 중재하기 때문이다. 보호를 받고 있는 특정 명령어들은 하이퍼바이저 내에서 트랩핑(trap) 및 핸들되어야 한다. 기반 하드웨어는 OS가 소유한 것이 아닌, 하이퍼바이저를 통해서 공유되기 때문이다.


   그림 2. 전체 가상화는 하이퍼바이저를 사용하여 기반 하드웨어를 공유한다.
 
전체 가상화는 하드웨어 에뮬레이션 보다는 빠르지만, 하이퍼바이저 중재 때문에 실제 하드웨어 보다는 성능이 낮다. 전체 가상화의 가장 큰 장점은 OS를 수정하지 않고 실행될 수 있다는 점이다. 유일한 제한 사항은 OS가 기반 하드웨어(예를 들어, PowerPC)를 지원해야 한다는 것이다.

 

 

 

2. Paravirtualization (부분 가상화)

Paravirtualization은 전체 가상화와 약간 유사한 대중적인 기술이다. 이 방식은 기반 하드웨어로의 공유 액세스에 하이퍼바이저를 사용하지만, 가상화 인식 코드를 OS로 통합한다. (그림 3) 이 방식은 재컴파일이나 트래핑(trapping)을 할 필요가 없다. OS 그 자체로 가상화 프로세스에 협력하기 때문이다.


   그림 3. Paravirtualization은 프로세스를 게스트 OS와 공유한다.
 
앞서 언급했던 것처럼, Paravirtualization은 게스트 OS들이 하이퍼바이저에 맞게 수정되어야 한다. 이것이 단점이다. 하지만, Paravirtualization은 가상화 되지 않은 시스템 성능에 가까운 성능을 보인다. 전체 가상화와 마찬가지로, 여러 다른 OS들이 동시에 지원된다.

 

 

 

3. OS level virtualization

마지막 기술인 OS 레벨 가상화는 지금까지 다루어왔던 것과는 다른 기술을 사용한다. 이 기술은 그림 4처럼 OS에서 서버들을 가상화 한다. 이 방식은 하나의 OS를 지원하고, 서버들을 분리시킨다.


   그림 4. OS 레벨의 가상화는 서버들을 분리시킨다.

OS 레벨 가상화는 OS 커널을 수정해야 하지만, 장점은 성능이 우수하다는 점이다.

 

 

각각의 장 단점을 잘 파악해서 자신에게 맞는 가상화 방법을 선택하면 된다.


Trackback
Reply

2008의 전반적인 트랜드라고 하면 당연 가상화 시스템이라고 말하겠다.

많은 회사에서 서서히 비용절감 및 고효율성을 원하기 시작하면서 나타난

아니 이미 진작에 나타났었지만 비효율적이라고 생각되어 조용히 사라났다가 당찬 모습으로

다시 나타난 가상화(Virtualization).

 

나도 이른 바 최신버전 증후군 환자라 해보고 싶었지만,

우리 회사에서 돌릴만한 여유있는 서버가 없었던 터라 하지 못했는데

이번 중기거점에 남는 서버가 한 대 있는 것을 발견, 결국 하반기 프로젝트는

가상화로 정하게 되었다.

 

그럼.

 

막연하게 가상화란 무엇인걸까?


Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31