728x90
반응형
Local Repo 설정


- DVD로 repository 설정

1. 네트워크가 아닌 DVD에서 직접 패키지를 다운로드하는 방식으로 설치 속도가 네트워크에 비해 월등히 빠름

2. rpm으로 설치중 패키지가 없는 상태에서 네트워크 연결도 안된 상태일때는버전에 맞는 DVD를 넣고 DVD 내부의 패키지를 추출해 설치

3. yum은 /etc/yum.repos.d/ 내부의 파일들을 참조하여 경로를 찾아가 설치하려는 패키지를 찾고 그 패키지와 의존성이 있는 패키지들을 찾아 함께 설치

4. /etc/yum.repos.d/ 디렉토리로 이동한 후 기존 repo 파일은 별도의 디렉토리에 보관한 후 dvd.repo 파일 생성 후 아래와 같이 작성

5. [network]식별자의 경우에는  DVD에 없는 패키지는 [network]식별자에 의해 지정된 경로에서 패키지를 다운로드하게 하기위해 작성해 둔 것이다. 



설정 방법

1. DVD를 삽입후 

# mount /dev/sr0 /mnt

          OR

#mkdir cdrom -> 마운트할 디렉토리 생성
#mount /dev/cdrom /cdrom -> /dev/cdrom의 DVD를 /cdrom 디렉토리에 mount

- /mnt 나 /media에 자동으로 인식될경우가 있으므로 확인



2. /home 디렉토리 안에 local-repo 디렉토리 생성 후 Packages를 복사할 Packages 디렉토리 생성


3. DVD내의 패키지들을 로컬 디렉토리로 이동 후 확인
#cp /media/RHEL-6.6\ Server.x86_64/Packages/* /home/local-repo/Packages/



4. rpm 설치 명령어를 통한 deltarpm -> python-deltarpm -> createrepo 패키지를 설치 (repodata를 생성하기 위한 패키지 설치 작업)
#rpm -ivh deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
#rpm -ivh python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
#rpm -ivh createrepo-0.9.9-22.el6.noarch.rpm 




5. repodata 생성 
# createrepo ../ -> 패키지가 들어있는 디렉토리에서 repo를 생성해야한다.(../은 최상위 디렉토리로부터 현재 디렉토리를 지정)



6. repodata가 생성되었는지 확인 후 



7. repomd.xml 파일이 생성되었는지 확인



8. 여기까지 확인이 되었으면 /etc/yum.repo.d/ 로 이동하여 repositories를 생성 

# vi local.repo



[Local-RHEL6.6]
name=rhel 6.6 local repository
baseurl=file:///home/local-repo/
enabled=1
gpgcheck=0



9. #yum clean all 명령어를 통한 yum data 삭제



10. #yum repolist 명령어를 통한 repolist 불러오기



위와 같이 패키지 정보를 불러온다면 정상적으로 local repo 생성완료



반응형

'Linux' 카테고리의 다른 글

Linux mount and umount(마운트&언마운트)  (2) 2018.08.08
Linux SCP  (0) 2018.08.08
Linux GRUB 명령어  (0) 2018.08.08
Linux 메모리 사용 퍼센트로 확인  (2) 2018.08.08
Linux journalctl (RHEL 7)  (0) 2018.08.08
728x90
반응형
root (x,y)

root 명령은 지정한 파티션을 시작위치로 인식하게 하는 명령어로 지정한 장치를 root device로 인식
grub> root (hd0,0)


kernel

부팅에 사용할 커널 이미지 파일의 경로를 지정하는 명령어이다.
시스템 부팅에 사용할 커널 이미지를 지정하는 명령으로 지정한 커널 뒤쪽으로
boot 파라미터, root 파티션의 device 명을 지정할 수 있다.

grub> root (hd0,0)
grub> kernel /vmlinuz-2.6.269.x.x.x ro root=/dev/sda3

대부분의 명령은 root 명령을 통해서 Device를 지정한다.


blocklist 파일경로

파일에 지정된 blocklist 를 확인하는 명령이다. 파일경로를 지정해줄때 바로 위에 있는
root 명령으로 그 Deivce를 지정해줘야 한다.

grub> root (hd0,0)
grub> blocklist /dev/sda5
(hd0,0)234234+1

이런 형식으로 디스크의 블록 번호가 출력된다.


boot

지정된 Device의 파티션에서 Kernel 명령어로 지정된 커널로 부팅을 하는 명령이다.
그렇다면 먼저 root 명령으로 특정 device를 지정해줘야 한다.
그리고 kernel 명령으로 사용할 커널을 지정해 주고 boot 명령을 사용

grub> root (hd0,0)
grub> kernel /vmlinuz-2.6.269.x.x.x ro root=/dev/sda3
grub> boot

boot 명령이 실행된 후에는 root 명령과 kernel 명령으로 설정한 정보로 부팅을 시작한다.


cat 

Shell에서 사용하는 cat과 동일한 명령어이다. 하지만 grub에서 사용하기 위해서는
root 명령으로 해당 파일이 존재하는 device 파티션을 지정해줘야 한다.

grub> root (hd0,0)
grub > cat /grub/grub.conf


chainloader

makeactive에서 부팅 가능하도록 지정한 파티션의 첫번째 섹터부터 읽어들여 부팅을 시작하도록 하는 명령이다.
예를 들어 chainloader +1 은 makeactive로 지정된 부팅 가능한 파티션의 첫번째 섹터부터 읽어서 부팅하라는 의미이다.
--force 옵션을 사용하면 부트로더의 존재유무와는 관계없이 강제로 로드 시킨다.


clear

Shell에서 사용하는 clear 명령과 동일


configfile /파일경로

지정한 파일을 grub의 설정파일로 로드하는 명령이다. 마찬가지로 root 명령을 우선적으로 써준다.

grub> root (hd0,0)
grub> configfile /grub/grub.conf

위처럼 configfile 명령을 사용하여 지정한 설정파일을 로드할 수 있다.
기존에 사용하던 grub.conf 파일을 configfile 명령어로 로드한다면
기존에 사용하던 grub을 그대로 부팅하게 된다.


device

grub 명령모드에서만 사용가능한 명령어 이다. 지정한 드라이브를 BIOS 드라이브에 대한
실제 드라이브 장치로 지정하는 명령어이다.


displayapm

APM BIOS정보를 출력한다.




displaymem

물리적 RAM이 설치되어 있는 시스템의 주소에 대한 MAP을 표시해주는 명령어이다.
ELSA 메모리 인터페이스 존재유무, 메모리 정보등에 대해서 자세하게 출력한다.


find

Shell에서 쓰던 find 명령과 동일한 명령이다.


geometry

지정한 device 드라이브에 대한 정보를 출력해주는 명령이다.
디스크 장치명을 지정하면 그 디스크에 대한 정보를 출력한다.
섹터정보, 파티션별 파일시스템 타입 등

grub> geometry (장치명)

위의 형식으로 사용한다.


halt

시스템을 정지시키는 명령이다.

grub> halt

위처럼 grub 모드에서 halt 명령을 사용하게 되면 시스템은 종료되게 된다.
--no-xxx 옵션을 추가할수 있다.
xxx를 작동하지 않도록 하려면 halt --no-xxx 라고 입력해주면 된다.


hide

hidden 비트를 이용해서 지정한 파티션을 숨기는 명령이다.
hide 로 특정 파티션에 hidden 속성을 부여했다면 unhide 명령으로 hide를 풀어낼수 있다.
hide 명령으로 부트 디바이스인 (hd0,0) 에다가 hidden 속성을 줘서 숨기면
운영체제에서 디바이스를 인식하지 못하고 부팅을 하지 못하게 된다.
(Linux 로 부팅되지 않고, grub 화면으로 넘어간다)


initrd

디바이스와 커널을 지정한 채로 부팅할 때 사용할 initrd 이미지를 지정해주는 명령이다.
SCSI 를 부팅디스크로 사용할 경우에 initrd 항목이 설정되어있지 않으면 kernel panic 에
빠질수가 있다고 한다.

grub> root (hd0,0)
grub> kernel /vmliuz-x.x.x-x.x
grub> initrd /initrd-x.x.x.x-x.x.img

이 명령도 마찬가지로 root 명령을 선행해서 부트 디바이스를 지정한다.
kernel 명령을 통해서 부팅에 사용할 커널을 지정한다음
initrd 명령으로 initrd 이미지를 지정한다.
위 설명대로 디바이스와 커널을 지정한 채로 부팅될 때 사용하는 명령이다.


makeactive

루트 디스크에 존재하는 grub 의 루트디바이스를 부팅가능한 파티션으로 지정하는 명령이다.
이 명령어는 첫 번째 하드디스크의 주파티션에 한정되서 사용되는 명령


map

FROM_DRIVE 에서 지정한 드라이브를 TO_DRIVE에 지정한 드라이브에 매핑 시키는 명령어이다.
첫 번째 드라이브가 아닌 곳에 저장될수 있는 DOS와 같은 운영체제를 체인로드 하고자 할때 필요하다.

grub> md5crypt

MD5 포맷으로된 암호문자를 생성하는 명령으로 지정한 문자를 md5 로 포맷하여 출력해준다.
(Grub 암호 설정방법)


modulenounzip

module 과 같은 명령이다. 
(no un zip 과 같지만 자동압축해제가 되지 않는다.)


paper

toggle 형식으로 pager 모드를 on/off 하는 명령어이다.

grub> pager

현재모드에서 다른모드로 변하게 된다.

grub> pager on / off

모드에 상관없이 상태가 변하게 된다.


partnew

파티션의 타입,길이,시작주소 를 지정하여 주 파티션을 생성하는 명령이다.

grub> parttype

지정한 파티션의 타입을 지정해서 변경하는 명령이다.

grub> geometry (hd0,2)

grub> parttype (hd0,2) 0x&&

(어떤 파티션을 바꾸기전 먼저 어떤 파티션이 였는지 확인)
geometry 명령을 이용해서 partition 타입을 확인한 후
parttype 명령으로 파티션의 타입을 변경하면 된다.


quit & reboot

grub 종료와 재부


rootnoverify

grub 이 인식할 수 없는 파티션을 root device 로 지정할 때 사용하는 명령어이다.
root 명령과 비슷한 동작을 하지만 rootnoverify 명령은 지정한 파티션의
마운트 시도를 하지 않는 다는 점에서 차이가 있다.


serial

시스템에 장착되어있는 시리얼장치를 초기화하는 명령으로
이 명령어 사용시에 --unit 에는 시리얼장치로 사용되고있는 장치를 2진수로 지정한다.

--port 옵션으로 포트 번호를 지정할수가 있다.
--speed : 속도 지정을 할수 있다.


setkey

키보드 맵을 변경할수 있는 명령으로 FROM_KEY 를 TO_KEY로 매핑시키게 된다.
여기서 사용되는 key들은 알파벳, 숫자, 밑의 문자들이다.
만일 어떤 인자도 주어지지 않는다면 키매핑을 리셋하게 된다.

at, ampersand, asterisk, backquote, bar, bracketleft, backslash, backspace,
capslock, caret, doublequote, dollar, escape, exclam, numbersign, percent,
parenleft, parenright, minus, underscore, equal, plus,tab,tilde, shift, comma,
less, period, greater, slash, question, alt space,
FX (X is a digit), and delete.


setup

부트 파티션으로 생성하기 위해서 디스크를 지정하여 grub 을 설치해주는 명령


terminal

터미널 선택 명령이다. console과 serial이 모두 지정되었을 경우에는 첫번째 키가 입력된 터미널이
선택되는데, 아무런 인자가 지정되지 않았다면 현제 셋팅값을 출력하게 된다.

--no-echo : 입력된 문자에 대해 echo가 되지 않도록합니다.
--timeout : 지정되면 적어도 지정한 초만큼 기다립니다.
--lines : 최대행 수를 지정합니다
--silent : 가능한 메시지를 보여주지 않도록합니다.


terminfo

터미널의 성능을 결정하는 명령이다. 즉 터미널의 이름과 SEQ, cursor address, 입력표준모드와
출력표준모드를 지정할수 있다. 아무런 옵션도 사용하지 않고 terminfo 만 실행된다면 현재 설정내용이 출력된다.


testvbe

VESA BIOS EXTENSION, 즉 VBE를 지정한 MODE 로 테스트하는 명령이다.
테스트 실행을 시키면 계속적으로 테스트를 하게되며 테스트를 끝내려면
아무키나 누르면 다시 이전상태로 돌아온다.
이 명령어와 관련된 명령어는 vbeprobe 로서 VBE정보를 확인하는 명령이다.


unhide

파티션 타입 코드에 hidden 비트 속성을 줬던 hide 명령을 해제하는 명령


uppermem

GRUB 의 KBYTES에서 지정한 Kbytes 만큼 상위메모리로 설치되어있다고 인식하도록하는 명령어


vbeprobe

vbe 정보를 확인하는 명령이다.
옵션으로 mode가 지정된다면 이 명령어는 지정한 mode에 대해서만 보여준다.

옵션이 없다면 가능한 모든 vbe모드에 대한 정보를 출력
반응형

'Linux' 카테고리의 다른 글

Linux SCP  (0) 2018.08.08
Linux yum local repo 추가  (0) 2018.08.08
Linux 메모리 사용 퍼센트로 확인  (2) 2018.08.08
Linux journalctl (RHEL 7)  (0) 2018.08.08
Linux root Password 변경 (RHEL7-가상화)  (0) 2018.08.08
728x90
반응형
메모리 사용률 확인


◆ sar

# sar -r 1




◆ free

# free




◆ top

# top -n1 | grep Mem:




◆ meminfo

# cat /proc/meminfo | grep Mem









메모리 사용률 (명목 vs 실질)


◆리눅스는 유휴 공간을 캐시 영역으로 잡아두는 습성이 있다. 
(남는 메모리를 최대한 캐시로 활용하면 성능향상에 도움 /  윈도우도 마찬가지이지만 윈도우는 임시 캐시 영역을 유휴 공간을 표시해주는 것으로 추정)

◆실질적인 의미의 메모리사용률을 구하려면 캐시 영역도 유휴 메모리로 봐야 한다.

◆명목메모리 사용률 = ( total - free ) / total

◆실질메모리 사용률 = ( total - free [free 명령어 실행결과 2행에 있는 free 값(버퍼+캐시 포함)] ) / total = ( total - free - buffers - cached) / total




◆ 스크립트

MEM_TOTAL=`free | grep ^Mem | awk '{print $2}'`

MEM_FREE1=`free | grep ^Mem | awk '{print $4}'`

MEM_FREE2=`free | grep ^-/+ | awk '{print $4}'`

MEM_NOMINAL=`echo "100-(100*$MEM_FREE1/$MEM_TOTAL)" | bc -l`

MEM_ACTUAL=`echo "100-(100*$MEM_FREE2/$MEM_TOTAL)" | bc -l`

echo NOMINAL=${MEM_NOMINAL:0:5}% ACTUAL=${MEM_ACTUAL:0:5}%








메모리 사용량순 프로세스 보기


◆ RSS(Resident set size) : 물리 메모리를 실제 점유하고 있는 크기 
(가상메모리 크기와는 큰 차이가 있을 수 있다)

◆ ps -ef

# ps -ef --sort -rss






◆ ps -eo (메모리 사용량 표시 상위 10개)

# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 11








Swap 메모리 사용량순 프로세스 확인


◆ ps

# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -size | head -n 11




◆ top





반응형

'Linux' 카테고리의 다른 글

Linux yum local repo 추가  (0) 2018.08.08
Linux GRUB 명령어  (0) 2018.08.08
Linux journalctl (RHEL 7)  (0) 2018.08.08
Linux root Password 변경 (RHEL7-가상화)  (0) 2018.08.08
Linux root Password 변경 (RHEL7)  (0) 2018.08.08
728x90
반응형
journalctl 이란?


- systemd의 서비스 로그를 확인할 수 있다.

- systemd-journald.service에 의해서 systemd의 정보들을 분석한다.


옵션

-a : 표시할 수 없는 문자가 있거나 매우 긴 경우에도 모든 Log 내용을 출력

-b : 마지막 부팅 후의 Log만 출력

-r : 최신항목이 먼저 표시되도록 역순으로 출력

-c : 커서가 지정한 저널의 위치부터 Log 표시를 시작

-f : 가장 최근 Log만 표시하고 새롭게 추가되는 Log는 계속 출력

-k : 커널 메시지만 출력 (dmesg랑 같음)

-q : 일반 사용자로 실행될 때 접근할 수 없는 시스템 저널에 관한 경고메시지를 표시하지 않음

-u : unit으로 systemctl list-units에서 출력되는 첫번째 항목

-p : 메시지의 우선순위로 log level을 의미 (숫자나 문자열을 지정)

emerg=0, alert=1, crit=2, err=3, warning=4, notice=5, info=6, debug=7
-o : Log 출력 형식을 설정
  1. short : 기본값으로 syslog파일의 형식과 동일하다. 한 행에 하나의 Log만 출력
  2. short-iso : short와 비슷하지만 ISO 8601의 시간 형식으로 출력
  3. short-precise : short와 비슷하지만 마이크로 초 단위로 시간 출력
  4. short-monotonic : short와 비슷하지만 단조로운 시간 형식으로 출력
  5. verbose : 전체 Log를 모두 자세하게 출력
  6. export : Log내용을 내보낸다. (백업 및 전송에 적합한 바이너리 스트림으로 직렬화)
  7. json : 한줄에 하나씩 JSON 데이터 구조로 형식화
  8. json-pretty : JSON 데이터 구조로 형식화 하지만 여러줄로 형식을 지정하여 사람이 읽을 수 있게 한다.
  9. json-see : JSON 데이터 구조로 형식화 하지만 Server-Sent Events에 적합한 형식으로 한다.
  10. cat : 매우 간결한 출력을 생성하며 메타 데이터가 없고 Log만 표시하며 시간은 표시하지 않음

-l, --no-full, --full : 출력되는 Log의 필드를 줄일때 사용, 기본값은 전체 필드를 표시하여
사용자가 해당 필드를 붙이거나 자를 수 있도록 한다. -l / -full 옵션은 이전 옵션으로 사용되지 않는다.

_UID= 33 : 33번 UID를 가진 프로세스에 대한 Log를 출력

--disk-usage : 저널 파일의 디스크 사용량을 표시 (압춘된 모든 더널 파일과 사용중인 저널 파일의 합계를 표시)


설정파일

/etc/systemd/journald.conf
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=    -> journal log 파일의 최대 Size를 지정
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month  -> journal log 파일의 최대보관일수를 지정
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg





사용법


마지막 부팅 후 로그 보기

# journalctl -b


오늘 날짜 로그 보기

# journalctl --since=today


특정 기간별 로그 보기

# journalctl --since "2017-05-25 00:00:00" --until "2017-05-30 10:30:00"

2017년 5월 25일 0시부터 2017년 5월 30일 오전 10시 30분까지의 Log 출력


특정 서비스 데몬 로그 보기

# journalctl -u sshd


특정 이벤트 속성 조회

# journalctl -p crit

critical 속성을 가진 이벤트만 출력


특정 서비스데몬 및 속성과 날짜 로그 보기

# journalctl -u libvirtd --since=yesterday -p err

어제부터의 libvirtd 데몬의 Log 중 error만 출력


Error 로그 자세히 보기

# journalctl -p err -o verbose

Error log에 대해 자세하게 출력


특정 이벤트 조회

# journalctl /sbin/crond


밑에서부터 로그 보기

# journalctl -f





journalctl이 느릴때


- BTRFS로 포맷된 파티션에 Arch Linux를 설치해 사용중이라면 journalctl의 속도가 늦려지는 현상을 겪을 수 있다.
이는 로그를 저장하는 파일 데이터베이스에 디스크 단편화가 심하게 되어 일어나는게 원인이다.
따라서 단편화 제거를 하면 개선되는 것을 확인 할 수 있다. 


1) Log의 크기를 확인

# journalctl --disk-usage


2) 로그를 저장하는 파일 데이터베이스에 단편화를 확인

# filefrag /var/log/journal/*/*


3) btrfs 명령을 사용하여 단편화를 제거

# btrfs fi defrag -v -f -clzo /var/log/journal/*/* 


반응형

'Linux' 카테고리의 다른 글

Linux GRUB 명령어  (0) 2018.08.08
Linux 메모리 사용 퍼센트로 확인  (2) 2018.08.08
Linux root Password 변경 (RHEL7-가상화)  (0) 2018.08.08
Linux root Password 변경 (RHEL7)  (0) 2018.08.08
Linux nfs 설정  (0) 2018.08.08
728x90
반응형
RHEL 7 and CentOS 7 Version Virtual Mode root Password Change

1.

2.

3.

4.

5.

6.

7.

8.

9.





반응형

'Linux' 카테고리의 다른 글

Linux 메모리 사용 퍼센트로 확인  (2) 2018.08.08
Linux journalctl (RHEL 7)  (0) 2018.08.08
Linux root Password 변경 (RHEL7)  (0) 2018.08.08
Linux nfs 설정  (0) 2018.08.08
Linux Memory Slab 관리  (0) 2018.08.08
728x90
반응형
1. 



2.



3. 해당 부분을 변경



4. rhgb quiet -> init=/bin/sh 또는 init=/bin/bash    



5. mount -o remount,rw / 입력  


6. root password 변경   


7. touch /.autorelabel 입력 (SELinux 컨텍스트 부팅 후 복구될 수 있도록 입력하는 것)


8. 종료 후 리부팅  



반응형

'Linux' 카테고리의 다른 글

Linux journalctl (RHEL 7)  (0) 2018.08.08
Linux root Password 변경 (RHEL7-가상화)  (0) 2018.08.08
Linux nfs 설정  (0) 2018.08.08
Linux Memory Slab 관리  (0) 2018.08.08
Linux strace  (0) 2018.08.08
728x90
반응형
NAS란?


- 분산처리환경의 RPC를 사용하는 파일 및 자원 공유 시스템

- TCP/IP 네트워크를 통한 서버/클라이언트 구조

- Unix 운영체제간의 파일 공유

- 보안에 취약하므로 주의해서 사용


NFS 관련 데몬

  1. portmap & rpc.bind : NIS,NFS등 RPC(Remote Procedure Call)연결에 관여하는 데몬
    (RPC : 다른 주소공간에서 서브루틴이나 프로시저를 실행시키기 위한 기술, RPC를 이용하면 로컬에서 실행하는 것같은 결과를 받음)
  2. nfs : nfs 서비스를 구동하기 위한 데몬
  3. rpc.nfsd : rpc 요청처리와 서버측에서 rpc.mountd에 의해 마운트되면 클라이언트는 rpc.nfsd로 서버에 요청 처리와 명령 실행등을 포함한 작업을 수행
  4. rpc.mountd : 클라이언트가 마운트를 요청하면 /etc/exports 파일 설정에 따라 마운트 요청을 처리
  5. rpc.statd : rpc.rockd와 함께 작동하며 파일잠금 및 해제와 비정상적인 종료시 복구를 담당
  6. rpc.lockd : 파일 잠금을 통해 클라이언트에서 여러 사용자가 한 파일을 수정하는 것을 방지
  7. rpc.rqoutad : NFS파일 시스템을 마운트한 사용자에게 quota를 처리
  8. netfs : samba, nfs, ncp 등을 마운트 하거나 언마운트 해주는 데몬

  • NFS 서비스는- nfsd- rpc.mountd- rpc.statd- rpc.rockd- rpc.rquotad
  • NFS 서버는- nfsd- rpc.mountd- rpc.statd- rpc.lockd 데몬이 작업
  • NFS 클라이언트는- rpc.statd- rpc.rockd- rpc.rquotad


NFS 관련 패키지

  1. nfs-utils-1.0.8.rc2-4.FC5.2
  2. nfs-utils-lib-1.0.8-3.1
  3. system-config-nfs-1.3.19-1


NFS 데몬 실행

Server : rpcbind -> nfs -> nfslock 순으로 데몬 실행
Clinet : rpcbind -> nfs 순으로 데몬 실행

NFS 서버 설정

/etc/exports
- NFS서버의 주요 설정파일
- rpc.mountd, rpc.nfsd는 이 파일에 설정에 따라 구동

1) 형식
[디렉토리]     [클라이언트] (option)

Options
ro : 읽기 전용 모드
rw : 읽기 쓰기 모드
root_squash : 클라이언트의 root를 서버의 nobody 권한으로 설정
no_root_squash : 클라이언트의 root를 서버의 root 권한으로 설정
insecure : 인증되지 않은 엑세스도 가능
sync : 클라이언트가 파일 쓰기 완료 후 디스크 동기화

2) NFS로 공유하고자 하는 폴더 생성 (NFS 서버)
# mkdir /nfsdata

3) 환경설정 파일 수정
# vi /etc/exports
/nfsdata 10.10.1.100(rw) -> 10.10.1.100은 공유할 클라이언트 IP

- Example - 

  • nobody 권한 : 시스템 계정으로 로그인이 되진 않지만 아파치 웹 서버가 필요로 하는 계정이다. 웹 서버(httpd)가 메모리로 올라갈때 root 권한으로 동작하는 것이 아니라 nobody 권한으로 작동하므로 nobody 계정이 없을 경우 메모리에 올라갈 수 없다.

4) NFS 시작 (NFS 클라이언트)
# mkdir /client

mount -t nfs 10.10.1.100:/nfsdata /client

umount /client -> 마운트 해지

5) NFS 명령어

# mount -t nfs [NFS_server:/dir] [NFS_client_dir]
NFS클라이언트에서 NFS 서버의 자원을 마운트 할때 사용

Ex) mount -t nfs 10.10.1.100:/nfsdata /nfsdata

# showmount [host] [option]
# showmount -e
현재 마운트 되어 있는 NFS를 확인

# exportfs [option]
NFS상의 exporting 정보를 출력하거나 설정변경

option
-a : 공유를 허가한 모든 디렉토리 의미
-r : 공유를 허가한 디렉토리를 다시 export
-u : 공유 디렉토리를 export 리스트에서 제거
-i : /etc/exports 파일 무시하고 설정
-v : export 정보 출력

/var/lib/nfs/rmtab
NFS서버에 현재 마운트된 사용자 정보 출력
사용법
    # cat /var/lib/nfs/rmtab

/etc/fstab에 등록

해당 NFS를 부팅할때 불러오고 자동으로 불러오고 싶으면 /etc/fstab에 넣어주면 된다.
# vi /etc/fstab
10.10.1.100:/nfsdata    /client        nfs    defaults,_netdev 0.0
이렇게 설정하면 되는데 계속 nfs계속 연결시도 하는데 일정시간동안만 시도하고 없을경우 시도를 멈추게 하려면
defaults 대신에 timeo=25,intr 해주면 25초간만 확인하고 넘어가면 그냥 부팅된다.

10.10.1.100:/nfsdata    /client nfs    timeo=25,intr 0.0

/etc/fstab에서 NFS 마운트 옵션
rsize : NFS서버로부터 읽어 들이는 바이트수 지정 기본값 1024byte
wsize : NFS서버에 기록할 때 사용하는 바이트수 기본 지정값 1024byte
timeo : 클라이언트에서 타임아웃이 발생되고 나서, 다시 재전송 요구를 보낼때 시간
retrans : 재정송 횟수 지정
port : NFS서버에 연결시 사용하는 포트번호 지정
fg : NFS서버에 타임아웃이 발생되면 즉각 접속 중지
intr : 인터럽트 허용
hard : 타임아웃 발생시 "server not recording" 에러메시지 표시후 계속 재시도
soft : 타임아웃 발샐시 I/O 에러 표시
※ _netdev : 네트워크에 연결 후 Mount를 실행하라는 옵션
(네트워크연결보다 System의 Mount가 우선적으로 일어나기떄문에 nfs 서버에 연결이 안되어 부팅대기현상이 발생)





구축 예제


- 서버측 -

# service rpcbind start
# service nfs start
# service nfslock start

# rpcinfo -p

rpc.bind 또는 portmapper와 nfs가 보인 정상 실행중

# vi /etc/exports
/home/nfs 192.168.0.5(rw)

# service nfs restart

# showmount -e

# exportfs


- 클라이언트 -

# service rpcbind start

# service nfs start

# rpcinfo -p

# mount -t nfs 192.168.0.5:/home/nfs /home

# chkconfig --level 2345 rpcbind on

# chkconfig --level 2345 nfs on

# vi /etc/fstab

192.168.0.5:/home/nfs    /home    nfs    defaults,_netdev 0 0

# mount -a
으로 fstab 정상 확인

# showmount -e

# exportfs
반응형

'Linux' 카테고리의 다른 글

Linux root Password 변경 (RHEL7-가상화)  (0) 2018.08.08
Linux root Password 변경 (RHEL7)  (0) 2018.08.08
Linux Memory Slab 관리  (0) 2018.08.08
Linux strace  (0) 2018.08.08
Linux Memory 재할당  (0) 2018.08.08
728x90
반응형
리눅스 커널은 기본적으로 메모리가 유휴 상태로 있는 것을 선호하지 않는다. 프로세스에 할당되어 있지 않은 메모리는 커널이 사용을 하고 커널은 이런 메모리를 주로 캐시용도로 사용한다.


- 캐시메모리 종류

1) page cache : 리눅스는 물리적인 저장/통신 장치와 데이터를 주고 받을 때 먼저 메모리에 적재한 후 데이터를 주고 받는데 나중에 동일한 데이터에 대한 접근을 할 경우 메모리에서 바로 가져오도록하여 I/O 성능을 높이기 위함이다. 이때 Page라는 단위로 관리하는데 이를 page cache라고 한다.

2) inode, dentry cache : 파일의 자료구조를 의미한다. 보다 빠른 데이터 접근을 위해 Slab의 자료구조에 추가되어 사용, dentry는 경로명 탐색을 위한 cache 역할도 수행


※ Slab

Slab Allocator라고 하며 일종의 자원 할당자 중 하나로 4KB의 크기를 가진 Page로 데이터를 저장하고 관리할 경우 발생하는 단편화를 최소화 하기 위해 만들어졌다.
리눅스 커널은 자료구조로 Slab을 사용하고 있으며 /proc/meminfo에서 리눅스 커널이 사용하는 cache크기(Slab : 349364KB) 를 의미한다.

리눅스 커널에서 커널과 디바이스 드라이버, 파일시스템 등은 영구적이지 않은 데이터(inode, task 구조체, 장치 구조체 등)들을 저장하기 위한 공간이 필요한데 이것이 Slab 구조하에 관리된다. /proc/meminfo에서 출력되는 Slab 값은 이러한 데이터들의 메모리상 크기를 의미하기 때문에 커널 cache라고 표현한다.






프로세스 메모리를 제외한 유휴 메모리가 없는 경우


프로세스가 사용하는 메모리를 제외한 남은 메모리는 /proc/meminfo 파일의 Slab에서 찾을 수 있다. Slab의 크기가 크다면 커널이 Slab 자료구조에 계속해서 cache 데이터로 담고 있다는 것이다. 이는 동작하고 있는 프로세스의 성격과 관련이 높다. 해당 프로세스의 주 작업 패턴이 특정 파일을 대량으로 생성하고 이 데이터를 가공처리하는 작업을 반복하며 작업과정에서 생성, 삭제되는 파일이 많을 경우이다.

리눅스 커널은 파일시스템의 성능을 나아가 시스템의 성능을 개선하기 위해 inode와 dentry를 메모리에 cache한다. 하지만 파일을 빈번하게 생성/삭제 하거나 대량의 파일을 다루는 시스템의 경우 해당 파일을 자주 재활용(생성/기록 후 데이터를 지속적으로 접근하여 읽음)하지 않는다면 cache에 메모리를 사용하기 보단 I/O를 위한 버퍼 또는 프로세스에 할당되어 활용하는 편이 더 좋다.

- Linux Slab 자료 구조의 상태를 살펴 볼 수 있는 명령어 : slabtop 
해당 명령어는 inode와 dentry cache의 현재 크기를 알 수 있다.



cache 메모리 반환


vfs_cache_pressure을 이용하여 리눅스 커널에게 cache 데이터를 반환하도록 한다.

- vfs_cache_pressure란?
리눅스 커널의 vm 구조와 관련된 파라미터로 vfs_cache_pressure라는 것이 존재한다. 이 파라미터는 inode 오브젝트에 대한 cache로 사용된 메모리를 반환하는 경향의 정도를 지정하는 항목이다. (기본값은 100)
이 값을 0으로 설정하게 되면 리눅스 커널은 오브젝트에 대한 cache를 반환하려고 하지 않을것이며 시스템은 OOM(Out of Memory) 상태가 발생한다.
▷ OOM : 프로세스의 메모리 크기가 특정 값 이상이 되면 kill 통해 시스템이 강제로 죽이는 기능
이 값을 100 이상으로 설정하면 리눅스 커널은 오브젝트에 대한 cache를 가급적 반환한다. (cache를 보관하려하지 않음) 이를 이용하면 inode와 dentry cache를 줄일 수 있다.

100이상의 값을 설정하면 되는데 10000 정도로 설정할 시 문제 없이 운영이 가능하다. 

# echo 10000 > /proc/sys/vm/vfs_cache_pressure
또는
# sysctl vm.vfs_cache_pressure=10000

영구적으로 설정하기 위해서는 /etc/sysctl.conf 파일에
vm.vfs_cache_pressure = 10000
으로 설정한다.

이러한 cache에 대해 정책을 세울 수도 있는데 해당 정책은 일시적인 휘발성 효과이다.

echo 1 > /proc/sys/vm/drop_caches => Page cache를 해제
echo 2 > /proc/sys/vm/drop_caches => inode, dentry cache를 해제
echo 3 > /proc/sys/vm/drop_caches => Page, inode, dentry cache 모두 해제

3번으로 설정할 시에는 시스템이 잠시 멈출수도 있다. 해당 명령을 실행전 cache에 있는 휘발성 데이터들을 sync 명령을 통해 저장장치에 반영시켜야 한다.




반응형

'Linux' 카테고리의 다른 글

Linux root Password 변경 (RHEL7)  (0) 2018.08.08
Linux nfs 설정  (0) 2018.08.08
Linux strace  (0) 2018.08.08
Linux Memory 재할당  (0) 2018.08.08
Linux rsync  (0) 2018.08.08
728x90
반응형
strace 란?


- 어플리케이션이 사용하는 system call과 signal등을 추적하여 성능 저하를 일으키는 부분이 없는지, 에러가 나는 부분이 없는지를 확인하는데 사용하는 디버깅 툴


옵션

-s : 추적할때 화면 혹은 파일에 뿌려 줄 문자열에 대한 최대값을 설정 (이 값이 기본 값인 경우 많은 부분이 잘려서 제대로 확인할 수 없음)
-f : 여러개의 워크 프로세스 혹은 워크 스레드를 만들어서 사용하는 어플리케이션을 추적할 때 사용하는 필수 옵션
-e : 특정 시스템 콜을 추적 
Ex) strace -e open ls 또는 strace -e trace=open,read ls
-o : strace의 결과를 파일로 저장
-p : 실행중인 프로세스에 strace 실행 (프로세스의 pid 또는 명령어를 입력)
Ex) strace -p 1725
-t : 각 trace에 대한 시간정보 출력 (현재시간)
-r : 각 trace의 상대시간 출력 (trace 내의 실행 시간)
-c : 시스템 콜 통계 정보 생성 (출력 목록 중 calls는 특정 시스템 콜이 얼마나 많이 실행되었는지 출력)
 

Tip

- 소켓을 열 때 어떤 옵션을 사용하는지 (setsockopt), 연결 맺기와 끊기는 잘되는지 (connect, close), 정상적으로 컨피그 파일을 잘 읽는지 (access, read) 등을 확인



반응형

'Linux' 카테고리의 다른 글

Linux nfs 설정  (0) 2018.08.08
Linux Memory Slab 관리  (0) 2018.08.08
Linux Memory 재할당  (0) 2018.08.08
Linux rsync  (0) 2018.08.08
Linux xargs  (0) 2018.08.08
728x90
반응형
메모리 재할당이란?


리눅스 커널은 기본적으로 메모리가 유휴 상태로 있는것을 선호하지 않는다. 특정 프로세스에 할당되어 있지 않은 메모리는 커널이 사용하게 되고 주로 캐시 용도로 사용한다. 이런식으로 메모리를 사용한다면 사용가능한 메모리가 줄어들텐데 이때 사용하지 않는 메모리를 필요로 하는 다른곳에 재할당 하는것을 메모리 재할당이라한다. 주로 page cache가 반환이 되고 특정 조건이 되면 프로세스에 할당된 메모리를 회수하고 다른 프로세스에 할당하는 swapping도 발생한다. page cache는 캐시 메모리이기 때문에 회수하여도 시스템 성능에 영향이 없지만 swapping의 경우 프로세스에 할당된 메모리이기 때문에 시스템 성능에 영향을 줄 수 있다.



메모리 재할당이 발생하는 시기


프로세스로부터 메모리 할당 요청이 들어오면 커널은 FreeList에서 사용가능한 메모리 영역을 찾아서 반환한다. 이 때 사용가능한 메모리 영역이 없다면 사용하고 있는 메모리 중에 반환할 수 있는 메모리가 있는지 찾아서 반환해 준다. vm.swappiness 커널 파라미터가 이 과정에서 사용되며 이 값에 따라 page cahce에서 찾아서 반환할 것인지 다른 프로세스에 할당되어 있는 메모리를 찾아서 반환할 것인지를 결정한다.
또한 시스템 메모리가 임계치 이하로 내려갈 경우 kswapd 데몬을 통해서 메모리 반환이 일어난다. 이 임계치 값은 vm.min_free_kbytes 커널 파라미터로 관리된다.




vm.swappiness




swap tendency 계산식으로 mapped_ratio는 현재 사용중인 메모리 사용률, distress는 현재 scan 중인 메모리 영역의 priority에 따른 가중치, swappiness 는 커널 파라미터 갑이다.
mapped_ratio와 distress는 사용자가 수정할 수 없지만 swappiness는 sysctl을 통해 수정할 수 있다. 결과적으로 저 계산식의 값이 100 이상이되면 page cache를 반환하지 않고 프로세스에 할당된 메모리를 재할당한다.

※ 프로세스에 할당된 메모리를 재할당 한다고해서 active 메모리를 재할당하는것이 아닌 프로세스에 할당된 메모리중에서도 inactive 메모리를 재할당 하는데 회수된 메모리를 가진 프로세스의 메모리 영역은 메인메모리에서 지워지고 동시에 swap 영역으로 이동한다. 반환된 메모리를 가진 프로세스는 RAM을 사용하는 것이아닌 Disk의 swap 영역을 사용하게 된다는 의미이다.  

※ 리눅스 Buddy System이란?
- Buddy System은 내부적으로 11개의 Zone을 가지고 있다. 연속된 Page의 개수를 가지고 정렬하는데 1,2,4,8,16,32,64,128,256,512,1024 개로 관리한다. 즉 물리적으로 연속된 Page가 1개인지 2개인지 4개인지등을 가지고 관리한다. Buddy System이 이렇게 관리하는 이유는 8KB의 메모리 할당 요청이 들어왔을때 1개(4KB)짜리 리스트에서 2개를 주는것보다 2개(8KB)짜리 리스트에서 1개를 주는것이 더 효율적이기 때문이다.

메모리 재할당을 하기위해 shrink_active_list() 함수가 scaning 하는 메모리 존이 어디냐에 따라 distress 값이 결정된다.  처음 scaning할 때 1개짜리 존부터 1024개의 영역까지 scan하는데 1024개의 존까지 왔다면 메모리 재할당은 실패했다고 봐야한다. 그래서 distress의 값은 상당히 커진다.



만약 swappiness 값을 0으로 준다면 distress의 값이 100이 되어야 스왑을 사용하게 된다. mapped_ratio 값이 50보다는 클 수 없고 distress가 50이 되어도 swap_tendency는 100을 넘지 못하기 때문이다.
그래서 가능한 page cache를 비우고나서 스왑을 사용하도록 하게 하려면 swappiness의 값을 0으로 해주는 것이 좋다.



vm.min_free_kbytes


이 값은 kswapd가 깨어나서 메모리 재할당을 하느냐 마느냐 결정하는데 사용하는 값이다. 

※ kswapd : 커널에 의해 백그라운드로 동작하는 데몬이며 현재 남아 있는 메모리가 어느정도 이냐에 따라 page cache, dentry cache, inode cahce 등을 미리 비워두는 작업을 한다.

메모리 재할당을 할당이 실패할때만 진행한다면 시스템 성능이 낮아질 수 있기 때문에 특정 임계치 밑으로 내려가게 되면 백그라운드에서 미리 재할당을 해두어 시스템 성능을 유지할 수 있도록 도와준다.



여기서 min_pages 값이 min_free_kbytes 값이고 low_pages 는 min_free_kbytes 값의 2배, high pages는 3배를 의미한다. min_free_kbytes 값의 2배에 해당하는 값 밑으로 내려온 순간부터 kswapd가 메모리 재할당을 시작하며 min_free_kbytes 값까지 내려온다면 백그라운드 데몬이 아닌 포어그라운드 프로세스로 동작하면서 메모리를 재할당을 시작한다. 그리고 min_free_kbytes의 3배에 해당하는 값까지 재할당이 완료되면 더 이상 재할당을 하지 않는다. (min_free_kbytes의 값이 너무 낮으면 백그라운드 재할당이 제대로 되지 않고 너무 높으면 시스템에 악영향을 끼칠 수 있다. 보통 이 값은 설치된 물리 메모리의 값을 기준으로 설정되며 특별한 이유가 있지 않는 한 기본값을 수정할 필요가 없다.)



vm.vfs_cache_pressure


해당 값은 메모리 재할당 시 dentry cache, inode cache를 재할당 할 때 영향을 주는 값이다. 



위의 내용은 dentry cache 개수를 100으로 나눈 후 해당 파라미터 값을 곱하게 되는데 기본으로 설정된 100으로 계산하면 딱  사용하지 않는 dentry cache만 반환을 한다.
이 값을 크게 하면 더 많은 dentry cache, inode cache가 반환되지만 inactive list에 있는 메모리뿐만 아니라 active list에 있는 메모리까지도 반환이 되기때문에 성능에 큰 영향을 미칠 수 있다.

※ 많은 양의 파일을 열어 놓고 I/O 작업을 하는 서버들의 경우 이 값이 커서 active cache 까지 반환이 된다면 커널 내부적으로 할당과 반환을 반복하면서 무리한 CPU usage를 점유하고 커널의 행까지 일으킬 수 있다.


위의 값들 중 vm.swappiness 값을 제외하고는 수정하지 않는 것이 가장 좋다.



반응형

'Linux' 카테고리의 다른 글

Linux Memory Slab 관리  (0) 2018.08.08
Linux strace  (0) 2018.08.08
Linux rsync  (0) 2018.08.08
Linux xargs  (0) 2018.08.08
Linux Multipath Error  (0) 2018.08.08

+ Recent posts