월: 2009 8월

Read-Only Root Filesystem using Linux on System z

리눅스 서버에서 Root Filesystem(/)이 Read-Only로 되어있다면 어떨까요? 그걸 수 많은 리눅스 서버들이 함께 공유해서 쓰고 있다면?

기존의 독립/단일 운영서버에서는 적용하기 힘든 여러가지 새로운 아이디어들이 Linux on System z에서는 기획되고 실제로 적용하여 운영하는 것들이 많이 있습니다. 그 중에 하나가 바로 ‘Read-Only Root Filesystem’이죠.

가상화 기반 플랫폼에 할당된 자원 활용을 최대화하고, 운영인력의 워크로드를 간편화/줄일 수 있으며, 운영하는 리눅스 서버들의 표준화를 꾀할 수 있는 방법이 될 수 있을겁니다. 이미 Nationwide Insurance, Penn State University가 이 구조로 자신들의 프로덕션 서버를 운영하고 있습니다.

Read Only Root

어떤 식으로 구성하고, 운영하는 것인지 문서를 한번 살펴보시는 것도 좋을 것 같습니다.

Sharing and maintaining SLES 10 SP2 Linux under z/VM

Advertisements

메인프레임-유닉스서버 경쟁 '새국면'

차세대 시스템을 준비 중인 A사 CIO 말씀,

메인프레임과 유닉스서버 어느 것이든 우리 환경에 유리한 기종을 채택할 뿐

그건 시스템 선택의 기본 중에 기본아니던가. 왜 이제껏 그러지 못했을까. 암튼 각 사의 환경에 맞는 최적의 플랫폼으로 선택하시길…

메인프레임-유닉스서버 경쟁 ‘새국면’
출처: 전자신문

[Tip] 디스크 추가하기

Linux on System z의 디스크를 추가하기 위해서는 크게 2단계의 작업을 거쳐야합니다. 첫 번째로 z/VM에서 리눅스 서버에 추가할 디스크를 확보하는 것, 두 번째로 확보된 디스크를 리눅스 서버에 인식시키고 늘리고자하는 파일시스템에 추가하는 것.

첫 번째 단계는 초기 시스템 구축 시 디스크 풀(Pool) 형태로 미리 구성하기 때문에 아래 단계를 바로 진행할 수 있겠지만, 만일 그렇지 않다고 한다면, 다른 파티션에서 사용하고 있지 않은 디스크를 확인하고 확보하는 작업이 추가될 수 있습니다. 또한 아래의 예에서는 Directory Maintenance Facility인 DIRMAINT를 사용하지 않은 상태의 예입니다만, 조만간 DIRMAINT를 사용하는 예에서의 디스크 추가 방법도 다루도록 하겠습니다.

1. 디스크 추가 (z/VM)
MAINT로 로그인한 상태에서 추가하고자 하는 디스크의 상태를 확인합니다. (여기서는 예로 1940-1942로 가정합니다)

q 1940-1942
DASD 1940 FREE , DASD 1941 FREE , DASD 1942 FREE
Ready; T=0.01/0.01 20:47:57

USER DIRECT C 파일을 XEDIT로 열어서 추가하고자 하는 LINUX에 추가합니다. (LINUX01이라고 가정합니다)

X USER DIRECT C
/R LINUX01 (<= USER LINUX01을 검색)

DEDICATE 1940 1940
DEDICATE 1941 1941
DEDICATE 1942 1942

위 3라인을 추가합니다. 단, 위의 제일 오른쪽에 있는 어드레스는 가상어드레스이므로, 기존에 DEDICATE로 붙어있는 디스크 다음 번호로 입력해야합니다.
다시 말해, 앞에 있는 어드레스는 실제 어드레스이고, 뒤에 있는 어드레스는 가상 어드레스입니다.

수정한 후, 아래의 명령으로 XEDIT를 종료하고, DIRECTORY를 업데이트합니다.

====> FILE

directxa
z/VM USER DIRECTORY CREATION PROGRAM - VERSION 5 RELEASE 4.0
EOJ DIRECTORY NOT UPDATED
Ready; T=0.01/0.01 20:54:14

LINUX01 리눅스 서버에 디스크를 추가합니다. 위에 DIRECTORY에 추가한 것처럼 실제/가상 어드레스로 수행합니다.

ATT 1940 LINUX01 1940
DASD 1940 ATTACHED TO LINUX01 1940 WITH DEVCTL
Ready; T=0.01/0.01 21:08:15
ATT 1941 LINUX01 1941
DASD 1941 ATTACHED TO LINUX01 1941 WITH DEVCTL
Ready; T=0.01/0.01 21:08:18
ATT 1942 LINUX01 1942
DASD 1942 ATTACHED TO LINUX01 1942 WITH DEVCTL
Ready; T=0.01/0.01 21:08:20

2. 디스크 추가 (LINUX)
LINUX01 서버로 root로 접속합니다.
디스크가 정상적으로 추가되었는지 확인합니다.

linux01:~ # modprobe vmcp
linux01:~ # vmcp q v dasd
: : : :
DASD 1940 ON DASD 1940 R/W SUBCHANNEL = 0016
DASD 1941 ON DASD 1941 R/W SUBCHANNEL = 0016
DASD 1942 ON DASD 1942 R/W SUBCHANNEL = 0016

위와 같이 1940 – 1942까지 출력되면 리눅스 서버에 추가된 것입니다. (z/VM 단에서…)
리눅스 서버에서 추가된 디스크를 인식시키는 작업을 수행합니다.

linux01:~ # cat /proc/dasd/devices
0.0.0150(ECKD) at ( 94: 0) is dasda : active at blocksize: 4096, 555840 blocks, 2171 MB
0.0.0151(ECKD) at ( 94: 4) is dasdb : active at blocksize: 4096, 36000 blocks, 140 MB
0.0.0152(ECKD) at ( 94: 8 ) is dasdc : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0153(ECKD) at ( 94: 12) is dasdd : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0154(ECKD) at ( 94: 16) is dasde : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0155(ECKD) at ( 94: 20) is dasdf : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0156(ECKD) at ( 94: 24) is dasdg : active at blocksize: 4096, 600840 blocks, 2347 MB

위처럼 출력된 내용에서 제일 마지막이 dasdg 인것을 기억하고, 아래와 같이 3개의 디스크를 인식시킵니다.

linux01:~ # chccwdev -e 0.0.1940
Setting device 0.0.1940 online
Done
linux01:~ # chccwdev -e 0.0.1941
Setting device 0.0.1941 online
Done
linux01:~ # chccwdev -e 0.0.1942
Setting device 0.0.1942 online
Done

linux01:~ # cat /proc/dasd/devices
0.0.0150(ECKD) at ( 94: 0) is dasda : active at blocksize: 4096, 555840 blocks, 2171 MB
0.0.0151(ECKD) at ( 94: 4) is dasdb : active at blocksize: 4096, 36000 blocks, 140 MB
0.0.0152(ECKD) at ( 94: 8 ) is dasdc : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0153(ECKD) at ( 94: 12) is dasdd : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0154(ECKD) at ( 94: 16) is dasde : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0155(ECKD) at ( 94: 20) is dasdf : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.0156(ECKD) at ( 94: 24) is dasdg : active at blocksize: 4096, 600840 blocks, 2347 MB
0.0.1940(ECKD) at ( 94: 28) is dasdh : unformatted
0.0.1941(ECKD) at ( 94: 32) is dasdi : unformatted
0.0.1942(ECKD) at ( 94: 36) is dasdj : unformatted

위와 같이 새로이 추가된 디스크의 장치명은 dasdg 다음인 dasdh, dasdi, dasdj 가 됩니다.
unformatted 상태이므로, 리눅스 전용으로 디스크를 포멧합니다.

linux01:~ # dasdfmt -b 4096 -d cdl -p -y -f /dev/dasdh

cyl 3339 of 3339 |##################################################| 100%

Finished formatting the device.
Rereading the partition table… ok
linux01:~ # dasdfmt -b 4096 -d cdl -p -y -f /dev/dasdi

cyl 3339 of 3339 |##################################################| 100%

Finished formatting the device.
Rereading the partition table… ok
linux01:~ # dasdfmt -b 4096 -d cdl -p -y -f /dev/dasdj

cyl 3339 of 3339 |##################################################| 100%

Finished formatting the device.
Rereading the partition table… ok

포멧이 완료된 디스크에 대해서 파티션 작업을 합니다.

linux01:~ # fdasd -a /dev/dasdh
auto-creating one partition for the whole disk...
writing volume label...
writing VTOC...
rereading partition table...
linux01:~ # fdasd -a /dev/dasdi
auto-creating one partition for the whole disk...
writing volume label...
writing VTOC...
rereading partition table...
linux01:~ # fdasd -a /dev/dasdj
auto-creating one partition for the whole disk...
writing volume label...
writing VTOC...
rereading partition table...

3. LVM(Logical Volume Manager)에 추가하기
새로 추가한 디스크를 용량이 부족한 디스크 볼륨에 추가하기 위해서 이들을 Volume Group에 포함시켜야합니다.

linux01:~ # pvcreate /dev/dasd[hij]1
Physical volume "/dev/dasdh1" successfully created
Physical volume "/dev/dasdi1" successfully created
Physical volume "/dev/dasdj1" successfully created

디스크 여유공간을 확인하고, 해당 파일시스템이 위치한 Volume Group(VG)과, Logical Volume(LV)을 확인합니다.
예를 들어, /opt 파일시스템의 여유공간이 부족할 경우, datavg Volume Group에 lvol0 Logical Volume을 증설해야합니다.

linux01:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dasda1 2.1G 1.7G 323M 85% /
udev 1000M 136K 1000M 1% /dev
/dev/mapper/datavg-lvol0
3.0G 885M 2.0G 31% /opt
/dev/mapper/datavg-lvol1
6.0G 3.4G 2.3G 61% /home

pvscan 명령을 이용하여 기존 Volume Group을 확인합니다.

linux01:~ # pvscan
PV /dev/dasdc1 VG datavg lvm2 [2.29 GB / 0 free]
PV /dev/dasdd1 VG datavg lvm2 [2.29 GB / 1.58 GB free]
PV /dev/dasde1 VG datavg lvm2 [2.29 GB / 0 free]
PV /dev/dasdf1 VG datavg lvm2 [2.29 GB / 0 free]
PV /dev/dasdg1 VG datavg lvm2 [2.29 GB / 888.00 MB free]
PV /dev/dasdh1 lvm2 [2.29 GB]
PV /dev/dasdi1 lvm2 [2.29 GB]
PV /dev/dasdj1 lvm2 [2.29 GB]
Total: 6 [16.03 GB] / in use: 5 [11.45 GB] / in no VG: 1 [6.87 GB]

추가한 디스크를 datavg Volume Group에 추가합니다.

linux01:~ # vgextend datavg /dev/dasd[hij]1
Volume group "datavg" successfully extended

datavg의 lvol0 (이 예에서 /opt 파일시스템)을 추가합니다.
(아래에서 2GB를 추가하기 위해서 -L+2G를, 6GB 추가할 경우 -L+6G를 입력하시면 됩니다.
디스크 하나당 약 2.29GB이므로, 계산하시면 됩니다.)

linux01:~ # lvextend -L+2G /dev/datavg/lvol0
Extending logical volume lvol0 to 5.00 GB
Logical volume lvol0 successfully resized

Logical Volume은 증설되었습니다만, 현재 파일시스템이 마운트되어있기 때문에 이를 실제로 늘리는 작업을 진행해야합니다.
이는 리눅스의 버전에 따라 명령이 약간 달라질 수 있으므로, 아래와 같은 방식으로 처음이 실패하면, 다음으로 진행하도록 합니다.
resize2fs 를 이용하여 증설될 수도 있고, 아래의 예처럼 마운트되어있어서 못한다고 하면, ext2online 명령으로 증설합니다.

linux01:~ # resize2fs /dev/datavg/lvol0
resize2fs 1.38 (30-Jun-2005)
/dev/datavg/lvol0 is mounted; can't resize a mounted filesystem!

linux01:~ # ext2online /dev/datavg/lvol0
ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b

df -h 명령으로 해당 파일시스템의 용량이 커졌는지 확인합니다.

linux01:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dasda1 2.1G 1.7G 323M 85% /
udev 1000M 136K 1000M 1% /dev
/dev/mapper/datavg-lvol0
5.0G 886M 3.9G 19% /opt
/dev/mapper/datavg-lvol1
6.0G 3.4G 2.3G 61% /home

4. 재부팅
추가한 디스크가 재부팅한 후에도 정상적으로 인식되어올라오게 하려면 mkinitrd를 이용하여 initrd 파일에 해당 디스크들을 포함시켜야 합니다.

linux01:/ # mkinitrd
Root device: /dev/dasda1 (mounted on / as ext3)
Module list: jbd ext3 dasd_eckd_mod (xennet xenblk)

Kernel image: /boot/image-2.6.16.60-0.21-default
Initrd image: /boot/initrd-2.6.16.60-0.21-default
Shared libs: lib64/ld-2.4.so lib64/libacl.so.1.1.0 lib64/libattr.so.1.1.0 lib64/libblkid.so.1.0 lib64/libc-2.4.so lib64/libcom_err.so.2.1 lib64/libdl-2.4.so lib64/libext2fs.so.2.4 lib64/libhistory.so.5.1 lib64/libncurses.so.5.5 lib64/libpthread-2.4.so lib64/libreadline.so.5.1 lib64/librt-2.4.so lib64/libuuid.so.1.2 lib64/libnss_files-2.4.so lib64/libnss_files.so.2 lib64/libgcc_s.so.1
Driver modules: dasd_mod dasd_eckd_mod
DASDs: 0.0.0150(ECKD) 0.0.0151(ECKD) 0.0.0152(ECKD) 0.0.0153(ECKD) 0.0.0154(ECKD) 0.0.0155(ECKD) 0.0.0156(ECKD) 0.0.1940(ECKD) 0.0.1941(ECKD) 0.0.1942(ECKD)
Filesystem modules: jbd ext3
Including: initramfs fsck.ext3
16964 blocks

initrd updated, zipl needs to update the IPL record before IPL!

mkinitrd를 마치고 나면, 새로 생성된 initrd를 이용하여 부팅할 수 있도록 zipl을 새로 수행해줍니다.

linux01:/ # zipl
Using config file '/etc/zipl.conf'
Building bootmap in '/boot/zipl'
Building menu 'menu'
Adding #1: IPL section 'ipl' (default)
Adding #2: IPL section 'Failsafe'
Preparing boot device: dasda (0150).
Done.

설명이 부족하거나, 수정해야할 부분이 발견되면 즉시 알려주세요~ 🙂

[BBC] 40 Years of Unix

2009년 8월, Unix가 탄생한 지 40년이 되는 해라고 합니다. BBC에서 특집기사를 썼네요. 말미에 Unix의 기본 철학이 여러 오픈소스 프로젝트에 영향을 미쳤고, 또 Linux를 탄생시키게 하였다는 내용도 있습니다. 한번쯤 재미삼아 Unix의 역사를 되돌아볼 수 있는 기회가 되겠습니다. 읽어보세요~

40 Years of Unix

zLinux Case Studies

무료로 볼 수 있는 사례 분석 자료가 있어 소개합니다. Clabby Analytics라는 곳에서 제공하는 ‘Linux on System z’에 관련한 사례들에 대한 분석 자료입니다. 참고하세요~

o KMD: Unix and Oracle Consolidation on System z
o Qatar’s New “Computing Cloud”! Colacem (SAP on Linux on System z mainframe case study)
o India’s ELCOT (A mainframe computing cloud?)
o Baldor Electric Case Study (SAP on Linux on a mainframe)
o Are You Considering Migrating Away From Your Sun Servers?
o El Banco de Credito del Peru on Mainframe Costs: Mainframes Are NOT our Most Expensive Platforms

[Video] IBM Consolidation Story

IBM의 서버 통합과 마이그레이션 서비스에 대한 데모 동영상이라고 하네요.
IBM 자체 데이터센터의 서버들을 통합하면서 그 경험을 토대로 서비스를 만든 것 같습니다. 현재 3,300여대의 서버를 z10 15대로 통합하는 ‘Big Green Project’가 한창 진행 중인 것으로 알고 있거든요. 일단 한번 보시죠. ^^

Server Consolidation and Migration Service Demo

참고 사이트: Move up to IBM System z