검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Resizing Linux partitions, Part 1: Basics, Resizing Linux partitions, Part 2: Advanced resizing

  이번에는 파티션의 크기를 늘리고 줄이거나 위치를 옮기는 리사이징에 대해서 알아보겠습니다.


more..



more..



more..



more..




2010/11/15 11:56 2010/11/15 11:56
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : How to Limit The CPU Usage of Any Process in Linux
cpulimit 홈페이지 : http://cpulimit.sourceforge.net/

  cpulimit은 하나의 프로세서가 점유할 수 있는 최대 CPU 사용량을 제한하는 프로그램입니다. 아주 가끔가다가 이런 프로그램이 필요한 경우들이 있죠. 기본적으로 어느 배포판이든 사용 가능합니다. 우분투에서는 아래의 명렁어로 설치가 가능합니다.
sudo apt-get install cpulimit
  사용법도 정말 간단합니다. 제한하려는 프로세스의 PID를 찾고 최대 허용할 CPU 사용량을 정한 다음에 아래와 같은 명령어로 제한할 수 있습니다.
sudo cpulimit -p PID -l CPU
  PID에는 프로세스의 PID, CPU에는 제한할 백분률을 정수로 쓰면 됩니다.


  그리고 우분투 포럼에서 abcuser라는 사람이 이 프로그램을 활용하여 '프로세스들의 CPU 점유율을 모니터링하다가 특정 CPU 점유율을 넘는 프로세스를 감지하면 해당 프로세스를 제한 조치'하는 알흠다운 스크립트를 만들었다고 합니다. 스크립트에서 위의 cpulimit과 gawk를 사용한다고 하니 gawk도 깔아버립시다.
sudo apt-get install gawk
  스크립트는 여기서 받으시거나 위의 포럼 포스트에서 복사하시기 바랍니다. 스크립트는 총 2개로 프로세스들의 CPU 점유율을 감시하고 제한하는 cpulimit_daemon.sh와 시작과 종료를 제어하기 위해 /etc/init.d/ 디렉토리 안에 넣을 cpulimit 파일들로 구성되어 있습니다. cpulimit_daemon.sh 스크립트 내에는 아래의 4개 변수가 있습니다.
  • CPU_LIMIT : 각 프로그램의 최대 CPU 점유율입니다. 디폴트 값은 20(%)입니다.
  • DAEMON_INTERVAL : 스크립트가 시스템을 체크하는 시간 간격입니다. 디폴트 값은 3(초)입니다.
  • BLACK_PROCESSES_LIST : 이 변수에 있는 프로세스만 CPU 점유율을 제한합니다. 디폴트 값은 비어 있으며 그 경우 CPU_LIMIT에서 설정한 점유율을 넘기는 모든 프로세스에 대해 제한합니다. 여러 프로세스를 지정할 때는 파이프(|)를 구분자로 사용합니다.(예: mysql|firefox|gedit)
  • WHITE_PROCESSES_LIST : 이 변수에 있는 프로세스를 제외한 모든 프로세스의 CPU 점유율을 제한합니다. 위와 마찬가지로 디폴트 값은 비어 있으며 그 경우 위와 마찬가지로 CPU_LIMIT에서 설정한 점유율을 넘기는 모든 프로세스에 대해 제한합니다. 마찬가지로 여러 프로세스를 지정할 때는 파이프(|)를 구분자로 사용합니다.(예: mysql|firefox|gedit)
  참고로 BLACK_PROCESSES_LIST와 WHITE_PROCESSES_LIST를 모두 사용할 수는 없으며 둘 중 하나는 비어있어야 합니다.

  이제 설정이 끝났으면 설치 작업에 들어갑니다. 먼저 cpulimit_daemon.sh 스크립트 파일을 /usr/bin/ 디렉토리에 넣고 실행이 가능하도록 퍼미션을 변경합니다.
sudo mv ~/cpulimit/cpulimit_daemon.sh /usr/bin
sudo chown root:root /usr/bin/cpulimit_daemon.sh
sudo chmod 700 /usr/bin/cpulimit_daemon.sh
  그리고 cpulimit 스크립트 파일을 /etc/init.d/ 디렉토리에 넣고 오너와 퍼미션을 변경한 후 부팅 시 자동으로 실행하도록 만듭니다.
sudo mv ~/cpulimit/cpulimit /etc/init.d/
sudo chown root:root /etc/init.d/cpulimit
sudo chmod 700 /etc/init.d/cpulimit
sudo update-rc.d cpulimit defaults
  이제 아래의 명령어들을 통해 서비스를 제어할 수 있습니다.
sudo service cpulimit status   # cpulimit 데몬의 실행 여부 확인
sudo service cpulimit start    # cpulimit 데몬 실행
sudo service cpulimit stop     # cpulimit 데몬 종료

  마지막으로 지금까지 설치한 스크립트들은 아래의 명령어들을 통해 삭제할 수 있습니다.
sudo service cpulimit stop           # 삭제 전 cpulimit 데몬 중지
sudo update-rc.d -f cpulimit remove  # 심볼릭 링크 삭제
sudo rm /etc/init.d/cpulimit         # 데몬 제어 스크립트 삭제
sudo rm /usr/bin/cpulimit_daemon.sh  # 데몬 스크립트 삭제
  만약 cpulimit 프로그램과 gawk 프로그램까지 삭제하려면 아래의 명령어들을 실행합니다.
sudo apt-get remove cpulimit
sudo apt-get remove gawk
2010/10/30 16:04 2010/10/30 16:04
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : All about Linux swap space

  이번 글은 스왑(Swap) 공간에 대한 기본 이론과 몇몇 기본적인 명령어들을 알아보는 내용입니다.


more..



more..



more..



more..



more..



more..

2010/10/28 14:30 2010/10/28 14:30
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : How to Compile the Linux Kernel

  리눅스 초기에는 커널 컴파일이 거의 필수였습니다만 요즘 시대에는 특이한 상황이 아니라면 커널 컴파일을 직접 할 필요가 없습니다. 시스템을 극한으로 튜닝하거나 신기능의 베타 테스터를 자처하고 싶을 때나 필요합니다. 하지만 안 해도 되는 걸 해보는 삽질 정신이 리눅서의 기본이 아니겠습니까! 그래서 이번에는 커널 컴파일에 대해 알아보겠습니다. 참고로 왠만하면 이걸로 보는 이득보다는 시간이나 스트레스 적으로 손해보는 게 더 클테니 그건 미리 감수하시는 것이 좋을 겁니다.

  그리고 매우 중요한 한 가지. kernel.org의 커널 소스와 각종 배포판을 통해 얻을 수 있는 커널 소스는 버전이 같아도 같은 게 아닙니다. 대부분의 배포판에서는 자기들이 고치고 최적화한 커널을 올리기 때문입니다.

  먼저 커널을 '컴파일'해야 하기 때문에 컴파일러와 각종 라이브러리가 필요합니다. CentOS나 페도라 같은 경우에는 아래와 같은 커맨드를 통해 필요한 개발 도구를 모두 설치할 수 있습니다.
yum groupinstall "Development Tools"
yum install ncurses-devel
yum install qt-devel
yum install unifdef
  이제 커널 소스 파일을 받습니다. 그리고 압축된 소스 파일을 풀어넣을 디렉토리를 만듭니다. 보통은 /usr/src이나 /usr/src/kernels 디렉토리에 파일을 다운로드 받은 후 압축을 해제합니다. 그러면 커널 버전명으로 서브 디렉토리가 만들어지면서 그 안에 소스 파일들이 풀립니다. 참고로 커널 컴파일은 일반 유저의 권한만 필요하지만 설치를 할 때는 루트 권한이 필요하고 /usr 디렉토리를 조작할 때도 루트 권한이 필요하다는 것을 알아두시기 바랍니다. 일단 /usr/src 디렉토리에 커널 소스 압축 파일을 다운로드 받아 아래와 같이 압축을 해제합니다.
tar -xvfj linux-2.6.35.4.tar.bz2
  이제 커널에 어떤 기능을 넣을지, 어떤 것들을 모듈로 컴파일할지 정해야 합니다. 디렉토리 안으로 들어가서 'make config' 명령어로 환경 설정을 할 수 있는데 이건 뭐 한 번 잘못 고르면 뒤로도 못 가는 피곤한 방법이라 보통은 'make menuconfig'로 ncurses(위에서 'yum install ncurses-devel'로 설치)를 통해 콘솔에서 나름 GUI로 설정하거나 X윈도우를 사용할 경우 'make xconfig'로 qt(위에서 'yum install qt-devel'로 설치)를 통해 화려한(?) GUI 인터페이스로 설정할 수도 있습니다. 아직 실행은 하지 마세요.

  문제는 위의 명령어를 통해 이제부터 할 '설정'인데 커널 컴파일에서 가장 중요한 부분이지만 가장 조언할 방법이 없는 부분입니다 -_-; 자신의 머신에 맞는 항목을 '적절히' 고르면 됩니다. 참 쉽죠? -_-;; 무한의 문서 참조와 삽질이 필요한 부분입니다. 일단 상당한 수준의 숙련자가 아닌 이상 앵간하면 자신의 배포판이 사용하는 디폴트 설정 상태에서 설정을 시작하는 것이 좋은데 그러려면 자신의 배포판의 저장소에서 커널 소스를 받은 후 그 속에 있는 설정 파일을 복사해서 가져오면 됩니다. 소스는 CentOS의 경우 대충 아래처럼 받아 설치하면 됩니다. 버전은 최신 버전을 찾으면 되겠죠?
rpm -i http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.18-194.11.3.el5.src.rpm
  위 방법으로 설치하면 /usr/src/kernels 디렉토리 밑에 커널 버전명으로 디렉토리가 생깁니다. 디렉토리 안에 들어가보면 '.config' 파일이 있습니다. 이 파일을 아까 작업하던 디렉토리에 복사합니다. 이제 'make menuconfig'나 'make xconfig'를 실행해서 설정을 합니다. 'make config'는 무리니까 시도하지 마시고...이제 '적절히' 설정을 한 후 저장을 하고 나옵니다.

  이제 대망의(?) 컴파일 시간입니다. 'make' 명령어를 실행합니다. 한참(아마도 1시간 이상) 걸릴테니 다른 볼일이라도 봅시다. 물론 다른 컴퓨터에서요. CPU가 듀얼 코어 이상인 경우에는 더 빠르게 컴파일하는 방법이 있습니다. 'make -j#' 형식(#에는 CPU 코어의 숫자)으로 명령을 내리면 다수의 코어로 작업을 하여 컴파일을 빨리 끝낼 수 있습니다.

  컴파일이 끝나면 모듈과 커널을 설치(복사)하기 위해 아래의 명령어를 실행합니다. 참고로 루트 권한이 필요합니다.

make modules install
make install

  이제 grub.conf 파일을 확인합니다. 참으로 다행인 건 위의 'make install' 명령어로 새로 컴파일해서 복사한 커널이 grub.conf 파일에 적절히 적용된 상태라는 겁니다. 일단 아래의 샘플을 봅시다.
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.35.4)
        root (hd0,0)
        kernel /vmlinuz-2.6.35.4 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.35.4.img
title CentOS (2.6.18-194.11.3.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.11.3.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-194.11.3.el5.img
title CentOS (2.6.18-194.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-194.el5.img
  참고로 위의 항목 중 새로 추가된 것이 2번째에 있는 'CentOS (2.6.18-194.11.3.el5)' 항목입니다. 2번째 줄에 있는 'default=1'은 부팅 시 디폴트로 선택되는 커널을 가리키는데 주의할 점은 0이 첫 번째 항목이라는 겁니다. 그러므로 1이면 2번째 항목인 'CentOS (2.6.18-194.11.3.el5)' 항목을 가리키고 있는 겁니다. 기존의 커널과 새로 컴파일한 커널 중 디폴트로 지정할 커널을 선택합시다.

  원문 리플에 재미있는 트릭이 있는데 만약 원격에서 커널을 컴파일하고 설치해서 테스트를 하는 중일 경우 부팅에 실패하면 직접 머신에 가서 리붓을 하기 전까지 대책이 없게 됩니다. 이런 경우를 대비한 트릭인데 먼저 grub.conf 파일에서 'default' 값을 새로운 커널이 아닌 현재 커널로 설정합니다. 그리고 나서 아래처럼 grub 명령어를 실행한 후 다음 부팅 때 1번만 새로 컴파일한 커널로 부팅하도록 만듭니다.
# grub
grub> savedefault --default=0 --once
grub> quit
  당연히 'default=0' 부분의 0은 grub.conf 파일에 새로 추가된 커널 항목의 순번으로 적절히 고쳐서 적습니다. 그리고 나서 grub.conf 파일을 열고 새로 추가된 커널 항목에서 커널 이미지 파일을 지정하는 줄('kernel'로 시작하는 줄) 끝에 'panic=30'이라는 옵션을 추가합니다. 이러면 선택한 커널을 로딩하기 시작한 후 30초가 지나도 부팅이 완료되지 않을 경우 자동으로 리붓이 됩니다. 즉, 커널 패닉 등의 이유로 부팅에 실패해도 먹통인 채로 있지 않고 자동으로 리붓을 하게 되는 것이죠. 그런데 위에서 다음 1번만 새로운 커널로 부팅하도록 해놨으므로 문제가 생겨 리붓을 하게 되면 예전 커널을 로딩하여 정상 부팅이 되는 것이죠. 참 잔머리들이 좋은 것 같습니다.


2010/10/27 21:49 2010/10/27 21:49