시스템 관련 운영을 해야 한다면 가장 많이 하는 것이 '디스크 관리'.
하드 디스크 추가 설치 절차 (아주 아주 중요)
1) 사용하지 않는 데이터를 삭제한다.
2) 새 디스크를 장착한다.
디스크 장착 확인 방법
# cat /proc/scsi/scsi (스카시 : 디스크가 연결되는 인터페이스(구멍)의 종류)
# lsscsi (더 깔끔하게 보여줌)
# lsblk (트리 구조처럼 더 깔끔하게 보여줌)
3) 파티션을 생성한다.
- 하드파티션
- LVM
4) 파일 시스템을 생성(포멧)한다.
5) 파일 시스템을 마운트한다.
cat /proc/scsi/scsi 명령어 결과
lsscsi 명령어 결과
lsblk 명령어 결과
* device file * : 장치에 대한 접근 정보를 가지고 있는 핸들러, 이 장치 파일을 씀으로써 우리는 장치의 위치, 드라이브 종류 등등을 굳이 알지 않아도 된다. 아래 주소 등을 장치인 것처럼 명령어로 입력하면, OS가 장치로 입출력을 해준다.
device file의 이름 규칙
IDE(P-ATA) -----------> S-ATA, SAS(Serial Attached SCSI)
/dev/hda /dev/sda
/dev/hdb /dev/sdb
/dev/hdc /dev/sdc
/dev/hdd /dev/sdd
파티션을 분할한 디스크에서는 /dev/sdb1 , /dev/sdb2 처럼 이름 뒤에 고유의 번호가 붙는다.
(고유의 번호는 항상 규칙적이진 않다. 중간에 번호가 건너뛰어질 수도 있다.)
1) 하드파티션 (과거 사용 개념, 현재는 트렌드에 뒤쳐짐)
파티션 종류
- primary partition (주 파티션) : 기본적으로 제공되는 파티션, 최대 4개까지 생성 가능, 파티션 번호 1~4
- extend partition (확장 파티션) : 4개 이상의 파티션 생성을 위해 만드는 것, 파티션 번호1~4,
논리 파티션으로 재구간 분할 사용 가능
- logical partition (논리 파티션) : 확장 파티션을 재분할, 파티션 번호 5번 이상부터 사용 가능, 최대 12개 파티션
--> 전체 사용 가능한 파티션 15개
참고 ) 파티션을 직접 분할하기 때문에 MBR이라는 곳에 파티션을 분할한 정보(테이블)를 저장한다.
MBR(Master Boot Record)는 partition table이라고 하며, 디스크 파티션 분할 정보를 저장하는 일종의 헤더이다.
fdisk ( by MS, 1983 )
# fdisk 디스크이름
fdisk sub-command
m (menu) : fdisk 사용 방법
p (print) : 현재 디스크의 파티션 정보 출력
n (new) : 디스크에 새로운 파티션 생성
d (delete) : 디스크의 파티션 삭제
q (quit) : 메모리에 있는 파티션 변경 정보를 저장하지 않고 fdisk 종료
w (write) : 파티션 변경 정보를 디스크에 저장하고 fdisk 종료
MB : 1000b = 1kb
MiB : 1024b = 1kb
모두 끝내고 q 명령어를 입력하면 메모리에만 있던 파티션 정보가 디스크에 적용되지 않고 없어진다.
그러므로 w 명령어로 디스크에 적용시키고 종료해야 한다.
dev(디바이스)파일이 생성되지 않으면 우리는 사실 분할된 파티션들을 사용할 수 없다.
파티션 분할하고 정보를 저장하면 자동으로 디바이스 파일이 생성되지만, 종종 그렇지 않은 경우 partprobe 라는 명령어를 사용하여 디바이스 파일을 생성한다. 그래도 생성이 안되는 최후의 경우에는 재부팅을 해야 한다.
2) LVM (IBM이 90년대 중반 처음 만듦, LVM은 데이터가 많은 서비스에서 거의 무조건 사용)
fdisk와 같은 하드 파티션의 문제
1) 파티션의 확장/축소가 매우 매우 어렵다.
2) 디스크의 공간을 유연하게 관리하기 어렵다. (disk를 논리적으로 합치기 어렵다)
이러한 문제 상황에서 LVM(Logical Volume Manager)이 등장했다.
논리 볼륨 관리자라는 뜻으로, 우리가 사용하는 물리적인 디스크를 논리적인 단위로 관리할 수 있도록 하는 개념
LVM은 뛰어난 확장성을 갖고 있다. 또한 downtime(서버 다운 시간)도 발생하지 않는다.
안전성(자동 이중화)과 효율(분산 처리)도 가진다. (그리하여 최근 LVM은 서비스에서 무조건적인 것)
LVM Object(객체)
PV (Physical Volume) : 물리적인 디스크
VG (Volume Group) : PV들을 논리적으로 묶은 그룹 단위
LV (Logical Volume, LVOL) : VG 안에서 나눠진 논리적 파티션
PE (Physical Extent) : VG의 파티션을 나누기 위한 최소 단위
아래는 LVM을 통한 디스크 추가 절차(파티션 구성 및 파일시스템 생성 절차)이다.
# pvcreate : PV(LVM용 디스크) 초기화하는 명령
# vgcreate vg이름 묶을디스크 : VG(볼륨 그룹) 만드는 명령어
# lvcreate -n 이름 -L 크기(MB가 default) 볼륨그룹 : 크기 이름으로 볼륨그룹에 LV 만들기
장치에 접근을 하려면 device file이 필요하다.
Logical Volume은 논리적 볼륨이지만, 운영체제에서 접근을 하려면 장치로 인식되기 때문에
Logical Volume도 device file이 필요하다.
디바이스 파일의 주소
1) /dev/vg_name/lv_name
---> /dev/vgtest/yumifs
2) /dev/mapper/vg_name-lv_name
---> /dev/mapper/vgtest-yumifs
VG 확장
LV 확장
파일 시스템 확장 (온라인 중에 가능)
파일 시스템 축소 작업 --> 온라인 중에 불가능
e2cfsck : 축소하려는 파일 시스템에 문제가 없다는 검증 절차
LV 확장한 후 파일 시스템 확장해야 함.
파일 시스템을 축소한 후 LV 축소해야 함. (항상 FS <= LV)
확장했던 LV에 FS 구조 데이터가 남아있어서 경고가 뜬다.
FS 크기가 LV보다 작거나 같기만 하면 되기 때문에 y 입력해준다.
VG를 축소해주는 명령어 vgreduce (VG에서 안 쓰는 PV를 빼내는 것)
파일시스템이란 트리라는 논리적인 위치 정보(/etc/passwd)를 실제 데이터가 저장된 위치로 전환할 주소록이다.
파일시스템이 Tree라고 하는 논리적인 구조 안의 위치 정보를 가지고 있다가,
우리가 파일을 요청하면 파일시스템이 디스크의 실제 위치(실제 주소 번지)에서 가져온다.
(우리가 파일들의 실제 주소 번지를 다 외우지 못하기 때문에 사용)
윈도우의 파일시스템은 NTFS(New Technology File System), FAT32... 등이 있다.
리눅스의 파일시스템은 ext2, ext3, ext4... xfs 등을 사용한다.
디스크를 파일시스템으로 포맷하지 않으면 데이터를 파일 형태로 쓰지 못한다.
파티션 파일시스템 생성 --> 포멧
포멧은 데이터를 지우는 것이 아니라, 주소록(위치 정보 목록)을 초기화해서 접근하지 못하게 하는 것이다.
우리가 데스크탑에서 데이터를 삭제해도 디스크에는 데이터들이 그대로 남아있다.
(이러한 데이터를 지우기보단 덮어쓰기 위해 zeroning 등을 한다. 또는 디스크를 물리적으로 파손시킨다.)
리눅스의 파일 시스템 종류
1) ext (extended file system) : 리눅스 전용으로 개발된 파일 시스템 (리눅스에 최적화)
ext1 : 현재 리눅스에서 지원하지 않음 (성능 느림)
ext2 : ext1 성능 개선
ext3 : ext2 + 저널링(journaling, 매일매일 기록하는 것 = 파일 시스템 구조 정보 변경 사항 로그에 기록) 추가
(저널링이 없었던 ext2에서는 업데이트하다 중단되면 모두 찾아 복원(roll back, roll forward)을 해야 한다.)
(장애 이후 파일 시스템 복구 시간 단축을 위해 저널링 사용(현재 모든 시스템은 저널링 사용))
ext4 (default) : 최적화된 상태, 우분투에서는 기본으로 사용
2) xfs(eXetended file system) : SGI에서 iris라는 OS에 사용하기 위해 만듦, 파일 입출력 병렬처리 능력 좋음 (속도 빠름), 용량이 엄청 큼 --> 기업용 리눅스(enterprise)에서 사용 --> RedHat의 기본 파일 시스템으로 사용
파일시스템을 생성(포맷)하는 명령어
# mke2fs ( ext2/3/4만 생성 가능한 명령어, default ext2 )
# mkfs -t ext4 ( make file system의 약자 )
# mkfs -t xfs
# mkfs.xfs
# mkfs.ext4
파일 시스템 마운트 : 새로운 파일 시스템을 기존의 root 파일 시스템의 특정 디렉토리의 연결
윈도우와 다르게 리눅스는 반드시 Single /(root)로 구성되어야 한다.
즉, 트리 구조가 단일해야 한다. (윈도우에서는 C:\, D:\ 루트가 따로 이루어짐)
- 연결시 지점이 되는 디렉토리 : 마운트 포인트 (mount-point)
# mount (umount 하면 연결 해제)
# df -hT : 파일 시스템의 사용량을 확인 (마운트된 파일 시스템만 용량)
# lsblk
# mkdir /red
# mount /dev/sda1 /red
# mount -a (all) : /etc/fstab에 기록된 모든 항목을 마운트 연결
해당 파일 시스템을 사용하는 유저나 프로세스가 존재하는 경우 언마운트(umount)할 수 없다.
그래서 fuser 명령어를 사용해서 사용중인 유저/프로세스를 정리 후 언마운트해야 한다.
# fuser -cu /red 라는 명령어로 /red 디렉토리에 현재 누가 있는지 알 수 있다.
# fuser -ku /red 라는 명령어로 /red 디렉토리에 있는 유저(유저의 프롬프트)를 kill할 수 있다.
quota : 파일 시스템 단위로 사용자/그룹에게 디스크 사용량을 제한
/home 아래는 사용자별 1G까지 공간을 허락
/home/kim/9G의 파일을 저장하려고 하면 --> 오류남.
/home/lee
이런 것을 Disk quota라고 함.
**** /etc/fstab (file system table) : 부팅 시 자동으로 마운트할 파일 시스템 정보 기록
오타, 오류 있을 시 부팅 진행 안됨 (안전모드)
<file system> <mount point> <type> <options> <dump> <pass>
dev/sde1 /red ext4 defaults 0 0
dump : 리눅스의 백업하는 명령어, 리눅스 dump 명령어를 통해 백업할 때 해당 파일 시스템 포함(1)/불포함(0) 결정
fsck order : file system check의 약자, 비정상적인 시스템 종료 후 다음 부팅 시 복구 ---> 이것이 pass 컬럼이 됨.
(복구하겠다 1, 복구하지 않겠다 0)