반응형
이 포스팅은 2016년 1월 7일에 작성된 예전 블로그 글을 새로이 옮긴 것입니다. 참고바랍니다.
이 포스트에 포함된 내용(2장~6장)
- 시작과종료, 가상콘솔, 런레벨, 자동완성
- vi 에디터, CDDVD 마운트
- 리눅스 기본 명령어
- 사용자 및 그룹 관리
- 파일의 소유권허가권, 링크
- RPM 사용법, YUM 기본 사용법
- YUM 고급 사용법
- 파일 압축과 묶기, CRON과 AT
- 네트워크 관련 개념과 명령어, SELinux
- 파이프필터 , 프로세스, 서비스소켓
- 응급복구, GRUB, 커널 컴파일
- X 윈도 테마, GRUB 배경 화면
- IDE/SCSI 장치 구성, 하드디스크 1개 추가
- RAID 개념과 종류
- 디스크 9개 장착, LinearRAID 구현
- RAID 0, RAID 1, RAID 5 구현
- RAID 6, RAID 1+0 구현
- LVM 개념과 구현
- 사용자별 공간 할당(쿼터)
2장 CentOS 리눅스 소개
리눅스의 개요
- 리눅스 = 무료 유닉스.
- 1991년 '리누스 토르발스'가 버전 0.01을 최초로 작성.
- 1992년 0.02 버전을 공개하면서 시작됨.
- 리누스 토르발스는 커널(Kernel)만 개발함.
- 배포판의 구성
- 하드웨어 < 커널 < 쉘 < 응용 프로그램
GNU 프로젝트
- 1984년에 라차드 스톨만에 의해서 GNU 프로젝트가 시작
- 목표는 '모두가 공유할 수 있는 소프트웨어'를 만드는 것
- 리차드 스톨만은 1985년에 자유 소프트웨어 재단(FSF, Free Software Foundation)을 설립
- 목표는 GNU 프로젝트에서 제작한 소프트웨어를 지원함으로써 컴퓨터 프로그램의 복제, 변경, 소스 코드의 사용에 대한 제한을 철폐하는 것.
- GPL(General Public License)을 따름, 이 라이선스는 자유 소프트웨어(Free Software)의 수정과 공유의 자유를 보장함.
- 프리웨어(Freeware, 무료 소프트웨어)라는 개념을 뛰어넘어서 진정한 자유에 대한 개념.
- 자유 소프트웨어는 심지어 무료로 얻은 소프트웨어를 유상으로 판매할 자유도 보장.
커널
- http://www.kernel.org 에서 최신버전 다운로드 가능
- 커널 버전의 의미 (예: 3.17.4)
- 3은 주 버전(Major Version)
- 17은 부 버전(Minor Version)
- 4는 패치 버전(Patch Version)
- 배포판에 포함된 기본 커널을 사용자가 직접 최신 커널로 업그레이드 가능.
레드햇 리눅스와 CentOS 리눅스
- 전 세계적으로 가장 유명한 배포판 중 하나가 Red Hat사에서 제작한 'Red Hat Linux'.
- 상용으로 판매되는 Red Hat Enterprise Linux(RHEL), 공개된 RHEL의 소스코드를 그대로 가져와서, 로고만 변경한 후에 다시 컴파일(또는 빌드)해서 만든 것이 CentOS.
- 기업에서는 별도의 비용이 있다면 RHEL을 구매해서 사용하면 되며, 비용을 절감하고 싶다면 동일한 리눅스인 CentOS를 사용하면 된다.
4장 서버를 구축할 때 알아야 할 필수 개념과 명령어
가상 콘솔
- 각각의 가상 콘솔로 이동하는 단축키는
Ctrl + Alt + F2 ~ F6
.Ctrl + Alt + F1
은 X윈도우 모드.
- 터미널에서
chvt 가상콘솔번호
를 입력하여 이동 가능.
런 레벨(Runlevel)
- Runlevel 모드를 확인하려면
/lib/systemd/system
디렉터리의runlevel?.target
파일을 확인.
Runlevel | 영문 모드 | 설명 | 비고 |
---|---|---|---|
0 | Power Off | 종료 모드 | |
1 | Rescue | 시스템 복구 모드 | 단일 사용자 모드 |
2 | Multi-User | 사용하지 않음 | |
3 | Multi-User | 텍스트 모드의 다중 사용자 모드 | |
4 | Multi-User | 사용하지 않음 | |
5 | Graphical | 그래픽 모드의 다중 사용자 모드 | |
6 | Reboot | 재부팅 모드 |
[root@localhost ~]# ls -l /lib/systemd/system/runlevel?.target
/lib/systemd/system/runlevel0.target -> poweroff.target
/lib/systemd/system/runlevel1.target -> rescue.target
/lib/systemd/system/runlevel2.target -> multi-user.target
/lib/systemd/system/runlevel3.target -> multi-user.target
/lib/systemd/system/runlevel4.target -> multi-user.target
/lib/systemd/system/runlevel5.target -> graphical.target
/lib/systemd/system/runlevel6.target -> reboot.target
현재 Runlevel 확인
[root@localhost ~]# ls -l /etc/systemd/system/default.target
/etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
Runlevel 변경(5 → 3)
[root@localhost ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
CD/DVD 마운트
[root@localhost ~]# mkdir /media/cdrom # 마운트할 디렉터리 생성
[root@localhost ~]# mount /dev/cdrom /media/cdrom # DVD장치를 생성한 디렉터리에 마운트
[root@localhost ~]# umount /dev/cdrom # 마운트 해제
링크
- 파일의 Link에는 Hard Link와 Symbolic Link(또는 Soft Link) 두 가지가 있다.
- Hard Link를 생성하면 Hard Link File만 하나 생성되며 같은 inode1을 사용.
# ln 링크대상파일이름 링크파일이름
- Symbolic Link를 생성하면 새로운 inode2를 만들고, 데이터는 원본 파일 포인터를 통해 원본 파일에 연결.
# ln -s 링크대상파일이름 링크파일이
RPM(Redhat Package Manager)
gedit-3.8.3-6.el7.x86_64.rpm
패키지이름-버전-릴리즈번호.CentOs버전.아키텍처.rpm
- 패키지이름: gedit → 패키지(프로그램)의 이름.
- 버전: 3.8.3 → 대개 3자리수로 구성. 주버전, 부버전, 패치버전.
- 릴리즈번호: 6 → 문제점을 개선할 때마다 붙여지는 번호.
- CentOS 버전: el7 → CentOs에서 배포할 경우에 붙여짐.
- 아키텍처:
- x86_64 → 64비트 CPU.
- i386_686 → 32비트 CPU.
- src → 소스.
- noarch → 모든 CPU.
RPM 명령어
- 설치:
rpm -Uvh 패키지파일이름.rpm
- U → (대문자) 패키지 설치/업그레이드.
- v → 설치 과정 확인.
- h → 설치 과정을 "#" 마크로 화면에 출력.
- 삭제:
rpm -e 패키지이름
- 이미 설치된 패키지 조회
rpm -qa 패키지이름
→ 패키지가 설치되었는지 확인.rpm -qf 파일의절대경로
→ 파일이 어느 패키지에 포함된 것인지 확인.
- 아직 설치되지 않은 rpm 파일에 대한 조회
rpm -qlp 패키지파일이름.rpm
→ 패키지 파일에 어떤 파일들이 포함되었는지 확인.rpm -qip 패키지파일이름.rpm
→ 패키지 파일의 상세정보
YUM(Yellowdog Updater Modified)
- rpm 명령의 패키지 의존성 문제를 해결.
- 인터넷을 통하여 필요한 파일을 저장소(Repository)에 자동으로 모두 다운로드해서 설치하는 방식.
YUM 작동 방식
- yum install 입력.
- /etc/yum.repos.d/ 디렉터리의 repo 파일을 열어서 URL 주소 확인.
- CentOS 7 패키지 저장소에서 전체 패키지 목록 파일 요청.
- 전체 패키지 목록 파일만 다운로드.
- 설치할 패키지와 관련된 패키지의 이름을 화면에 출력.
- y를 입력하면 설치에 필요한 패키지 파일을 저장소에 요청함.
- 설치할 패키지 파일을 다운로드해서 자동 설치.
YUM 명령어
- 설치:
yum -y install 패키지이름
- RPM 파일 설치:
yum localinstall rpm파일이름.rpm
- 업데이트 가능한 목록 보기:
yum check-update
- 업데이트:
yum update 패키지이름
- 삭제:
yum remove 패키지이름
- 정보 확인:
yum info 패키지이름
YUM 고급 명령어
- 패키지 그룹 설치:
yum groupinstall "패키지그룹이름"
- 패키지 리스트 확인:
yum list 패키지이름
- 특정 파일이 속한 패키지 이름 확인:
yum provides 파일이름
- GPG 키 검사 생략:
yum install --nogpgcheck rpm파일이름.rpm
- 기존 저장소 목록 지우기:
yum clean all
repo 파일 활용
- 설치 DVD에서 먼저 패키지를 찾고, 없다면 CentOS 패키지 저장소에서 패키지를 찾도록 수정.
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ll
합계 24
-rw-r--r--. 1 root root 1669 1월 6 20:04 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 4월 1 2015 CentOS-CR.repo
-rw-r--r--. 1 root root 649 4월 1 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 4월 1 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1002 4월 1 2015 CentOS-Vault.repo
-rw-r--r--. 1 root root 290 4월 1 2015 CentOS-fasttrack.repo
[root@localhost yum.repos.d]# mkdir backup
[root@localhost yum.repos.d]# mv *.repo backup/ # 기존 repo 파일 백업
[root@localhost yum.repos.d]# ll
합계 0
drwxr-xr-x 2 root root 156 1월 7 10:13 backup
[root@localhost yum.repos.d]# vi dvd.repo # dvd.repo에 아래 내용 추가
[dvd]
name=CentOS DVD
baseurl=file:///media/cdrom # 마운트 위치
gpgcheck=0
[network]
name=network
baseurl=
http://ftp.daum.net/centos/$releasever/os/$basearch/
http://ftp.kaist.ac.kr/CentOS/$releasever/os/$basearch
gpgcheck=0
파일 위치 검색
- find [경로] [옵션] [조건] [action]
- [옵션]: -name, -user, -newer, -perm, -size
- [action]: -print, -exec
find /etc -name "*.conf"
find /bin -size +10k -size -100k
find /usr/bin -size +95k -size -100k -exec ls -l {} \;
find /home -name "*.swp" -exec rm {} \;
- which 실행파일이름: PATH에 설정된 디렉터리만 검색
- whereis 실행파일이름: 실행 파일, 소스, man 페이지 파일까지 검색
- locate 파일이름: 파일 목록 데이터베이스에서 검색
시스템 설정
- 날짜 및 설정:
system-config-date
- 네트워크 설정:
nmtui
- 방화벽 설정:
firewall-config
- 키보드 설정:
system-config-keyboard
- 언어 설정:
system-config-language
- 프린터 설정:
system-config-printer
- 사용자 설정:
syustem-config-users
- 네임 서버 설정:
system-config-kickstart
CRON과 AT
CRON
- 주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정
- 관련된 데몬은
crond
, 관련 파일은/etc/crontab
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
01 3 15 * * root run-parts /etc/cron.monthly
AT
- cron은 주기적으로 반복되는 작업을 예약하는 것이지만, at은 일회성 작업을 예약
- 예약:
at <시간>
- 확인:
at -l
- 취소:
atrm <작업번호>
[root@localhost backup]# at 4:00 am tomorrow
at> yum -y update
at> reboot
at> <EOT> # Ctrl+D
job 1 at Fri Jan 8 04:00:00 2016
[root@localhost backup]# at -l
1 Fri Jan 8 04:00:00 2016 a root
[root@localhost backup]# atrm 1
네트워크 관련 필수 개념
- TCP/IP
- 컴퓨터끼리 네트워크 상으로 의사소통을 하는 프로토콜 중 가장 널리 사용되는 프로토콜의 한 종류.
- Hostname과 Domain name
- Hostname은 각각의 컴퓨터에 저장된 이름.
- Domain name은 naver.com과 같은 형식.
- IP 주소
- 각 컴퓨터의 랜카드에 부여되는 중복되지 않는 유일한 주소.
- 4바이트로 이루어져 있으며, 각 자리는 0~255까지의 숫자.
- 네트워크 주소
- 같은 네트워크에 속해 있는 공통된 주소(192.168.111.0).
- Broadcast 주소
- 내부 네트워크의 모든 컴퓨터가 듣게 되는 주소.
- 현재 주소의 제일 끝자리를 255로 바꾼 주소(C클래스).
- Gateway, Router
- Gateway = Router.
- 네트워크 간에 데이터를 전송하는 컴퓨터 또는 장비.
- Netmask & Class
- 네트워크의 규모를 결정(255.255.255.0 - C클래스).
- DNS(Domain Name System) 서버(= Nameserver) 주소
- URL을 해당 컴퓨터의 IP 주소로 변환해 주는 서버.
- 설정 파일은
/etc/resolv.conf
네트워크 관련 명령어
- nmtui
- 네트워크와 관련된 대부분의 작업을 이 명령어에서 수행.
- 자동 IP 주소 또는 고정 IP 주소 사용 결정.
- IP 주소, Subnet Mask, Gateway 정보 입력.
- DNS 정보 입력.
- 네트워크 카드 드라이버 설정.
- 네트워크 장치의 설정.
- 텍스트 기반으로 작동함.
- 네트워크와 관련된 대부분의 작업을 이 명령어에서 수행.
- 네트워크 설정 적용:
systemctl <start/stop/restart/status> network
- 네트워크 장치 On/Off:
ifup <장치이름>, ifdown <장치이름>
- 장치의 IP주소 설정 정보 출력:
ifconfig <장치이름>
- DNS 서버 작동 테스트:
nslookup
- 해당 컴퓨터가 네트워크상에서 응답하는지를 테스트:
ping <IP주소 또는 URL>
네트워크 설정 관련 주요 파일
- 네트워크 기본 정보:
/etc/sysconfig/network
- 해당 장치에 설정된 네트워크 정보:
/etc/sysconfig/network-scrips/ifcfg-장치이름
- DNS 서버의 정보 및 Hostname:
/etc/resolv.conf
- 현재 컴퓨터의 Hostname 및 FQDN:
/etc/hosts
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777728
TYPE="Ethernet"
BOOTPROTO=none
IPADDR=192.168.111.100
NETMASK=255.255.255.0
GATEWAY=192.168.111.2
DNS1=192.168.111.2
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777728"
UUID="3fa0e59c-d536-4f90-86f9-69b004278436"
DEVICE="eno16777728"
ONBOOT="yes"
네트워크 보안을 위한 SELinux
- SELinux(Security Enhanced Linux)는 보안에 취약한 리눅스를 보호하기 위해 탄생.
- 강제(Enforcing), 허용(Permissive), 비활성(Disabled) 세 가지 레벨.
- Enforcing: 시스템 보안에 영향을 미치는 기능이 감지되면 아예 그 기능이 작동되지 않도록 막음.
- Permissive: 시스템 보안에 영향을 미치는 기능이 감지되면 허용은 되지만 그 내용이 로그에 남음.
- Disabled: SELinux를 사용하지 않음.
- 설정 파일인
/etc/sysconfig/selinux
를 편집하거나,system-config-selinux
명령으로 설정.
파이프, 필터, 리다이렉션
- 파이프(pipe)
- 두 개의 프로그램을 연결해 주는 연결통로.
|
를 사용.# ls -s /etc | more
- 필터(filter)
- 필요한 것만 걸러주는 명령어.
grep
,tail
,wc
,sort
,grep
,awk
,sed
등- 주로 파이프와 같이 사용.
# ps ef | grep bash
- 리다이렉션(redirection)
- 표준 입출력의 방향을 바꿔 줌.
# ls -l > list.txt
# soft < list.txt > out.txt
프로세스, 데몬
- 정의: 하드디스크에 저장된 실행코드(프로그램)가, 메모리에 로딩되어 활성화된 것.
- Foreground Process: 실행하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스.
fg <작업번호>
: Background Process를 Foreground로 불러온다.
- Background Process: 실행은 되었지만, 화면에는 나타나지 않고 실행되는 프로세스.
gedit &
: Background로 프로그램을 실행할 수 있다. 터미널 계속 사용 가능.
- 프로세스 번호: 각각의 프로세스에 할당된 고유번호.
- 작업 번호: 현재 실행되고 있는 Background Process의 순차번호
- 부모 프로세스와 자식 프로세스
- 모든 프로세스는 부모 프로세스를 가지고 있음.
- 부모 프로세스를 kill 하면, 자식 프로세스도 자동으로 kill 됨.
[root@localhost ~]# yes > /dev/null
^Z
[1]+ Stopped yes > /dev/null
[root@localhost ~]# bg
[1]+ yes > /dev/null &
[root@localhost ~]# fg 1
yes > /dev/null
^C
[root@localhost ~]#
프로세스 관련 명령어
- ps
- 현재 프로세스의 상태 확인.
# ps -ef | grep <프로세스 이름>
- kill
- 프로세스 강제 종료.
# kill -9 <프로세스 번호>
- pstree: 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여 줌.
서비스와 소켓
- 서비스
- 시스템과 독자적으로 구동되어 제공하는 프로세스를 말한다. 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 있다.
- 실행 및 종료는 대개
systemctl start/stop/restart 서비스이름
으로 사용된다. - 서비스의 실행 스크립트 파일은
/usr/lib/systemd/system/
디렉터리에서비스이름.service
라는 이름으로 확인할 수 있다.
- 소켓
- 서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다.
- 그래서 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때 약간 더 걸릴 수 있다. 왜냐하면 systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문이다. 예로 텔넷 서버가 있다.
- 소켓과 관련된 스크립트 파일은
/usr/lib/systemd/system/
디렉터리에소켓이름.socket
라는 이름으로 확인할 수 있다.
응급 복구(root 비밀번호 분식)
e
를 눌러 edit mode로 들어간다.
rhgb ~ UTF-8
부분을 지우고, init=/bin/sh
를 입력한다.
Ctrl-x
를 눌러 시작.
sh-4.2# whoami
root
root로 로그인 되었다. passwd
로 비밀번호를 변경하면 되지만,
현재 /
가 읽기전용이므로, 수정할 수 있도록 변경해야 한다.
sh-4.2# mount
/dev/sda2 on / type xfs (ro,relatime,attr2,inode64,noquota)
sh-4.2# mount -o remount,rw /
sh-4.2# mount
/dev/sda2 on / type xfs (rw,relatime,attr2,inode64,noquota)
이제 비밀번호를 변경한다.
sh-4.2# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
재부팅 하면, 변경한 비밀번호로 접속할 수 있다.
GRUB 부트로더
- GRUB 부트로더의 특징
- 부트 정보를 사용자가 임의로 변경해 부팅할 수가 있다. 즉, 부트 정보가 올바르지 않더라도 수정하여 부팅할 수 있다.
- 다른 여러 가지 운영체제와 멀티부팅을 할 수 있다.
- 대화형 설정을 제공해줘서, 커널의 경로와 파일 이름만 알면 부팅이 가능하다.
- GRUB2의 장점
- 셸 스크립트를 지원함으로써 조건식과 함수를 사용할 수 있다.
- 동적 모듈을 로드할 수 있다.
- 그래픽 부트 메뉴를 지원하며, 부트 스플래시(boot splash) 성능이 개선되었다.
- ISO 이미지를 이용해서 바로 부팅할 수 있다.
- GRUB2 설정 방법
- 설정 파일:
/boot/grub2/grub.cfg
직접 변경하면 안 됨. /etc/default/grub
파일과/etc/grub.d/
디렉터리의 파일을 수정한 후에,grub2-mkconfig -o /boot/grub2/grub.cfg
명령어를 실행해 설정함.
- 설정 파일:
[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5 # 메뉴 선택 시간.
GRUB_DISTRIBUTOR="This is Lunix" # 메뉴 제목.
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB 부트로더 변경시 암호 설정
- GRUB 부트로더에 암호를 설정하지 않으면, 위 응급복구처럼 마음대로 root 비밀번호를 수정할 수 있게된다.
[root@localhost ~]# vi /etc/grub.d/00_header # 맨 아래쪽에 아래 내용 추가.
cat << EOF
set superusers="thisuser"
password thisuser 4321
EOF
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg # 설정 적용.
모듈의 개념과 커널 컴파일의 필요성
- 모듈: 필요할 때마다 호출하여 사용되는 코드
- 커널 컴파일 순서
- 현 커널 버전 확인:
# uname -r
- 커널 소스 다운로드:
# cd /usr/src
에 업로드 - 커널 소스 압축 풀기:
# tar xvfJ linux-3.17.4.tar.xz
,# cd linux-3.17.4
- 커널 설정 초기화:
# make mrproper
- 커널 환경 설정:
# make xconfig
- 이전 정보 삭제:
# make clean
- 커널 컴파일 및 설치:
# make ; make modules_install ; make install
,# ls -l /boot
- 부트 로더 확인:
# cat /etc/grub2/grub.cfg
- 현 커널 버전 확인:
[root@localhost ~]# uname -r
3.10.0-229.el7.x86_64
[root@localhost ~]# wget "https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.4.tar.xz"
[root@localhost ~]# mv linux-3.17.4.tar.xz /usr/src
[root@localhost ~]# cd /usr/src/
[root@localhost src]# ll
합계 130624
drwxr-xr-x. 2 root root 6 6월 10 2014 debug
drwxr-xr-x. 2 root root 6 6월 10 2014 kernels
-rw-r--r-- 1 root root 80337920 11월 22 2014 linux-3.17.4.tar.xz
[root@localhost src]# tar xfJ linux-3.17.4.tar.xz
[root@localhost src]# cd linux-3.17.4/
[root@localhost linux-3.17.4]# ls
COPYING Kbuild Makefile arch drivers include kernel net security usr
CREDITS Kconfig README block firmware init lib samples sound virt
Documentation MAINTAINERS REPORTING-BUGS crypto fs ipc mm scripts tools
[root@localhost linux-3.17.4]# yum -y install gcc gcc-c++ qt qt-devel # 컴파일에 필요한 패키지 설치
[root@localhost linux-3.17.4]# make mrproper
[root@localhost linux-3.17.4]# make xconfig
xconfig로 커널 설정을 할 수 있다. NTFS를 마운트 하고 싶다면 NTFS 관련 항목에 체크해야 한다.
계속 진행.
[root@localhost linux-3.17.4]# make clean
[root@localhost linux-3.17.4]# make ; make modules_install ; make install
재부팅 하면 GRUB 메뉴에 3.17.4 커널이 추가된 것을 확인할 수 있다.
6장. 하드디스크 관리와 사용자별 공간 할당
RAID 정의 및 개념
- RAID 정의
- RAID(Redundant Array of Inexpensive Disks)는 여러 개의 디스크를 하나의 디스크처럼 사용함.
- 비용 절감 + 신뢰성 향상 + 성능 향상의 효과를 냄.
- 하드웨어 RAID
- 하드웨어 제조업체에서 여러 개의 하드디스크를 가지고 장비를 만들어서 그 자체를 공급.
- 좀 더 안정적이지만, 상당한 고가임.
- 소프트웨어 RAID
- 고가의 하드웨어 RAID의 대안.
- 운영체제에서 지원하는 방식.
- 저렴한 비용으로 점 더 안전한 데이터의 저장이 가능.
Linear RAID, RAID 0
- Linear RAID 개요
- 최소 2개의 하드디스크가 필요.
- 2개 이상의 하드디스크를 1개의 볼륨으로 사용.
- 앞 디스크부터 차례로 저장.
- 100%의 공간효율성(= 비용 저렴).
- RAID 0 개용
- 최소 2개의 하드디스크가 필요.
- 모든 디스크에 동시에 저장 됨.
- 100%의 공간효율성(= 비용 저렴).
- 신뢰성 낮음.
- 빠른 성능을 요구하되, 혹시 전부 잃어버려도 큰 문제가 되지 않는 자료가 적당함.
RAID 1
- RAID 1 개요
- 미러링(Mirroring)이라 부름.
- 데이터 저장에 두 배의 용량이 필요.
- 결함 허용(Falut-tolerance)을 제공(= 신뢰성 높음).
- 두 배의 저장 공간 = 비용이 두 배 = 공간효율 나쁨.
- 저장속도(성능)는 변함 없음.
- 중요한 데이터를 저장하기에 적절함.
- RAID 0와 RAID 1 비교
구분 | RAID 0 | RAID 1 |
---|---|---|
성능(속도) | 뛰어남 | 변화 없음 |
데이터 안전성(결함 허용) | 보장 못함(결함 허용 X) | 보장함(결함 허용 O) |
공간 효율성 | 좋음 | 나쁨 |
RAID 5
- RAID 5 개요
- RAID1의 데이터 안전성 + RAID 0처럼 공간 효율성.
- 최소한 3개 이상의 하드디스크.
- 오류가 발생할 때는 패리티(Parity)를 이용해서 데이터를 복구.
- RAID 5 특징
- 어느 정도의 결함 허용을 해 주면서 저장 공간의 효율도 좋음.
- (디스크의 개수 -1)의 공간을 사용.
- 디스크 2개가 고장나면 복구 못 함.
RAID 6, RAID 1+0
- RAID 5보다 신뢰도를 높은 RAID 6.
- 신뢰도와 속도 두 마리 토끼를 잡기 위한 RAID 1+0.
- RAID 6은 패리티를 2개 사용하기 떄문에 최소 4개의 디스크가 필요.
- RAID 1+0도 최소 4개 디스크가 필요.
- RAID 6의 공간효율은 N-2
- RAID 1+0의 공간효율은 50%
Linear RAID, RAID 0, RAID 1, RAID 5 구현
장치 이름 | 용량 | 비고 |
---|---|---|
SCSI 0:1 | 2GB | Linear RAID |
SCSI 0:2 | 1GB | Linear RAID |
SCSI 0:3 | 1GB | RAID 0 |
SCSI 0:4 | 1GB | RAID 0 |
SCSI 0:5 | 1GB | RAID 1 |
SCSI 0:6 | 1GB | RAID 1 |
SCSI 0:7 | 사용 불가 | |
SCSI 0:8 | 1GB | RAID 5 |
SCSI 0:9 | 1GB | RAID 5 |
SCSI 0:10 | 1GB | RAID 5 |
- 파티션 타입은
fd
,Linux raid autodetect
로 설정.
/dev/sdb1 2048 4194303 2096128 fd Linux raid autodetect
/dev/sdc1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdd1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sde1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdf1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdg1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdh1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdi1 2048 2097151 1047552 fd Linux raid autodetect
/dev/sdj1 2048 2097151 1047552 fd Linux raid autodetect
- Linear RAID
[root@localhost ~]# mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md9 started.
[root@localhost ~]# mdadm --detail --scan
ARRAY /dev/md9 metadata=1.2 name=localhost.localdomain:9 UUID=f86f440c:96d42e39:9647f3bd:699c394f
[root@localhost ~]# mkfs.ext4 /dev/md9
- RAID 0
[root@localhost ~]# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
[root@localhost ~]# mkfs.ext4 /dev/md0
- RAID 1
[root@localhost ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
[root@localhost ~]# mkfs.ext4 /dev/md1
- RAID 5
[root@localhost ~]# mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdi1 /dev/sdj1
[root@localhost ~]# mkfs.ext4 /dev/md5
- RAID 6
[root@localhost ~]# mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
[root@localhost ~]# mkfs.ext4 /dev/md6
- RAID 1+0
[root@localhost ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
[root@localhost ~]# mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sdh1 /dev/sdi1
[root@localhost ~]# mdadm --create /dev/md10 --level=0 --raid-devices=2 /dev/md2 /dev/md3
[root@localhost ~]# mkfs.ext4 /dev/md10
LVM(Logical Volume Manage)
- LVM 주요 기능: 여러 개의 하드디스크를 합쳐서 한 개의 파일시스템으로 사용하는 것으로 필요에 따라서 다시 나눌 수 있다.
- 용어
- Physical Volume(물리 볼륨): /dev/sda1, /dev/sdb1 등의 파티션.
- Volume Group(볼륨 그룹): 물리 볼륨을 합쳐서 1개의 물리 그룹으로 만드는 것.
- Logical Volume(논리 볼륨): 볼륨 그룹을 1개 이상으로 나눠서 논리 그룹으로 나눈 것.
- 파티션 타입은
8e
,Linux LVM
로 설정.
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# vgcreate myVG /dev/sdb1 /deb/sdc1
Volume group "myVG" successfully created
[root@localhost ~]# lvcreate --size 1G --name myLG1 myVG
Logical volume "myLG1" created
[root@localhost ~]# lvcreate --size 3G --name myLG2 myVG
Logical volume "myLG2" created
[root@localhost ~]# lvcreate --extents 100%FREE --name myLG3 myVG
Logical volume "myLG3" created
[root@localhost ~]# mkfs.ext4 /dev/myVG/myLG1
[root@localhost ~]# mkfs.ext4 /dev/myVG/myLG2
[root@localhost ~]# mkfs.ext4 /dev/myVG/myLG3
[root@localhost ~]# mkdir /lvm1 /lvm2 /lvm3
[root@localhost ~]# mount /dev/myVG/myLG1 /lvm1
[root@localhost ~]# mount /dev/myVG/myLG2 /lvm2
[root@localhost ~]# mount /dev/myVG/myLG3 /lvm3
사용자별 공간 할당 - 쿼터(Quota)
- 파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것.
- 파일시스템을
/
로 지정하는 것보다는, 별도의 파일시스템을 지정해서 해당 부분을 쓰도록 하는것이 좋음. /
파일 시스템을 많은 사용자가 동시에 사용하게 되면, 서버를 운영하기 위해서 디스크를 읽고 쓰는 작업과 일반 사용자가 디스크를 읽고 쓰는 작업이 동시에 발생하므로 전반적으로 시스템의 성능이 저하 됨.- 디스크 추가 후(/dev/sdb), /userHome에 마운트.
[root@localhost ~]# useradd -d /userHome/john john
[root@localhost ~]# useradd -d /userHome/bann bann
/etc/fstab
에usrjquota=aquota.user,jqfmt=vfsv0
추가.
[root@localhost ~]# vi /etc/fstab
/dev/sdb1 /userHome ext4 defaults,usrjquota=aquota.user,jqfmt=vfsv0 1 2
[root@localhost ~]# mount --options remount /userHome
- 쿼터 DB 생성
[root@localhost ~]# cd /userHome
[root@localhost userHome]# quotaoff -avug
/dev/sdb1 [/userHome]: user quotas turned off
[root@localhost userHome]# quotacheck -augmn
[root@localhost userHome]# rm -rf aquota.*
[root@localhost userHome]# quotacheck -augmn
[root@localhost userHome]# touch aquota.user aquota.group
[root@localhost userHome]# chmod 600 aquota.*
[root@localhost userHome]# quotacheck -augmn
[root@localhost userHome]# quotaon -avug
/dev/sdb1 [/userHome]: user quotas turned on
- 사용자별 쿼터 설정
[root@localhost userHome]# edquota -u john
Disk quotas for user john (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 28 10240 15360 7 0 0
- 쿼터 테스트
[root@localhost userHome]# su - john
[john@localhost ~]$ cp /boot/vmlinuz-3.10.0-229.el7.x86_64 test1
[john@localhost ~]$ cp test1 test2
[john@localhost ~]$ cp test1 test3
sdb1: warning, user block quota exceeded. # soft 쿼터 초과.
[john@localhost ~]$ cp test1 test4
sdb1: write failed, user block limit reached.
cp: 'test4'에 쓰는 도중 오류 발생: 디스크 할당량이 초과됨
cp: failed to extend 'test4': 디스크 할당량이 초과됨
[john@localhost ~]$ ll
합계 15312
-rwxr-xr-x. 1 john john 5029136 1월 8 14:23 test1
-rwxr-xr-x. 1 john john 5029136 1월 8 14:24 test2
-rwxr-xr-x. 1 john john 5029136 1월 8 14:24 test3
-rwxr-xr-x. 1 john john 589824 1월 8 14:24 test4 # hard 쿼터 제한
[john@localhost ~]$ quota
Disk quotas for user john (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 15360* 10240 15360 6days 16 0 0
- 쿼터 설정 확인
[root@localhost userHome]# repquota /userHome/
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 3 0 0
john +- 15360 10240 15360 6days 17 0 0
bann -- 28 0 0 7 0 0
[root@localhost userHome]# edquota -p john bann # 쿼터 설정 복사
[root@localhost userHome]# repquota /userHome/
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 3 0 0
john +- 15360 10240 15360 6days 17 0 0
bann -- 28 10240 15360 7 0 0
반응형
'IT' 카테고리의 다른 글
파워목업(PowerMockup) 체험판 간단 사용기 (0) | 2020.10.04 |
---|---|
[정리] 데이터 과학을 위한 통계 (0) | 2020.10.04 |
[정리] JAVA 기본 개념 (0) | 2020.10.04 |
[정리] IT 인프라 구조 (0) | 2020.10.04 |
[정리] 오라클 관리 실무 (0) | 2020.10.04 |
최근댓글