본문 바로가기

Linux

Linux #10

데몬(Daemon)

  네트워크를 통해서 mail, database, web, dns, nis, 그리고 dhcp 등 서버 서비스를 제공하는 프로그램을 서버 서비스 데몬이라고 부른다. 서버 머신에서 구동되는 서비스 데몬들은 대부분 잘 알려진 포트(well-known port)를 열어두고 메모리에 상주하면서 클라이언트들로부터 해당 서비스의 연결 요청(포트로 구분)을 기다리다가 요청이 들어오면 클라이언트와 임의의 포트(dynamic port)로 연결해서(이를 Passive 모드라고 한다) 클라이언트가 서비스를 이용하게 한다.

  데몬에는 단독(standalone) 데몬과 많은 차일드 데몬을 거느리고 있는 슈퍼(super) 데몬 두 가지가 있는데, 필요에 따라서 단독 데몬을 슈퍼 데몬의 차일드 데몬으로 만들 수 있고, 반대로도 가능(vice versa)하다. 데몬은 대부분 httpd, sshd, 그리고 smtpd식으로서비스_d’식으로 d가 붙는다.

 

1) 단독 데몬

  단독 데몬(Standalone daemon)은 웹, 데이터베이스, 메일 서버 등 서버는 서비스 데몬마다 인스턴스(객체)를 메모리에 계속 상주시켜서 연결 요청에 대기시키고, 부가적으로 연결 소켓을 처리하는 루틴도 각 서비스마다 메모리에 대기시켜놓아야 하는 구조여서 시스템 리소스를 많이 사용한다.

=>단독 데몬은 service httpd start식으로 해당 데몬을 직접 지정해서 서비스를 시작시킨다.

2) 슈퍼 데몬

  슈퍼 데몬(Super daemon)은 단독 데몬의 비효율성을 극복하기 위해서 만들었다. 여기서는 rsync, telnet, ssh, proxy, dns, dhcp 등 각 데몬마다 인스턴스를 각각 메모리에 상주시키지 않고, 이들을 대표하는 하나의 인스턴스를 생성해서 메모리에 상주시킴으로써 시스템 리소스를 많이 사용하지 않게 했다. 이 대표 인스턴스를 슈퍼 데몬이라고 부르며 모든 차일드(하위) 데몬 서비스들을 일괄 관리한다.

  클라이언트가 자식 데몬 서비스를 요청하면 이 슈퍼 데몬이 대신 받아서 해당 서비스 데몬의 소켓을 열어서 차일드 데몬과 연결시켜주고, 자신은 다시 새로운 연결 요청을 기다리는 구조이다. 이런 슈퍼 데몬이 xinetd이다. xientd는 시스템이 부팅할 때 /etc/xientd.d 디렉터리에 자신이 관리하는 차일드 데몬 rsyncd, telnetd, sshd, ftp 등을 넣어두고 읽어 들이는데, 차일드 데몬 서비스를 내부 서비스로도 부른다.

=>슈퍼 데몬은 차일드 데몬을 별도로 지정해서 서비스를 시작시키지 않고 service xinetd start 해서 슈퍼 데몬만 시작시켜두면 외부에서 차일드 데몬 요청이 있을 때 요청 포트를 보고 슈퍼 데몬이 차일드 데몬에게 연결시켜 준다. 예를 들어 telnet인 경우 외부에서 23번 포트로 요청이 들어오면 슈퍼 데몬이 요청을 받아서 자신의 차일드 데몬인 telnet 데몬만 실행시켜서 서비스를 제공시키므로 여러 프로세스를 실행시켜 둘 필요가 없다. 따라서 메모리 소비가 줄므로 시스템의 효율이 좋아진다.

 

자주 이용되고, 리소스를 많이 사용하는 서비스는 단독 데몬으로 만들어 두고,

=>Mail, Database, 그리고 Web 서비스 등

자주 사용되지 않고, 리소스도 적게 사용하는 서비스는 슈퍼 데몬의 차일드 데몬으로 만들어 둔다.  

=>Telnet, SSH, Rsync, Named DHCP 서비스 등

 

 참고로 Linux에서 패키지 설치는

RedHat 계열 : CentOS, RedHat, Fedora

         rpm -ivh/-Uvh *.rpm 해서 개별적으로 파일을 설치하고,

         yum -y install ~ 해서 종속적인 파일까지 모두 설치할 수 있다.

Debian 계열 : Debian, Ubuntu

         dpkg -i *.deb 해서 개별적으로 파일을 설치하고,

         apt/atp-get -y install ~ 해서 종속적인 파일까지 모두 설치할 수 있다.

 

  일반적으로 FTP Linux 머신과 연결한 뒤

일반 linux 명령어를 사용하면 연결된 Linux 머신에서 작업하는 것이고

! 뒤에 linux/Windows 콘솔 명령어를 사용하면 현재 머신에서 작업하는 것이다.  

 

  하드웨어를 Linux에 마운트할 때에는 파일타입을 지정하는데

CD/DVD-ROM iso9660,

Floppy msdos vfat,

MS-DOS msdos,

Windows ntfs/hpfs(Linux에서 Windows HDD를 마운트 할 때)

         cifs(Linux Samba에서 Windows 폴더를 마운트 할 때),

Linux ext3 ext4,

USB vfat fat32,

NFS nfs(Linux 머신끼리 /etc/exports를 통해서 디렉터리를 공유할 때)로 지정하면 된다.

mount -t iso9660 /dev/sr0 /DVD식으로 해서 DVD /DVD 마우트 포인터로 마운트한다.

mount -o remount,ro /dev/sdb1식으로 USB(/dev/sdb1)를 읽기전용으로 마운트한다. 

 

부팅 시 자동 마운트는 /etc/fstab 파일에서 설정해주면 된다.

/dev/sdb1  /USB   ext4    defaults  0           1

장치명    마운트포인트 포맷타입 마운트옵션   백업여부(0,1) 확인(/, /이외, x:0,1,2)

=>/dev/sdb1 blkid 해서 나온 값을 사용해서 

UUID=141412d4-9ff7-4986-8e60-5a5adeb1a7d9식으로 해주고 나머지는 그대로 써주는 것이 더 좋다.

 

파티션(데이터를 저장할 공간을 분할하는 것) 도구로 fdisk 그리고 parted가 있다.

 

포맷(데이터를 저장할 준비를 시키는 것) mkfs -t ext4(OR mkfs.ext4) /dev/sdb1식으로 해준다.

=>포맷은 high level format(일반적) low level format(factory format) 두 가지가 있다. 서버 포맷은 원칙이 부팅 디스크를 사용한 low level format이다.

  포맷은 디스크에 전기적 충격을 주어서 모두 0으로 만드는 작업이다. 다라서 디스크에 여러 번 포맷하면 디스크에 손상이 있을 수 있다.

 

  파일시스템을 점검해주는 - fsck(OR e2fsck)

  Linux의 메인 파일시스템인 /dev/sdal이 손상을 입었을 때 fsck e2fsck 도구를 사용해서 점검하고 복구할 수 있다. 시스템을 강제로 종료하면 이 파일시스템이 손상을 받을 수 있으므로 늘 정상적인 종료를 해야 한다.

  정밀하게 검사해야 한다면 검사하고자하는 블록장치를 언마운트해서 실행해야 한다.

  USB나 추가적인 HDD가 있는 /dev/sdb1과 같은 디스크는

umount /dev/sdb1 해서 /dev/sdb1을 언마운트 한 뒤 fsck를 실행하면 된다.

  하지만 / /boot처럼 늘 마운트 되어 실행되고 있는 디스크는

mount -o remount,ro / 식으로 해서 읽기 전용으로 마운트하기도 하는데, 잘 실행되지 않을 때가 많다. 이럴 때에는 /etc/fstab 파일에서 / /boot 두 부분을 주석#처리해서 잠시 마운트를 막은 뒤 리부팅하고 검사하는 것이 좋다.

 

  디스크의 용량을 확인해주는 - df

  이 명령어는 하드디스크의 총 용량과 사용한 용량, 남아있는 용량, 마운트 포인트 등을 보여준다. 여기에도 몇 가지 옵션이 있다.

i : 파일 크기를 블록 대신 inode로 표시

T : 파일시스템의 종류와 함께 디스크 정보도 표시

h : 사람이 읽을 수 있는 포맷으로 표시함 등이다.

  보통 df –hT /dev/sdb1식으로 사용한다. Size, Used, Avail, Use%식으로 보인다.

 

  디스크의 사용량을 확인해주는 - du

  du 명령어는 디스크의 디렉터리의 사용량을 보여준다. 여기도 몇 가지 옵션이 있다.

a : 모든 파일의 디스크 사용량표시

k / m : 용량을 KB(m MB)로 표시

h : 사람이 읽을 수 있는 포맷으로 표시함 등이다.

  보통 du -h /home식으로 사용하지만, du -h --max-depth=1 /home/centos | sort –n -r 해서 정밀하게 볼 수도 있다.

 

  블록 장치만 보이는 - lsblk

 

  블록 저장장치를 복사해주는 - dd

  앞에서 잠깐 살펴본 dd 명령어는 주로 USB DVD 등 블록장치의 내용을 다른 매체로 복사할 때 주로 사용되는데 커널을 거치지 않기 때문에 운영체제 실행과 무관하게 실행될 수 있다. 주의할 것은 장치의 공간은 복사되는 파일의 용량만큼만 사용되게 되므로 가급적 원본파일의 크기와 비슷한 용량을 가진 장치로 복사해주는 것이 좋다. 예를 들어 1GB 원본을 10GB 장치에 복사하면 10GB 장치의 9GB는 사용할 수 없게 된다는 뜻이다.

  이 도구는 if=/dev/null, if=/dev/zero식으로 입력 데이터를 만들어서 저장장치에 넣어줄 때에도 사용될 수 있다.

 

  물리적으로 손상된 배드 블록을 검사해주는 - badblocks

  하드디스크가 물리적으로 손상되었을 때 배드 블록이 생기는데 기하급수적으로 늘어나는 것이 특징이다. 데이터를 읽는 ARM HDD의 표면과 접촉되어졌을 때 발생되는데 Windows에서 Disk Defragment(조각모음) 할 때 이 배드블록이 감지될 수 있다. 배드블록이 생긴 하드디스크에 저장된 데이터는 유실될 위험이 매우 크므로 가끔 점검해둘 필요가 있다.

=>(e2)fsck는 파일시스템 체크이므로 논리적인 점검으로 물리적인 손상에 대한 점검은 아니다.

 

  BTRFS(Better File System) 파일시스템

  BTRFS[betterFS로 읽음] 파일 시스템은 IBM에서 제안했고 Oracle에서 Linux를 위한 파일 시스템으로 개발해서 사용하고 있다. Linux 커널이 지원하는 55개의 파일 시스템은 대부분 특정 포맷에만 적용되고 현재 대부분 Linux에서 사용하고 있는 ext3 ext4 파일 시스템은 16TB의 하드디스크까지만 지원한다. 하지만 BTRFS(BeTteR File System) 파일 시스템은 16EB까지 지원하고, 매우 빠르게 파일 시스템을 생성하며, 데이터와 메타데이터의 체크썸, 스냅샷, 그리고 온라인으로 문제해결이 가능하다.

  BTRFS와 다음의 XFS 파일 시스템에서는 마운트 포인트에서 일반적으로 디렉터리 생성 시 보이는 lost+found 디렉터리가 자동으로 생성되지 않는다는 것도 참고적으로 알아두자.

=>디스크를 포맷한 뒤>mkfs.btrfs /dev/sdb1식으로 해주면 된다.

 

  XFS(Extended File System) 파일시스템

  XFS(eXtended File System) 파일시스템은 SGI(Silicon Graphics Inc.)에서 IRIX 운영체제를 위한 파일시스템으로 개발해서 사용하고 있다. 위의 BTRFS 파일 포맷처럼 16EB까지 지원해주고, 안정적이며, 고성능의 실행속도를 보이면서도 매우 스케일러블(scalable)하고, 64 bits 저널링(journaling)과 디스크 디프라그(defrag)를 지원한다. CentOS 7.0 부터 디폴트 파일시스템으로 채택되어 있다.

=>디스크를 포맷한 뒤>mkfs.xfs /dev/sdb1식으로 해주면 된다.

 

  Disk Quotas

  Linux는 멀티 사용자 시스템이라서 여러 사용자들이 동시에 하나의 Linux 시스템에 접속해서 작업하게 되는데, 특정 사용자/그룹이 과도하게 고정된 용량의 하드디스크 공간을 많이 사용하면 다른 사용자들의 디스크 사용에 영향을 미칠 수 있다. 이럴 때 관리자는 Disk Quota를 사용해서 사용자나 그룹별로 하드디스크의 사용량이나 저장할 수 있는 파일의 개수를 지정해서 리소스를 제한해주어야 한다.

  간단히 말해서 사용자별로 하드디스크의 사용량을 제한하는 것이 디스크 쿼타인데 사용자와 그룹에게 할당한다. root 관리자는 디스크 쿼타에 적용받지 않고 무한으로 하드디스크를 사용하게 한다. CentOS 6.5 버전에서 이 쿼타 설정이 까다롭다. CentOS 문서에는 새로운 저널링 기법을 사용해서 쿼타를 설정하도록 권장하고 있지만 실제로 설정이 잘되지 않으므로 기존의 방식으로 설정해서 사용하는 경우가 많기 때문에 여기서도 기존의 방식으로 설정해본다. 

'Linux' 카테고리의 다른 글

Linux #12  (0) 2023.02.07
Linux #11  (0) 2023.02.03
Linux #9  (0) 2023.01.31
Linux #8  (0) 2023.01.20
Linux #7  (0) 2023.01.18