Category Archives: Config&Setting

Linux PHP Freetds 설치

MSSQL 사용을 위한 freetds 설치 방법

# yum install freetds php-mssql

MSSQL 접속 확인

# tsql -H [DB서버 주소] -p [DB서버 포트] -U [DB 유저 아이디] -P [DB 유저 패스워드]

끝…

zookeeper & redis setting

0. 시스템
– Centos 6.5 x86_64
– Server 5대

1. Cloudera-chd Repo 추가
$ curl -sSfL http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm –output /tmp/cdh.rpm

$ curl -sSfL http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera –output /tmp/cdh.key

$ sudo rpm –import /tmp/cdh.key

$ sudo yum localinstall -y -q /tmp/cdh.rpm

2. epel Repo 추가 [기존 글 참조]

3. Remi Repo 추가
$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

4. zookeeper & redis 설치
$ yum –enablerepo=remi,remi-test install redis
$ yum install zookeeper

Centos SVN 설치

1. svn 설치
# yum install subversion

2. svn 데이터 디렉토리 생성
# mkdir /home/svn

3. svn repository 생성
# cd /home/svn
# svnadmin create [reponame]

4. 생성된 repository의 설정 수정
# vi /home/svn/[reponame]/conf/svnserve.conf
[수정전]
# anon-access = read
# auth-access = write
#password-db = passwd
# realm = My First Repository
[수정후]
anon-access = none
auth-access = write
password-db = passwd
realm = [원하는 명칭]

5. passwd 수정
# vi /home/svn/[reponame]/conf/passwd
아이디 = 비밀번호 방식으로 추가

6. 기타 설정
방화벽 및 기타설정은 서버에 맞게 수정한다.
svn에서 사용하는 기본 포트는 3690 이다.

CentOS 6.x Python 2.7 설치

1. Python 설치
# cd /usr/local/src
# wget -N http://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
# tar xzf Python-2.7.8.tgz
# cd Python-2.7.8
# ./configure –enable-shared –with-threads
# make
# make altinstall

2. 기존 Python 바이너리 2.7로 교체
# mv /usr/bin/python /usr/bin/python_old
# cp /usr/local/bin/python2.7 /usr/bin/python

3. yum 오류 교체(yum은 python 기반으로 제작됨)
# cp /usr/bin/yum /usr/bin/yum_old
# sed -i ’s//usr/bin/python//usr/bin/python2.6/g’ /usr/bin/yum
# diff /usr/bin/yum_old /usr/bin/yum

※ PIP 설치
# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py

※ python 원상 복구
# yum reinstall python

Centos MariaDB + Apache + PHP

1. /etc/yum.repos.d/MariaDB.repo 추가
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

2. MariaDB 설치
yum install MariaDB-server MariaDB-client -y

3. Apache + PHP 설치
yum install httpd php-devel php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-xcache php-mbstring php-mcrypt -y ;

lighttpd+php+mysql+xcache 설치

os : centos 6.2 x86_64

http://pkgs.repoforge.org/rpmforge-release/ 자신의 os 맞는 rpm 다운로드 후 설치

1. lighttpd 설치
# yum install lighttpd -y

2. php 설치
# yum install lighttpd-fastcgi php-cli

3. php에서 MySQL을 지원하기 위한 패키지 설치
# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-xcache -y

4. php.ini에 아래 내용 추가
# echo ’cgi.fix_pathinfo = 1’ >> /etc/php.ini

5. lighttpd 설정(자신의 서버에 맞게 알아서..)
# vi /etc/lighttpd/lighttpd.conf

Error : couldn’t set ’max filedescriptors’ Permission denied 발생시
/etc/sysconfig/selinux 파일의
SELINUX=enforcing 을 SELINUX=disabled 로 교체후 리붓

호스트간의 데이터 동기화를 위한 rsync 설정

*********************************************************************
호스트간의 데이터 동기화를 위한 rsync 설정
*********************************************************************
제목 : 호스트간의 데이터 동기화를 이한 rsync 설정
작성자 : 문태준(taejun@taejun.pe.kr http://www.taejun.pe.kr)
작성일 : 2000. 4. 12
*********************************************************************

참고자료 :
http://www.taejun.pe.kr/board2/read.php3?table=linuxinfo&no=28&page=1
rsync 이용 동기화하기 (박명순님 pms89@hitel.net 글)

레드햇 리눅스 6 서버 – 파워북 출판사, 번역판중 rdist 관련 자료

man page – rsync(1), rsyncd.conf(5)

0. 들어가며
서버 클러스터링으로 여러대의 서버를 운영하는 경우 각 호스트간의 자료
를 공유해야합니다. 공유기법에는 NFS도 있지만 NFS의 경우는 네트웍 트래
픽을 무척이나 높이므로 그 대신 rdist나 rsync를 이용할 수 있습니다. 이
글에서는 rsync를 이용하여 각 호스트간의 자료를 동기화하는 방법을 설명
합니다.

1. rsync란 무엇인가?
rsync는 rcp와 비슷한 동작을 하는 프로그램으로 rcp보다 더 다양한 옵션
이 있고, 더 효율적으로 데이터를 전송합니다. (출발지와 목적지 사이에
다른 부분만을 전송) 파일크기의 변화나 시간의 변화등을 이용 동기화를
합니다.
주요 특징은 다음과 같습니다.

ㅇ 링크, device, 소유자, 그릅, 허가권 복사 지원
ㅇ GNU tar와 비슷한 exclude, exclude-from 옵션 지원
ㅇ rsh 또는 ssh 등 사용가능
ㅇ root 권한이 필요없음
ㅇ anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)

2. rsync 설정
ㅇ 일반적인 배포판의 경우 프로그램이 들어있음. 다음과 같이 확인후 없
으면 프로그램 설치
# rpm -qa | grep rsync
rsync-2.3.1-2

ㅇ rsync 2.3.1 이전 버전의 경우 ”보안버그”가 있으므로 이전 버전이 설
치되어있다면 반드시 ”2.3.1 이상 버전으로 업데이트”해야함

ㅇ 동기화에 사용하는 프로토콜 : rsh, ssh를 사용할 수 있음. 이를 사용
하지 않더라도 원격 rsync 서버에 TCP 포트 873을 이용 접속할 수 있음. 8
73 포트를 이용할 경우 inetd.conf 에 추가로 설정을 해야합니다.

rsync stream tcp nowait root /usr/bin/rsync rsyncd –daem
on

–daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필
요로 합니다.

또한 /etc/services 에 다음 내용이 있는지 확인하고 없으면 추가합니다.

rsync 873/tcp # rsync

추가하고 나서는 inetd 대몬을 다시 띄워야겠지요?
# kill -HUP inetd_pid

만약 ssh나 rsh를 사용하는 경우에는 inetd.conf를 수정할 필요가 없습니
다.

3. 설정파일 : /etc/rsyncd.conf
예제를 보겠습니다. 다음 예제의 호스트를 www1이라고 하겠습니다.

# cat /etc/rsyncd.conf

[web]
path = /home/www/htdocs
comment = web
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www2.taejun.pe.kr
max connections = 3
timeout 600

[web] 서비스명
path 서비스할 디렉토리
comment 설명
uid 파일전송하는 사용자의 id. 기본값은 nobody
gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody
use chroot 위의 path를 root 디렉토리로 사용. 보안상 필요함.
read only 읽기전용
hosts allow 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하
려면 반드시 설정함
max connections 동시접속자수
timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경
우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음.

* put(클라이언트에서 서버로 올리는 경우)을 사용하기위해서는 read only
= no 로 설정을 해야됩니다.

이 외에도 여러 가지 옵션이 있지만 실제로은 위의 옵션정도가 자주 사용
됩니다. 현재 rsync 자체적으로 암호화는 지원하지 않으며 사용자 인증만
지원합니다. 추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면
ssh를 사용하면 됩니다.

4. rsync 사용하기
(접근 클라이언트를 www2.taejun.pe.kr이라고 가정함)

rsync -avz –delete www1.taejun.pe.kr::web /home/taejun/~public_html

-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 상세하게 보여움
-z 전송시 압축을 함.

–delete www1.taejun.pe.kr에서 web에 해당하는 내용(/home/www/htdocs)
을 ww2.taejun.pe.kr 의 /home/taejun/~public_html 로 가져오면서 www1
(서버)에는 없는 내용은 www2에서 삭제함. 만약 www2 차원에서 생성한 파
일을 보관하려면 옵션 없앰.

rsync -avz foo:src/bar /data/tmp
다음 내용은 foo라는 호스트에서 src/bar 안의 내용을 지역호스트의 /data
/tmp 디렉토리로 옮기는 것입니다.

여기서 알아두어야 할 것이 있습니다.
만약 위에서 src/bar/ 라고 하면 어떻게 달라질까요? bar 는 그 디렉토리
자체까지 포함해서 가져옵니다. 그렇지만 bar/ 라고 뒤에 디렉토리 표시를
하면 그 디렉토리안에 있는 내용만 가지고 옵니다. 상당히 결과가 달라질
수 있겠지요.

또한 : 과 ::의 차이는 무엇일까요? : 은 rsh나 ssh를 사용하는 것이며 ::
은 rsync 자체에서 지원하는 기능을 이용 자료를 가져오는 것으로 873 TCP
포트를 사용합니다. 상당히 헷갈리지요? : 에서 기본은 rsh를 이용하지만
-e ssh 옵션을 이용하여 ssh를 사용할 수 있습니다. ssh를 사용하려면 비
밀번호를 입력해야하는데 이것도 파일형태로 만들어서 옵션에서 지정해주
면 됩니다. 이에 대해서는 따로 설명하지는 않으며 man page를 참고하세
요.

-avz 등의 옵션이 있는데 이중 중요한 옵션만 설명을 하겠습니다.

-v verbose (자세하게 보여줌)
-a archive mode

-u update only(새로운 파일을 덮어쓰지 않음)
–delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움
-z compress (전송시 압축을 함)
–daemon 대몬 모드로 운영함 (이건 inetd.conf에 지정할 때 필요함)

-a 는 -rlptg 와 동일합니다.
-r recursive (하위 디렉토리까지 포함)
-l 심볼릭 링크 재생성
-p 퍼미션 업데이트
-t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
-g 그룹이름 변경

일반적으로 rsync는 길이와 time-stamp를 이용 파일을 비교합니다.

이제 쉘 스크립트를 만들고 cron에 등록을 하여 주기적으로 데이터를 동기
화하면 됩니다.

5. 마치며
기본적으로 암호화를 지원하지 않는 것이 아쉽고 약간은 불편합니다. ssh
를 쓰는 것도 한가지 대안이지만 비밀번호를 넣어야하고 일일이 넣기 귀찮
으면 파일형태로 지정할 수 있는데 이런 방법도 보안문제가 생길 여지가
있겠지요.

위에서 말을 한 대로 예전 패키지에는 보안 버그가 있으니 반드시 최근 패
키지로 업데이트를 하는 것! 잊지 마세요.

펌] http://wiki.kldp.org/KoreanDoc/Rsync-KLDP

Linux Software Raid 5

– 자 이제 raid0, raid1 을 구축해 봤으니 raid 5를 구축해보겠다.

– raid5 구축을 위해서는 최소한 3개의 디스크가 필요하다. 패러티라는것을 각각의 디스크에 추가해서 하나의 디스크가 깨졌을대도 문제없이 2개의 디스크가 구동하도록 하기 위함이다. 패러티는 찾아보기 바란다. 쉽게 말해 오라클의 undo tablespace 같다고 하면 될까나? commit 된 데이터에 대한 rollback 기능?? 머 좀 틀린 개념이지만 여하튼 일반적인 raid5 구성은 적어도 4개의 디스크를 이용하여 3개는 raid5 로 구성하고 하나는 hot space 로 두어서 3개의 디스크중 하나가 깨지면 hot space디스크가 패러티를 이용해서 깨진 하나의 디스크를 대체하는 식으로 구성된다. 자세한건 구글에 가서 raid5 치면 엄청 자료가 나올꺼다..ㅎㅎ

 

– 앞에서 sdb1,sdc1 은 raid0을 구성했고 sad1, sde1 은 raid1로 구성했다. sdf1, sdg1, hda1 을 raid5로 구성하겠다. 신기한게 vmware 로 디스크를 추가했더니 7개까지(g까지)는 scsi 로 추가되는데 8개째는 IDE로 추가되더라..ㅎㅎ 그래서 마지막 하나는 hda 가됐다. 잘될지 모르겠다..ㅡㅡ^

 

1) sdf , sdg, hda 에 각각 파일시스템을 fd(linux raid auto)로 만든다..(생략한다.. 모르는 사람은 앞에 raid0, raid1 구축할때 자료 보시길)

 

2) /dev/md5 를 만든다.

[root@localhost ~]# mknod /dev/md5 b 9 2
[root@localhost ~]# ls -al /dev/md?
brw-r—– 1 root disk 9, 0 3??26 00:24 /dev/md0 <– raid0
brw-r—– 1 root disk 9, 1 3??26 01:20 /dev/md1 <– raid1
brw-r–r– 1 root root 9, 2 3??26 01:41 /dev/md5 <– raid5
[root@localhost ~]#

** 주의 ) 꼭 md5롤 만들지 않고 md3로 만들어도 무방하다.. 단지 관리자가 알아보기 편하도록 이렇게 만드는 것일뿐..

 

3) mdadm 명령으로 raid 5 구성한다.

[root@localhost ~]# mdadm –create /dev/md5 –level=5 –raid-devices=3 /dev/sdf1 /dev/sdg1 /dev/hda1 mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm –detail –scan
ARRAY /dev/md2 level=raid5 num-devices=3 UUID=01f7d1aa:589215f3:16996d05:c4a2d6f7
devices=/dev/sdf1,/dev/sdg1,/dev/hda1 <— raid 5
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=6780793c:b171ede2:d0a38176:a24fbe36
devices=/dev/sdd1,/dev/sde1 <— raid0
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=80ce56ed:8a0ca06d:d96d03b6:77ae5f91
devices=/dev/sdb1,/dev/sdc1 <– raid1
[root@localhost ~]#

 

4) /dev/md2 에 파일시스템 만들고 /raid5 로 마운트한다. 어라 분명 /dev/md5 로 만들었는데.. 보이는건 md2 다.. 음.. 이상하내.. [root@localhost ~]# mkfs.ext3 /dev/md2
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
104448 inodes, 417536 blocks
20876 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
51 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# ls -al /dev/md?
brw-r—– 1 root disk 9, 0 3??26 00:24 /dev/md0
brw-r—– 1 root disk 9, 1 3??26 01:20 /dev/md1
brw-r—– 1 root disk 9, 2 3??26 01:44 /dev/md2
brw-r–r– 1 root root 9, 2 3??26 01:41 /dev/md5

허거덩.. md2 로 정말 만들어 졌다..ㅎㅎ 이상하지만 머 그런가부다 한다. 필자가 만드는 과정의 명령과 out 은 편집하지 않은것임을 말해둔다. 여튼 md2로 만들어져 버렸다.

 

이제 마운트한다.

[root@localhost ~]# mkdir /raid5
[root@localhost ~]# mount /dev/md2 /raid5
[root@localhost ~]#

 

5) 마지막으로 /etc/fstab 에 추가해주면 다 끝

[root@localhost ~]# vi /etc/fstab

# This file is edited by fstab-sync – see ’man fstab-sync’ for details
LABEL=/ / ext3 defaults 1 1
/dev/devpts /dev/pts devpts gid=5,mode=620 0 0
/dev/shm /dev/shm tmpfs defaults 0 0
/dev/proc /proc proc defaults 0 0
/dev/sys /sys sysfs defaults 0 0
/dev/md0 /raid0 ext3 defaults 1 1
/dev/md1 /raid1 ext3 defaults 1 1
/dev/md2 /raid5 ext3 defaults 1 1 <– 추가
LABEL=SWAP-sda2 swap swap defaults 0 0
/dev/fd0 /media/floppy auto pamconsole,exec,noauto,managed 0 0
/dev/hdc /media/cdrecorder auto pamconsole,exec,noauto,managed 0 0

 

끝났다. 0,1 ,5 까지 raid 룰 구성해 봤다. 다음에는 각 raid 에서 디스크가 하나씩 fail 났을때의 trouble shoot 을 해보겠다. 기대하시라.

Linux Software Raid 1

– 이번에는 raid1(mirrorring)을 구축해 보겠다.

– 기타등등은 raid0 구성하는 것과 거의 같으므로 생략한다(필자 블로그에서 raid0 구축방법 찾아보길 바란다)

– raid1은 아시다 싶이 미러링이다. 즉 2개의 디스크에 똑같은 내용을 쓴다.. 같은 내용을 2개의 디스크에 써야함으로 write 속도는 그닥 빠르지 않다. 그러나 read 속도는 빠르다. 2개의 디스크에서 읽어 올 수 있기 때문이다.

 

– 구축은 sdd1 과 sde1 을 만들고 mdadm 으로 구축하면 되겠다.

1) sdd1 과 sde1 을 파일시스템으로 만들고 파일시스템 유형은 Linux raid auto 로 준다.

[root@localhost ~]# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-204, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):
Using default value 204

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-204, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):
Using default value 204

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

2) 장치명을 주어야 한다. md1 을 찾아보고(md0 은 raid0 을 만드는데 쓰였다.) 없으면 mknod 명령으로 만들어준다.

[root@localhost ~]# ls -al /dev/md?
brw-r—– 1 root disk 9, 0 3??26 00:24 /dev/md0 <— raid0 용
[root@localhost ~]# mknod /dev/md1 b 9 1
[root@localhost ~]# ls -al /dev/md?
brw-r—– 1 root disk 9, 0 3??26 00:24 /dev/md0
brw-r–r– 1 root root 9, 1 3??26 01:20 /dev/md1 <— raid1 용

3) mdadm 명령으로 radi1 구성한다.

[root@localhost ~]# mdadm –create /dev/md1 –level=1 –raid-devices=2 /dev/sdd1 /dev/sde1
mdadm: array /dev/md1 started.
[root@localhost ~]# mdadm –detail –scan
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=6780793c:b171ede2:d0a38176:a24fbe36
devices=/dev/sdd1,/dev/sde1 <— 방금 구성한 raid1
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=80ce56ed:8a0ca06d:d96d03b6:77ae5f91
devices=/dev/sdb1,/dev/sdc1 <— 이전의 raid0
[root@localhost ~]#

 

4) md1 을 파일시스템 만들고 /raid1로 마운트한다.

 

[root@localhost ~]# mkfs.ext3 /dev/md1
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
52208 inodes, 208768 blocks
10438 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
26 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /raid1
[root@localhost ~]# mount /dev/md1 /raid1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 6.7G 2.4G 4.0G 38% /
/dev/shm 147M 0 147M 0% /dev/shm
/dev/md0 395M 11M 365M 3% /raid0
/dev/md1 198M 5.8M 182M 4% /raid1
[root@localhost ~]#

 

5) /etc/fstab 에 추가 하면 끝

[root@localhost ~]# vi /etc/fstab

# This file is edited by fstab-sync – see ’man fstab-sync’ for details
LABEL=/ / ext3 defaults 1 1
/dev/devpts /dev/pts devpts gid=5,mode=620 0 0
/dev/shm /dev/shm tmpfs defaults 0 0
/dev/proc /proc proc defaults 0 0
/dev/sys /sys sysfs defaults 0 0
/dev/md0 /raid0 ext3 defaults 1 1
/dev/md1 /raid1 ext3 defaults 1 1 <— 추가된것
LABEL=SWAP-sda2 swap swap defaults 0 0
/dev/fd0 /media/floppy auto pamconsole,exec,noauto,managed 0 0
/dev/hdc /media/cdrecorder auto pamconsole,exec,noauto,managed 0 0

Linux Software Raid 0

-fedora core 4 에서 raid 를 구성해 보겠다.

-첫번째로 raid0(stripe) 구성

– 리눅스 LVM(Linux Volume Manager) 와 Raid0은 거의 같은 개념이다. LVM 은 필자의 블로그에 검색해보면 나온다. 차이점은 단지 data 저장방식차이다. LVM은 (2개의 디스크로 LVM 구축했다고 가정하면) 첫번째 디스크를 다 쓰고 그다음에 다음 디스크를 쓴다.. 순차적으로 쓴다는 말이다. 그러나 리눅스 Raid0(stripe)는 RR(Round Robin)방식으로 쓴다. 첫번째 디스크와 2번째 디스크를 한번씩 돌아가면서 쓴다는 말이다. 그러니 2개의 디스크에 동시에 write 하므로 데이터 write 속도는 어떤 Raid 방식보다 빠르다. 대신 2개의 디스크에서 읽어봐야 함으로 read 속도는 떨어지겠다..

 

– 자 그럼 구축을 해보자.. 리눅그 fedora 에서는 raid 구성 tool 로 mdadm(meta database administrator – 맞는지 모르겠다 ^^) 를 쓴다. 있는지 확인해본다.

[root@localhost ~]# rpm -qa | grep mdadm
mdadm-1.11.0-4.fc4
[root@localhost ~]#

– 테스트 환경은

. vmware 상에서 fedora core 4 깔고 200M 의 디스크를 2개 추가후 작업하겠다. sdb 와 sdc를 쓰겠다.

 

1) 먼저 fdisk 명령으로 sdb1 과 sdc1을 만들고 파일시스템 유형은 ’Linux radi auto’ 로 만든다.

 

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-204, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):
Using default value 204

Command (m for help): p

Disk /dev/sdb: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 204 208880 83 Linux

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext’d (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p

Disk /dev/sdb: 214 MB, 214748160 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 204 208880 fd Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-204, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-204, default 204):
Using default value 204

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext’d (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

2) /dev/md0 장치가 있는지 알아본다. 없으면 만들면 된다.

[root@localhost ~]# ls -al /dev/md?
brw-r—– 1 root disk 9, 0 3??26 00:24 /dev/md0

장치명이 있는것이 보인다. 없으면 이렇게 만들면 된다.

[root@localhost ~]# mknod /dev/md0 b 9 0
mknod: `/dev/md0’: ?뚯씪??議댁옱?⑸땲??
캐릭터가 안 맞아서 깨지는데 이미 있다는 내용같다.

 

3) raid0을 구성한다.

[root@localhost ~]# mdadm –create /dev/md0 –level=0 –raid-device=2 /dev/sdb1 /dev/sdc1
mdadm: array /dev/md0 started.

mdadm 명령중 –create 주고 –level0 으로 0(stripe)를 만들고 –raid-device 수는 2개로 주고 sdb1 과 sdc1 을 주면 된다.
[root@localhost ~]# mdadm –detail –scan <— 확인 명령이다.
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=80ce56ed:8a0ca06d:d96d03b6:77ae5f91
devices=/dev/sdb1,/dev/sdc1

 

4) md0을 파일시스템으로 만들고 /raid0으로 마운트 시킨다.

[root@localhost ~]# mkfs.ext3 /dev/md0

[root@localhost ~]#mount /dev/md0 /raid0

 

5) 재부팅시 올라오도록 /etc/fstab 을 구성해주면 된다.

[root@localhost ~]#vi /etc/fstab

LABEL=/ / ext3 defaults 1 1
/dev/devpts /dev/pts devpts gid=5,mode=620 0 0
/dev/shm /dev/shm tmpfs defaults 0 0
/dev/proc /proc proc defaults 0 0
/dev/sys /sys sysfs defaults 0 0
/dev/md0 /raid0 ext3 defaults 1 1 <— 추가
LABEL=SWAP-sda2 swap swap defaults 0 0
/dev/fd0 /media/floppy auto pamconsole,exec,noauto,managed 0 0
/dev/hdc /media/cdrecorder auto pamconsole,exec,noauto,managed 0 0

 

– 끝이다. 간단하다. 파일시스템 유형을 만들때 Hex ocde로 fd(linux raid auto) 로 만들고 mdadm 명령으로 구축해주기만 하면 된다. 물론 다른 raid 들도 같은 방식이다. 다음은 raid1(mirroring)을 구축해 보겠다.