게으른 리눅스: 시스템 관리자를 위한 열 가지 트릭

Posted by 잿빛푸우 greypoooh@daum.net
2008.10.28 00:45 리눅스의 모든것

생산적인 리눅스 시스템 관리자가 되는 방법

Vallard Benincosa, Certified Technical Sales Specialist, IBM

옮긴이: 박재호 이해영 dwkorea@kr.ibm.com

2008 년 9 월 30 일

열 가지 트릭을 익혀 전 우주에서 가장 강력한 리눅스(Linux®) 시스템 관리자가 되어봅시다. 음, 전 우주가 아닐지도 모르겠네요..., 하지만 큰 물에서 놀려면 이 정도 팁은 익힐 필요가 있답니다. SSH 터널, VNC, 암호 복구, 콘솔 훔쳐보기 등을 익힙시다. 각 트릭에는 예제가 따라오므로 각자 시스템에서 실험해볼 수 있습니다.

최강의 시스템 관리자는 효율성부터 다르다. 일반적인 관리자가 두 시간 만에 마칠 작업을 효율적인 시스템 관리자가 10분 내로 끝낸다면, 회사가 시간을 절약했고, 시간이 돈이니까 효율적인 관리자는 보너스를 받아야 하지 않겠는가?

트릭은 효율성을 관리층에게 증명하는 데 있다. 이 기사에서 이런 정치적인 트릭을 다루지는 않겠지만 게으른 관리자의 트릭 주머니에 열 가지 핵심적인 보석을 넣어줄 계획이다. 여기서 소개하는 팁은 시간을 절약해주며, 좀 더 효율을 발휘해 돈을 벌지는 못할지라도 최소한 헤일로 게임을 하는 데 더 많은 시간을 확보할 수는 있을 것이다.

트릭 1: 반응이 없는 DVD 드라이브 언마운트하기

신입 관리자가 레드몬드에서 만든 어떤 운영체제를 돌리는 서버의 DVD에 달려있는 추출 버튼을 눌렀을 때, 즉시 튀어나올 것이라고 말했다. 그러고 나서 대다수 엔터프라이즈 리눅스 서버에서는 이 디렉터리에서 프로세스가 동작하고 있다면 DVD 추출이 불가능하다고 불평했다. 어떤 프로세스가 동작하고 있으며 어떤 이유에서 DVD 드라이브를 놓아주지 않는지 모른다면 리눅스 관리자로서 기다리다 지쳐 기계를 재시동해서 튀어나오는 디스크를 회수할 것이다. 하지만 이런 방법은 효과적이지 못하다.

여기에 DVD 드라이브를 쥐고 있는 프로세스를 찾고 속이 후련해지도록 추출하는 방법을 설명한다. 우선 상황을 흉내내보자. 디스크를 DVD 드라이브에 넣고 터미널을 열어 DVD 드라이브를 마운트하자.

# mount /media/cdrom
# cd /media/cdrom
# while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done

이제 두 번째 터미널을 열어 DVD 드라이브를 추출하려고 시도하자.

# eject

다음과 같은 메시지가 나온다.

umount: /media/cdrom: device is busy

추출에 앞서 누가 DVD를 사용하고 있는지 찾아보자.

# fuser /media/cdrom

동작 중인 프로세스를 확인했는데, 실제로 디스크를 추출하지 못한 이유는 우리 잘못 때문이다.

이제 루트 권한으로 전지전능한 힘을 빌어 프로세스를 죽이자.

# fuser -k /media/cdrom

쾅! 이제 자유를 찾았다. 엄숙하게 드라이브 마운트를 해제하자.

# eject

fuser를 생각하라.




위로


트릭 2: 화면이 엉망진창이 되었을 때 정상으로 되돌리기

다음과 같이 명령을 내려보자.

# cat /bin/cat

어찌된 영문인가! 터미널이 엉망진창으로 변했다. 입력하는 문자마다 매트릭스를 연상하게 만든다. 어떻게 해야 할까?

reset 명령을 내려보자. 하지만 잠깐만. reset은 reboot이나 shutdown과 너무 비슷하지 않은가? 운영 중인 기계에서 이런 작업을 하는 중이라면 손바닥에 땀이 차오른다.

안심하자. 재시동은 없다고 확신하면서 reset 명령을 내릴 수 있다. 어서 명령을 내려보자.

# reset

이제 화면이 정상으로 돌아온다. 조금 전에 다섯 군데 기계를 거쳐 SSH로 접속했다면, 윈도우를 닫고 다시 한번 로그인하는 경우와 비교해 감지덕지다.




위로


트릭 3: screen으로 협력 작업하기

제품 공학 쪽에서 까다로운 사용자인 데이비드가 전화한다. "당신이 배포했던 새로운 기계에서 supercode.c를 컴파일하지 못하는 이유가 궁금합니다."

"좋습니다" 당신이 말한다. "작업하고 있는 기계가 어딥니까?"

데이비드는 다음과 같이 말한다. "포쉬"(이 가상 회사는 운영 중인 서버 다섯 대에 대해 스파이스 걸즈를 본따 이름을 붙였다). "좋아요"라고 말하며 전지전능한 루트 위력을 실험하기 위해 또 다른 기계에서 데이비드로 변신한다.

# su - david

그러고 나서 포쉬로 넘어간다.

# ssh posh

포쉬로 들어왔다면 다음과 같은 명령을 실행한다.

# screen -S foo

그러고 나서 데이비드에게 큰 소리로 말한다.

"데이비드, 터미널에서 다음과 같은 명령을 내려봐요. # screen -x foo"

데이비드가 명령을 내리면 당신과 데이비드 터미널 세션이 성스러운 리눅스 셸에서 하나로 결합된다. 당신이 글자를 입력할 수도, 데이비드가 글자를 입력할 수도 있지만, 두 사람 모두 상대편이 하는 작업 광경을 볼 수 있다. 이렇게 하면 층을 오가는 수고를 덜어주며 동일한 통제 하에 작업을 공유할 수 있다. 이렇게 했을 경우에 데이비드는 문제 해결 기술을 관찰해 정확하게 문제를 풀어내는 방법을 살펴볼 수 있다.

마지막으로 두 사람은 문제가 무엇인지 알게 되었다. 데이비드가 만든 컴파일 스크립트는 새로운 서버에 존재하지 않는 예전 디렉터리를 포함하고 있었다. 마운트해서 다시 컴파일해 문제를 해결하고 데이비드는 작업을 하러 돌아갔다. 당신도 직전에 수행하고 있었던 게으른 작업으로 돌아간다.

이런 트릭을 쓰려면 두 사람 모두 동일 사용자로 로그인할 필요가 있다는 한 가지 주의 사항이 따라온다. screen 명령으로 다중 윈도우나 화면 분할을 포함한 다른 멋진 작업도 가능하다. 여기에 대해서는 매뉴얼 페이지를 살펴보기 바란다.

screen 세션에서 빠져나오지 않았다면 마지막 팁을 주겠다. 세션에서 분리해 열어둔 상태로 놓아두려면 Ctrl-A D를 누른다(컨트롤을 누른 상황에서 A키를 누른 다음에 다시 D키를 누른다).

여기서 다시 한번 screen -x foo 명령을 내려 세션에 연결할 수 있다.




위로


트릭 4: 루트 암호 되돌리기

루트 암호를 잊어버렸다. 이제 전체 시스템을 다시 설치해야 한다. 비극적인 이야기지만 몇 사람이 이렇게 하는 광경을 지켜봤다. 하지만 시스템에서 암호를 변경하는 방법은 놀랄 정도로 쉽다. (GRUB 암호를 걸어놓고 이 암호를 잊어버린 경우처럼) 모든 경우에 통하지는 않겠지만, 센트OS 리눅스를 사용하는 일반적인 경우에 어떻게 조치를 취하는지 정리했다.

우선 시스템을 재시동한다. 재시동할 때 그림 1과 같은 GRUB 화면을 보게 된다. 일반 부트를 진행하는 대신 화살표 키를 움직여서 이 화면에 그대로 머문다.


그림 1. 재시동 직후 GRUB 화면


 

이제 화살표 키를 사용해 부트할 커널을 선택하고 E를 눌러 커널 행을 편집한다. 그림 2와 같은 화면이 나온다.


그림 2. 커널 행 편집 준비
커널 행 편집 준비 

화살표 키를 다시 한번 사용해 kernel로 시작하는 행을 선택하고 E를 눌러 커널 매개변수를 편집한다. 그림 3과 같은 화면이 나오면, 그림 3을 참조해 숫자 1을 인수에 추가하기만 하면 된다.


그림 3. 숫자 1을 인수에 추가
숫자 1을 인수에 추가 

그러고 나서 엔터와 B를 차례로 누르면 단일 사용자 모드로 커널이 부팅된다. 여기까지 왔다면 passwd 명령을 내려 root 사용자 암호를 바꾼다.

sh-3.00# passwd 
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

이제 리부팅하면 새로운 암호를 사용할 수 있다.




위로


트릭 5: SSH 뒷문 만들기

회사 방화벽으로 외부를 막은 누군가를 원격으로 지원할 필요가 있는 사이트에서 일하느라 고생한 적이 여러 번 있었다. 방화벽을 통해 외부로 나갈 수 있는지 눈치챈 사람은 별로 없지만 구멍을 뚫어 세상을 훔쳐보기란 상대적으로 쉽다.

까놓고 말하면 이런 방법을 "방화벽에 구멍뚫기"라고 부른다. 여기서는 이런 기법을 SSH 뒷문이라고 부르겠다. SSH 뒷문을 사용하려면, 중간 매개체로 사용 가능한 인터넷에 물린 기계가 하나 필요하다.

예제에서, 중간 매개체를 blackbox.example.com이라고 부르자. 회사 방화벽 뒤에 숨어있는 기계를 ginger라고 부르자. 마지막으로 기술 지원팀이 사용하는 기계를 tech라고 부르자. 그림 4는 설정 방법을 보여준다.


그림 4. 방화벽에 구멍 뚫기
방화벽에 구멍 뚫기 

여기에 진행 방법을 정리했다.

  1. 이런 작업을 허용하는지 살펴봐서 문제가 있다면 올바른 사람에게 요청하자. 대다수 사람은 방화벽을 열고 있다고 말하면 움츠러들지만, 완벽하게 암호화되어 있는 사실을 이해하지 못한다. 또한 여러분 회사로 접속하기 전에 다른 사람을 시켜 외부 기계를 다뤄야 할 필요가 있다. 이런 과정에서 "허락 대신 용서를 구하는" 방법을 써도 된다. 어떻게 되었거나 각자 판단에 따르며 문제가 생겨도 나보고 뭐라고 하지는 말라.

  2. ginger에서 blackbox.example.com으로 -R 플래그를 붙여 SSH 접속을 시도한다. 여러분은 ginger에서 root 사용자인데, 여러분을 돕기 위해 tech가 root 사용자 ID를 요구한다고 가정한다. -R 플래그를 사용해 blackbox의 포트 2222번으로 들어오는 명령을 ginger의 포트 22번으로 전달한다. 이게 바로 SSH 터널 설정법이다. 단지 SSH 트래픽만 ginger로 들어온다. 벌거벗은 인터넷에 ginger를 떠밀지 않는다.

    다음과 같은 구문을 사용해 이런 작업을 진행할 수 있다.

    ~# ssh -R 2222:localhost:22 thedude@blackbox.example.com

    blackbox에 들어왔다면, 계속해서 로그인해 있을 필요가 있다. 기계를 바쁘게 만들기 위해 흔히 다음과 같은 명령을 내린다.

    thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; done

    그리고 창을 최소화한다.

  3. 이제 tech 친구에게 SSH로 특별한 SSH 플래그를 붙이지 않은 상태에서 thedude 계정으로 blackbox에 SSH 접속을 부탁한다. 이 때, 암호를 알려줘야 한다.

    root@tech:~# ssh thedude@blackbox.example.com .

  4. tech가 blackbox에 들어왔다면, 다음과 같이 SSH를 사용해 singer로 접속할 수 있다.

    thedude@blackbox:~$: ssh -p 2222 root@localhost

  5. 여기서 tech는 암호를 입력해야 한다. ginger의 root 암호를 입력한다.

  6. 이제 여러분과 tech 기술지원팀이 함께 작업해 문제를 해결할 수 있다. 여기서 screen을 함께 사용해도 좋다(트릭 4 참조).



위로


트릭 6: SSH 터널을 통한 원격 VNC 세션

VNC나 가상 네트워크 컴퓨팅은 오래 전부터 사용되어 왔다. 원격 서버에서만 돌릴 수 있는 특수한 그래픽 프로그램이 있을 때 이를 활용하는 방법을 찾아냈다.

트릭 5에서 제시한 예처럼 ginger를 저장 서버라고 가정하자. 많은 저장 서버는 저장소 컨트롤러를 관리하기 위한 GUI 프로그램이 따라온다. 종종 이런 GUI 관리 도구는 때때로 내부망에 연결된 네트워크를 통해 직접 연결해야 하는 경우가 있다. 따라서 GUI에 접근하려면 ginger에서 작업하는 방법이 유일하다.

-X 옵션을 붙여 singer로 SSH 접속을 시도해 GUI를 돌리는 방법도 있지만, 필요한 대역폭이 너무 커서 종종 기다리다 지치는 경우가 생긴다. VNC는 네트워크에 훨씬 더 적합한 도구로 거의 모든 운영체제에서 동작한다.

트릭 5에서 소개한 설정과 비슷하다고 가정할 때, tech가 SSH 대신에 VNC에 접속하게 만들기를 원한다. 이 경우 비슷한 설정을 하되, VNC 포트를 대신 사용한다. 여기에 방법을 정리했다.

  1. ginger에서 VNC 서버 세션을 시작한다. 다음과 같은 명령을 내리면 된다.

    root@ginger:~# vncserver -geometry 1024x768 -depth 24 :99

    여기서 사용한 옵션은 VNC 서버에게 1024x768 해상도에 24비트 컬러로 시작하라고 지시한다. 정말로 느린 연결 설정을 사용한다면 8이 더 좋은 옵션이다. :99는 VNC 서버에 접근할 포트를 지정한다. VNC 프로토콜은 5900에서 시작하므로 :99로 지정하면 서버를 포트 5999에서 접근이 가능하다는 의미다.

    세션을 시작하면 암호를 물어본다. VNC 서버를 시작한 사용자와 동일한 사용자 ID가 필요하다(우리 경우에는 사용자 ID가 root다).

  2. ginger에서 blackbox.example.com으로 SSH 접속을 진행한다. 여기서 blackbox쪽 포트 5999로 들어오는 내용을 ginger로 전달한다. 다음과 같은 명령을 내리면 된다.

    root@ginger:~# ssh -R 5999:localhost:5999 thedude@blackbox.example.com

    일단 이 명령을 내렸다면, ginger로 포트 전달을 유지하기 위해 이 SSH 세션을 열어놓을 필요가 있다. 이 시점에서 blackbox에 있다면 다음과 같은 명령을 내려 ginger에 있는 VNC 세션으로 접근이 가능해진다.

    thedude@blackbox:~$ vncviewer localhost:99

    이렇게 SSH를 통해 포트를 ginger로 전달한다. 하지만 우리는 tech에게 ginger쪽 VNC 접근을 허용하고 싶다. 이렇게 하려면 또 다른 터널이 필요하다.

  3. tech쪽에서 여러분 포트 5999번을 blackbox 포트 5999로 전달하도록 SSH를 통해 터널을 연다. 다음과 같은 명령을 내린다.

    root@tech:~# ssh -L 5999:localhost:5999 thedude@blackbox.example.com

    이번에 사용한 SSH 플래그는 -L로 포트 5999를 사용해 blackbox로 패킷을 밀어넣는 대신 blackbox에서 패킷을 끌어온다. blackbox에 접속했다면 이 세션을 열어놓을 필요가 있다. 이제 tech 쪽에서 VNC를 사용할 준비가 다 되었다!

  4. tech 쪽에서 ginger로 다음 명령을 내려 VNC 접속을 진행한다.

    root@tech:~# vncviewer localhost:99 .

    tech는 이제 ginger로 직접 VNC 세션을 연결했다.

설정 작업에 노력이 많이 들어가는 듯이 보이지만 나라를 가로질러 저장소 하드웨어를 수리하러 가는 편에 비하면 별거 아니다. 몇 번 연습하면 상당히 쉽게 느껴진다.

트릭 한 가지를 더 알려주겠다. 윈도 운영체제를 돌리는데, 명령행 SSH 클라이언트가 없다면 tech 쪽에서 putty를 사용하면 된다. putty는 화면 우측에 나온 옵션을 사용해 SSH 포트를 전달하도록 설정이 가능하다. 우리 예에서 5999 대신 5902를 포트 번호로 사용한다면 그림 5와 같이 입력하자.


그림 5. putty도 터널링을 통해 SSH 포트를 전달할 수 있다.
putty도 터널링을 통해 SSH 포트를 전달할 수 있다. 

설정이 끝나면 tech는 리눅스 운영체제를 사용하듯이 localhost:2로 VNC를 연결할 수 있다.




위로


트릭 7: 대역폭 점검

다음과 같은 상황을 상상해보자. 회사 A에는 ginger라는 저장소 서버가 있는데, beckham이라는 클라이언트 노드가 NFS로 마운트해 저장소 서버를 사용한다. 회사 A는 ginger에서 나오는 대역폭을 좀 더 늘리길 원한다고 결정했다. 엄청나게 많은 노드에서 ginger가 공유하는 파일 시스템으로 NFS 마운트를 요청하기 때문이다.

이렇게 하기 위한 가장 흔하고 저렴한 방법으로 기가비트 이더넷 NIC 두 개를 한데 묶어 사용한다. 이렇게 하는 방법이 저렴한 이유는 일반적으로 내장 NIC가 여분으로 남아 있으며, 스위치 어디인가에도 추가 포트가 남아 있기 때문이다.

여기까지는 좋다. 하지만 질문이 떠오른다. 도대체 진짜 가용 대역폭은 어느 정도일까?

기가비트 이더넷에서 이론적인 한계는 128MBps다. 이 숫자는 어디서 왔을까? 다음을 살펴보자.

1Gb = 1024Mb1024Mb/8 = 128MB; "b" = "bits," "B" = "bytes"

하지만 실제 측정값은 얼마이며, 대역폭을 측정하는 좋은 방법은 무엇일까? 한 가지 권장하는 도구는 iperf다. 다음과 같이 iperf를 구할 수 있다.

# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz

iperf를 ginger와 beckham 양쪽에서 볼 수 있는 공유 파일 시스템에 설치하거나 컴파일해 양쪽 노드에 설치할 필요가 있다. 양쪽 노드에서 볼 수 있는 bob 사용자 홈 디렉터리에서 iperf를 컴파일한다.

tar zxvf iperf*gz
cd iperf-2.0.2
./configure -prefix=/home/bob/perf
make
make install

ginger 쪽에서 다음 명령을 내린다.

# /home/bob/perf/bin/iperf -s -f M

이 기계는 서버로 동작하며, MBps 단위로 속력을 출력한다.

beckham 쪽에서 다음 명령을 내린다.

# /home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60

양쪽 화면에서 속력이 얼마인지 결과를 볼 수 있다. 기가비트 이더넷 어댑터가 달린 일반 서버에서, 대략 112MBps 정도 나온다. 이는 TCP 스택과 물리적인 케이블에서 잃어버리는 대역폭을 고려한 정상적인 값이다. 각각에 이더넷 카드 두 장을 장착한 두 서버를 직접 연결해 테스트하면 220MBps가 나온다.

실제로 네트워크 카드 두 장을 결합한 서버에서 NFS 성능은 대략 150-160MBps 정도 나온다. 이런 결과는 대역폭이 기대치에 근접하고 있다는 훌륭한 증거 자료를 제시한다. 여기서 제시한 결과보다 뭔가 신통치 않으면 문제를 점검해야 한다.

최근에 두 NIC를 묶기 위해 사용한 결합 드라이버가 제각각인 경우가 있었다. 성능은 너무나도 형편없었는데, 대역폭이 이더넷 카드를 묶지 않았을 경우보다도 훨씬 적은 20MBps 정도 나왔다!




위로


트릭 8: 명령행 스크립트와 유틸리티

리눅스 시스템 관리자는 명령행 스크립트를 사용해 목에 힘을 주면서 좀 더 효율을 발휘하게 된다. 명령행 스크립트는 awkgrepsed와 같은 유틸리티를 사용해 자료를 해석하는 방법과 반복을 포함한다. 좀 더 적은 키보드 입력과 사용자 오류가 일어날 가능성을 줄이는 다양한 방법이 존재한다.

예를 들어, 설치 대상 리눅스 클러스터를 위한 새로운 /etc/hosts 파일을 생성할 필요가 있다고 가정하자. 무식한 방법으로 vi나 선호하는 텍스트 편집기를 사용해 IP 주소를 추가한다. 하지만 이미 존재하는 /etc/hosts 파일을 가져다 명령행에서 다음과 같은 명령을 내려 파일 뒤에 필요한 주소를 덧붙일 수도 있다.

# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts

n001부터 n200까지 200개나 되는 호스트 이름이 IP 주소 192.168.99.1부터 192.168.99.200까지 범위에서 만들어진다. 수작업으로 이런 파일을 만들 경우에 무심코 중복되는 IP 주소나 호스트 이름을 생성할 위험이 도사리므로, 호스트 이름 추가는 사용자 오류를 없애는 내장 명령행을 활용하는 좋은 예다. 대다수 리눅스 배포판에 들어있는 배시 셸로 작업해야 함에 주의하자.

또 다른 예제로 리눅스 클러스터를 구성하는 각 계산 노드에 동일한 메모리가 탑재되어 있는지를 점검하기를 원한다고 가정하자. 이런 상황에서 분산이나 병렬 셸이 가장 좋은 해법이겠지만, 예를 설명하기 위해 여기서는 SSH를 사용하는 방법을 제시하겠다.

SSH를 암호 없이 인증 가능하도록 설정했다고 가정하자. 다음과 같은 명령을 내리자.

# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq

이와 같은 명령행은 상당히 복잡하게 보인다(정규 표현식이라도 넣으면 훨씬 더 복잡해질 것이다). 한조각씩 집어 비밀을 풀어보자.

먼저 001-200까지 반복문을 돌린다. seq 명령어에 -w를 붙여 앞쪽을 0으로 채우도록 한다. 그런 다음에 num 변수를 치환해 SSH로 접속할 호스트 이름을 만들자. 목표 호스트를 생성했다면 여기에 명령을 내리자. 여기서는 다음과 같다.

free -m | grep Mem | awk '{print $2}'

이 명령어는 다음과 같은 동작을 한다.

  • 메모리 크기를 메가바이트 단위로 얻기 위해 free 명령을 사용한다.
  • 명령 결과를 잡아 grep을 사용해 문자열 Mem이 들어있는 행을 골라낸다.
  • 행을 찾아냈다면 awk를 사용해 여기서 두 번째 필드를 출력한다. 이게 바로 노드에 들어있는 전체 메모리다.

이 연산을 각 노드마다 실행한다.

모든 노드에서 명령을 수행했다면 모든 200개 노드의 전체 결과물을 파이프(|)로 sort 명령으로 보낸 다음에 모든 메모리 값을 정렬한다.

마지막으로 uniq 명령을 사용해 중복을 제거한다. 이 명령어 결과는 다음 경우 중 하나다.

  • n001-n200 범위에 있는 모든 노드 메모리가 동일하다면 숫자 하나만 출력된다. 이는 각 운영체제가 점검한 메모리 크기다.
  • 노드 메모리 크기가 다르면, 여러 메모리 크기 값이 나온다.
  • 마지막으로 특정 노드에서 SSH가 실패하면, 몇 가지 오류 메시지가 뜬다.

이 명령어는 완벽하지 않다. 기대와는 다른 메모리 값을 찾으면, 어떤 노드가 문제를 일으켰으며 얼마나 많은 노드가 문제를 일으켰는지 모른다. 또 다른 명령어를 사용해 이런 의문을 풀어야 한다.

그렇지만 이런 트릭은 뭔가 잘못되었을 때 빠르게 뭔가를 점검하는 최선의 방법이다. 진짜 가치는 다음과 같다. 빠르지만 대충 점검하는 작업 속력을 높인다.




위로


명령 9: 콘솔 훔쳐보기

몇몇 소프트웨어는 오류 메시지를 콘솔로 뿌리는 바람에 SSH 세션에서 정보를 놓칠 수 있다. vcs 디바이스를 사용하면 콘솔 출력을 검사할 수 있다. SSH 세션에서 원격 서버에 # cat /dev/vcs1와 같은 명령을 수행하자. 이렇게 하면 첫 번째 콘솔로 나오는 내용을 보여준다. 1 대신 2, 3을 지정해 다른 가상 터미널 내용도 볼 수 있다. 사용자가 원격 시스템에서 글자를 입력하면 입력한 글자도 볼 수 있다.

대다수 데이터 센터에서는 원격 터미널 서버, KVM 심지어 LAN을 통한 직렬 연결을 사용해 이런 정보를 보는 방법이 최선이다. 이런 물리적인 방법은 콘솔 훔쳐보기에 전용 스트림이라는 추가적인 편의 기능을 제공한다. vcs 디바이스를 활용하면 기계실로 가서 콘솔을 쳐다보는 수고를 줄여주는 빠른 공용 스트림 기능을 제공한다.




위로


트릭 10: 시스템 정보 수집

트릭 8에서 시스템에 탑재된 전체 메모리에 대한 정보를 얻는 명령행을 사용한 예제를 살펴보았다. 이번 트릭에서는 비교하고 문제를 해결하고 원격 지원을 제공하는 데 필요한 중요한 시스템 정보를 수집하는 다른 방법을 몇 가지 제시한다.

먼저, 프로세서에 대한 정보를 수집하자. 이런 작업은 다음과 같은 방식으로 쉽게 처리할 수 있다.

# cat /proc/cpuinfo .

이 명령어는 프로세서 속력, 개수, 모델에 대한 정보를 제공한다. 많은 경우에 grep을 사용해 원하는 값을 뽑아낼 수 있다.

내가 종종 수행하는 점검 내역은 시스템에 있는 프로세서 개수를 확인하는 작업이다. 따라서 듀얼 프로세서에 쿼드 코어 서버를 구매했다면 다음과 같은 명령으로 확인할 수 있다.

# cat /proc/cpuinfo | grep processor | wc -l .

결과 값으로 8을 기대하고 있다. 그렇지 않다면 업체에 전화를 걸어 프로세서를 추가로 보내달라고 요청할 것이다.

필요한 또 다른 정보는 디스크 정보다. df 명령어로 확인이 가능하다. 일반적으로 -h 플래그를 붙여서 결과를 기가바이트나 메가바이트 단위로 표시한다. # df -h 또한 디스크 파티션 내역을 보여준다.

마지막으로 시스템 펌웨어를 살펴보는 방법을 소개한다. 바이오스 단계와 NIC에 탑재된 펌웨어 정보를 얻는 방법 말이다.

BIOS 버전을 점검하려면, dmidecode 명령어를 수행한다. 불행하게도, 정보를 쉽게 grep으로 걸러내지 못하므로, 파이프를 걸어서 이런 작업을 처리하는 방식은 비효율적이다. 레노보 T61 랩톱에서 명령을 내리면 다음과 같은 결과를 얻는다.

#dmidecode | less 
...
BIOS Information
Vendor: LENOVO
Version: 7LET52WW (1.22 )
Release Date: 08/27/2007
...

이런 방법은 기계를 다시 부팅해 POST 결과를 보는 방법보다 훨씬 더 효율적이다.

이더넷 어댑터에서 드라이버와 펌웨어 버전을 검사하려면, ethtool을 돌려보자.

# ethtool -i eth0
driver: e1000
version: 7.3.20-k2-NAPI
firmware-version: 0.3-0




위로


결론

명령행 전문가로부터 수천 가지 트릭을 배울 수 있다. 배움을 향한 지름길은 다음과 같다.

  • 다른 사람과 함께 일하자. 화면 세션을 공유해 다른 사람들이 일하는 방법을 관찰하자. 어떤 일을 할 때 새로운 기법을 보게 될 것이다. 자존심을 누르고 다른 사람들이 어떻게 하는지 살펴보자. 종종 배울 내용이 많다.
  • 매뉴얼 페이지를 읽어보자. 농담이 아니다. 심지어 낱낱이 안다고 생각하는 명령어조차도 매뉴얼 페이지를 읽다 보면 흥미로운 통찰력이 생긴다. 예를 들어, awk를 사용한 네트워크 프로그래밍 방법을 알고 있었나?
  • 문제를 해결하자. 시스템 관리자로서, 자신이나 다른 사람이 만든 문제를 항상 해결해야 한다. 이를 경험이라고 부르며, 경험은 관리자를 효과적으로 성장하게 만든다.

적어도 이런 트릭 중 한 가지라도 몰랐던 뭔가를 배우는 데 도움이 되었기를 바란다. 여기서 소개하는 핵심적인 트릭을 이용하면 좀 더 효율적으로 작업할 수 있고 경험이 쌓이게 되지만, 더 중요한 것은 비디오 게임과 같이 좀 더 흥미로운 활동을 위한 자유 시간을 제공한다는 점이다. 최상급 관리자가 게으른 이유는 작업을 싫어하기 때문이다. 최상급 관리자는 작업을 하기 위한 지름길을 찾아내어 계속해서 게으름을 추구한다.



참고자료

교육

제품 및 기술 얻기

토론


필자소개

Vallard Benincosa는 IBM 리눅스 클러스터 팀을 위해 게으른 리눅스 인증 IT 전문가로 일하고 있다. 올랜도 주 포틀랜드에 부인과 두 아이와 함께 살고 있다.

출처 : IBM

이 댓글을 비밀 댓글로