저장소 관리
DAS(Direct Attached Storage) ↔ Network Attached Storage(NAS)
디스크 구조
- 하드디스크
- 플래터(Platter): 실제 전/자기를 사용하여 데이터를 기록하는 부분
- 스핀들(Spindle): 모터, 플래터를 회전시킴 (7200 rpm, 5400 rpm…)
- 헤드(Head): 플래터의 데이터를 읽거나 기록하는 장치. 디스크의 각 플래터 위아래에 모두 있음. 디스크의 안쪽/바깥쪽으로 이동하며 데이터의 위치에 접근
- 액추에이터(Actuator): 헤드의 움직임을 제어하는 부분
- 데이터 최소 단위: 비트(Bit) → 바이트(Byte)
- 단위의 접두사: K(kilo), M(mega), G(giga), T(tera) → X 1000
- 정확한 용량 단위 : Ki(kibi), Mi(Mibi), Gi(Gibi), Ti(Tibi) → X 2^10
- 하드디스크는 ‘블록 장치’ : 데이터를 블록 단위로 읽고 씀
- 일반적인 하드디스크의 최소 입출력 단위 : 섹터 (512 Byte)
- 섹터(Sector) : 헤드가 고정된 상태에서 플래터의 한 면에 512Byte만큼 사용하기 위해 플래터를 살짝 회전한 만큼의 크기
- 트랙(Track) : 헤드가 고정된 상태에서 플래터의 한 면에서 플래터를 한 바퀴 회전했을 때 접근할 수 있는 영역
- 실린더(Cylinder) : 각 플래터의 같은 위치의 위/아래면을 모두 모아놓은 영역
- CHS 주소 방식
- 물리적인 구조를 직접 지정하는 방식
- C(Cylinder), H(Head), S(Sector) 위치를 지정
- 현재는 잘 사용하지 않음 - 디스크 용량의 제한, 현재 디스크의 구조를 반영할 수 없음
- LBA 주소 방식
- 논리적인 주소를 지정하는 방식
- 물리적인 구조를 신경 쓸 필요가 없음. 디스크 내 컨트롤러에서 알아서 처리
- 순차 번호를 사용 : LBA 0 ~ …
- 물리적인 장치
- 자기(Magnetic)를 사용한 데이터 기록
- 주요 부품
- 하드디스크의 기록 단위
- 섹터의 주소 지정 방식
파티션(Partition)
- 물리적으로 하나인 디스크를 논리적으로 분리하여 사용
- 파티션의 장점
- OS 및 데이터 영역 분리 관리가 가능
- 다중 OS 사용 가능
- Swap 용도로 사용이 가능
- 공간의 체계적인 구성
- 파티션의 종류
- 디스크의 파티션을 구성하기 위한 방식
- 디스크의 1개의 섹터에 디스크 파티션에 대한 내용을 저장
- Boot Code + Partition Table + Signature = 512Byte
- Boot Code: 파티션으로 부팅을 시키기 위해 필요한 실행코드
- Partition Table: 실제 디스크의 파티션 구조 정보(64 Byte)
- Signature: MBR을 나타내는 특징적인 데이터
- Partition Table
- 부트 가능 플래그 (1Byte)
- 파티션의 유형 (1 Byte)
- 파티션의 시작 주소, 파티션의 끝 주소 (CHS) (각 3 Byte)
- 파티션의 시작 주소, 파티션의 크기 (LBA) (각 4 Byte)
- 파티션 정보를 저장
- 총 4개의 파티션 정보를 저장 - 최대 4개 파티션
- 각 파티션 별 테이블 크기 : 16Byte
- 파티션의 섹터 주소의 범위 : 2^32개 섹터 사용 → 최대 약 43억 개 섹터 사용 가능 → 최대 사용 가능한 디스크의 크기 2 TiB
- MBR은 BIOS와 연관된 기술
- MBR은 반드시 LBA 0번 사용
- 확장 파티션 : MBR 특성상 최대 4개까지만 파티션이 생성 가능 - 파티션의 유형을 주(Primary) 파티션과 확장(Extended) 파티션으로 구분
- MBR (Master Boot Record)
- GPT (GUID Partition Table)
- 디스크의 파티션을 구성하기 위한 방식
- 디스크의 1개의 섹터를 Protective MBR로 사용 + 1개 섹터를 GPT 헤더(Header)
- 파티션 테이블을 별도로 저장 : 1개의 파티션 당 128 Byte를 사용 X 파티션 128개 사용 가능
- GPT 정보의 백업이 존재 : LBA0~33까지의 백업이 디스크의 가장 마지막에 백업으로 위치
- 파티션에서 사용할 수 있는 디스크의 크기 확장 : LBA 주소의 크기 8Byte - 이론상 최대 8ZB(Zeta Byte)
- GPT는 EFI(Extensible Firmware Interface)와 관련됨
- GPT 파티션은 운영체제에서 GPT 파티션을 지원할 경우 사용 가능 (윈도 XP 이후, 현재 대부분의 리눅스)
- GPT 파티션으로 구성된 디스크를 부팅용 도로 사용하려면 EFI 방식의 펌웨어를 사용하여야 함
============================================================
시스템의 부팅 과정
- 전원 인가
- BIOS(Basic Input Output System, = 펌웨어, Firmware)가 동작
- POST(Power On Self Test) 수행
- BIOS는 CMOS(complementary metal–oxide–semiconductor, 설정 저장)의 설정값을 읽어 들여서 시스템을 구동
- 현재 연결된 디스크를 파악하고, MBR을 통해 부팅 가능한 파티션을 확인
- 해당 파티션의 VBR(Volume Boot Record) 정보를 참고하여 운영체제 부팅
========================================================
리눅스 시스템에서 디스크 저장소 장치 추가
시스템 구동 중 장치 추가
- Plug & Play
- Hot Plugging
- 시스템의 다운타임 없이 장치를 추가할 수 있는 기능
- 장치의 연결 인터페이스와 관련
디스크 연결 인터페이스
- E-IDE(P-ATA) : 구형 ATA 규격에서 사용하는 연결 방식. 핫 플러깅 지원하지 않음. 연결 가능한 디스크의 개수가 최대 4개로 제한 (메인보드 연결 포트에 따라 Primary/Secondary) (한 케이블에 연결된 두 디스크를 각각 Master/Slave)
- S-ATA: 현재 대부분의 데스크톱 시스템 등에서 사용한 인터페이스, 핫플러깅 지원. 연결 가능한 디스크의 개수는 메인보드의 SATA 포트의 개수에 영향
- SCSI(Small Computer System Interface) : 핫 플러깅 지원. 여러 대의 장치를 한꺼번에 연결 가능
- SA-SCSI(SAS): Serial-Attached SCSI. 현재 서버 시스템에서 사용하는 주요 인터페이스.
저장장치 파일 이름
- 리눅스 시스템은 모든 장치를 파일로 관리 - 디스크는 블록 장치 파일
- 장치 파일은 /dev에 있음
- 디스크 장치는 파일 유형에서 블록으로 조회 (ls -l /dev | grep ‘^b’)
- 장치 파일의 이름은 연결 인터페이스, 장치 종류 등과 관련
- s : SATA, SCSI
- h : IDE (현재는 IDE도 s를 사용)
- v : 가상화 시스템에서 사용하는 가상 디스크
- d : 디스크 장치
- r : 광학 디스크
- a, b, c, d.... : 디스크 장치의 순번
- 0,1,2,3…. : 광학 디스크 장치의 순번
- 1,2,3…. : 파티션 번호
- 맨 첫 번째 글자 : 연결 인터페이스와 관련
- 두 번째 글자: 장치의 종류
- 세 번째 글자: 장치 순번
- 네 번째 글자: 파티션 번호
리눅스 시스템에서 추가한 저장소 장치 인식 방법
- /sys/class/scsi_host/host# (#은 0부터 시작하는 번호)
- 해당 파일은 링크로 연결되어 있음
- 링크 연결되어 있는 디렉터리 내에 scan 파일을 사용하여 장치를 인식
- echo ‘- - -’ 명령어를 사용하여 scan 파일로 출력을 리다이렉트
- echo ‘- - -’ > /sys/class/scsi_host/host0/scan
- echo ‘- - -’ > /sys/class/scsi_host/host 1/scan
- echo ‘- - -’ > /sys/class/scsi_host/host2/scan
- …
==========================================================
파티셔닝(Partitioning)
- 디스크의 파티션 구조를 생성하는 작업
- MBR / GPT 모두 생성 가능
- 사용할 도구
- 별도로 설치가 필요함
- # yum -y install epel-release
- # yum -y install gparted
- # gparted
- kickstart: 네트워크를 통한 리눅스 자동 설치
- gparted (GUI)
- fdisk : CLI 명령어, MBR 방식의 파티션 생성, 대화형 설정 방식
- gdisk : CLI 명령어, GPT 방식의 파티션 생성, 대화형 설정 방식
- parted : CLI 명령어, 비대 화형으로 파티셔닝 가능
fdisk
- MBR 기반의 시스템에서 오랫동안 사용해 온 파티셔닝 도구
- 기본적으로 MBR 파티션을 생성
- 대화형 설정
- fdisk -l : 파티션 구성 확인
- fdisk <장치 파일명> : 장치 파티셔닝 수행
- d delete a partition : 파티션 개별 삭제
- l list known partition types : 사용 가능한 파티션의 종류 목록 확인
- n add a new partition : 새로운 파티션 생성
- p print the partition table : 현재 구성된 파티션 정보 확인
- q quit without saving changes : 저장하지 않고 종료
- t change a partition's system id : 파티션 종류 변경 (L: 목록 확인)
- w write table to disk and exit : 저장하고 종료
- 파티션 생성 시 입력항목
- 파티션의 유형 : primary(주), extended(확장)
- 파티션 번호 : 1~4 (주 primary), 5~(논리 logical)
- 시작 섹터 주소 (LBA)
- 파티션의 마지막 섹터 주소 / 사용할 섹터 개수 / 사용할 용량
- 확장 파티션
- 일반적으로 3개의 파티션을 primary로 생성
- 4번째 파티션을 extended로 생성
- 5번 이후 파티션은 자동으로 logical 파티션 유형 지정
gdisk
- GPT 기반의 시스템에서 오랫동안 사용해 온 파티셔닝 도구
- 기본적으로 GPT 파티션을 생성
- 대화형 설정
- gdisk -l : 파티션 구성 확인
- gdisk <장치 파일명> : 장치 파티셔닝 수행
- d delete a partition : 파티션 개별 삭제
- l list known partition types : 사용 가능한 파티션의 종류 목록 확인
- n add a new partition : 새로운 파티션 생성
- p print the partition table : 현재 구성된 파티션 정보 확인
- q quit without saving changes : 저장하지 않고 종료
- t change a partition's system id : 파티션 종류 변경 (L: 목록 확인)
- w write table to disk and exit : 저장하고 종료
- 파티션 생성 시 입력항목
- 파티션 유형은 선택하지 않음(주 파티션만 지원)
- 파티션 번호 : 1~4 (주 primary), 5~(논리 logical)
- 시작 섹터 주소 (LBA)
- 파티션의 마지막 섹터 주소 / 사용할 섹터 개수 / 사용할 용량
- 파티션의 유형을 생성 시 바로 지정
사용 중인 디스크의 파티션 정보 변경시 변경사항 적용
- 사용중인 디스크의 파티션 정보는 이미 시스템에서 인식하고 있는 상태
- 변경사항 저장 시(w) 바로 시스템에 인식되지 않고 대기. 경고 메시지 출력
- partprobe 명령어를 사용하여 변경된 파티션 정보를 시스템에 전달
- ex) # partprobe /dev/sdb
- # partprobe
- # partprobe <변경된 장치명>
parted
- 파티셔닝 수행 가능 (MBR/GPT)
- 비대 화형 실행 가능 (대화형 실행 가능)
- 주요 옵션
- -l : 디스크 별 파티션 상태 확인
- -m : 출력 형식 변경 (: 기호로 항목 분류)
- -s : 비대화형 실행 옵션
parted를 사용한 비대화형 파티션 설정 방식
- 파티션 유형 설정 반영
- 파티션 유형 설정 명령
- # parted -s /dev/sdb mklabel msdos
- 파티션 유형 확인
- parted 내에서 help mklabel
- # parted -s /dev/sdb help mklabel
- 파티션 생성
- 파티션 생성 (단일)
- # parted -s /dev/sdb mkpart primary 0% 100%
- mkpart 파티션 생성 명령
- primary : 주 파티션 유형
- 0% : 시작 위치를 %로 지정
- 100% : 마지막 위치를 %로 지정
- 다수의 파티션 생성
- 퍼센트 지정
- # parted -s /dev/sdb mkpart primary 0% 30%
- # parted -s /dev/sdb mkpart primary 30% 60%
- # parted -s /dev/sdb mkpart primary 60% 100%
- 용량 지정
- # parted -s /dev/sdb mkpart primary 0MB 100MB
- # parted -s /dev/sdb mkpart primary 100MB 200MB
- # parted -s /dev/sdb mkpart primary 200MB 300MB
- mkpart 시 파티션 유형별 주의사항
- MBR: 파티션 타입 지정 필요 (primary, extended)
- ex) parted -s /dev/sdb mkpart primary 0% 100%
- GPT: 파티션 이름 지정 필요
- ex) parted -s /dev/sdb mkpart test 0% 100%
parted 명령어 정리
- mklabel : 파티션 유형 지정
- mkpart : 파티션 생성
- rm : 파티션 삭제
- select: 장치 선택
- # parted
(parted) select /dev/sdb
- unit: 사용할 단위 선택
- KB, MB, GB : 해당 단위 사용
- compact : 자동으로 단위 선택
- print : 현재 파티션 정보 출력
- print devices : 장치 정보
- print free : 기본적인 출력 내용 + 할당되지 않은 영역 정보
참고) 디스크의 파티션 정보 삭제
# dd if=/dev/zero of=/dev/sdb bs=512 count=100
- dd: Disk Dump. 데이터를 기록하기 위한 명령
- if: 원본
- of: 사본
- bs: 블록 사이즈
- count: 블럭 개수
====================================================
파일 시스템 (Filesystem)
- 파티션 내에 파일/디렉터리를 적재하는 방식
- 어떤 방식으로 데이터를 저장할 것인지, 어떤 식으로 탐색할지…
- 운영체제와 많은 연관
파일 시스템의 구성
- 메타 영역 : 파일들의 속성, 파일시스템 자체의 정보
- 데이터 영역 : 실제 파일의 내용이 저장되는 영역
파일시스템의 종류
- 디스크 기반 파일시스템
- UFS(Unix File System, Universal File System)
- ext(Extended File System)
- ext2, ext3, ext4
- xfs (SGI사에서 제작)
- FAT (File Allocation Table)
- FAT 16, vFAT, FAT32, FAT64(exFAT)
- NTFS (NT File System)
- ReFS (Resilient File System)
- ISO9660
- UDFS(Universal Disk File System)
- 유닉스
- 리눅스
- 윈도즈
- 광학 디스크용 파일 시스템
- 분산 파일 시스템
- NFS(Network File System): Sun Microsystems(Solaris Unix) → Oracle이 인수. 현재 거의 대부분의 유닉스 계열 시스템에서 널리 사용
- SMB(Server Message Block) : Microsoft → CIFS(Common Internet File System), samba(리눅스에서 SMB 기능을 사용하기 위한 도구)
- Pseudo 파일 시스템
- /sys, /proc, /run…
- swap
- /dev
- 메모리 기반 파일 시스템
파일시스템 생성
- 파일 시스템은 반드시 디스크장치 파일이 아닌 파티션 파일을 지정하여 생성
- 파일 시스템 생성시 생성할 파일 시스템의 유형을 지정하여야 함 (지정하지 않을 경우 ext2로 생성)
- 파일시스템 생성 명령 : mkfs
- -t : 파일시스템의 유형 (xfs, ext2, ext3, ext4….)
- mkfs.[파일 시스템이름]
- mkfs 주요 옵션
마운트
- 파일시스템이 생성되어 있는 파티션을 연결하는 과정
- 마운트 포인트와 장치를 연결
- 마운트 포인트는 사전에 생성되어 있어야 함
- 마운트 명령어: mount
- 사용법: mount [옵션] <마운트 할 장치 이름> <마운트 포인트>
- 마운트 상태 확인:
- # mount
마운트 제거
- 마운트 되어 있는 장치를 연결 해제
- 명령어: umount
- umount <장치 이름>
- umount <마운트포인트>
- 파일 시스템 사용 시는 마운트 해제가 되지 않음
- 해당 디렉터리에 진입하여 있을 경우 (cd <마운트 포인트>)
- 해당 파일 시스템 내의 파일을 열고 있을 경우
시스템 부팅 시 자동으로 마운트 하기 위한 설정
/etc/fstab
ⓐ/dev/mapper/centos-root ⓑ/ ⓒxfs ⓓdefaults ⓔ0 ⓕ0
ⓐ 마운트 할 장치 이름
ⓑ 마운트 포인트
ⓒ 마운트 할 파일 시스템 종류
ⓓ 마운트 옵션(defaults 기본 옵션)
ⓔ 덤프 (0: 덤프 안 함, 1~ : 덤프 순번)
ⓕ 파일 시스템 체크 (0: 파일시스템 체크 안 함, 1~ : 체크 순번)
UUID(universally unique identifier)
- 장치를 식별하기 위한 고유한 식별자
- 시스템 내에서 다른 장치/개체와 중복되지 않음
저장소 장치의 UUID를 확인하는 방법
- blkid
/etc/fstab 파일 수정 후 설정 확인
- 마운트가 해제된 상태에서
- # mount -a
→ /etc/fstab 파일의 내용대로 마운트 수행 - 정상적으로 마운트 되었는지 확인 (설정 오류가 있을 경우 마운트 되지 않음)
/etc/fstab 파일 비정상 수정 시 부팅 불가
→ Emergency mode로 부팅됨
→ 파일 수정 후 재부팅
==========================================
저장소 설정의 흐름
장치 인식 → 파티션 설정 → 파일 시스템 생성 → 마운트
=========================================
스왑(Swap)
- 물리적 장치인 디스크의 공간을 메모리처럼 사용하는 방식
- 당장 필요하지 않은 메모리 데이터를 보조기억장치로 이동시켰다가(Swap Out) 다시 필요할 때 불러오는(Swap In) 동작
- 마치 실제 물리 메모리가 증가된 것 같은 효과를 가져옴
- 스왑이 빈번하게 일어날 경우 시스템의 성능이 굉장히 저하됨
스왑 확인
- 시스템 상태 조회 명령
- top : 윈도의 작업 관리자와 유사하게 시스템 상태 및 프로세스 별 정보를 실시간으로 갱신하며 출력
- free : 현재 메모리 상태를 출력
- swapon -d : 현재 시스템의 스왑 등록 상태
- swapon -a : 현재 시스템의 스왑 상태
스왑의 종류
- 스왑 파티션 : 파티션 전체를 스왑 용도로 사용, 파티션으로 할당할 수 있는 공간이 필요
- 스왑 파일 : 파일을 생성해서 그 파일을 스왑 용도로 사용, 파일 시스템의 가용 공간을 사용하여 스왑 사용 가능하다는 장점
스왑 등록 과정
디스크 인식 - 파티션 생성 - 스왑 파티션 생성 - 스왑 등록
- 스왑 파티션
- 스왑파티션 생성
- 명령어 : mkswap <파티션 장치명>
- 생성된 스왑 파티션 등록
- swapon <스왑 파티션명>
- 등록된 스왑 파티션 해제
- swapoff <스왑 파티션명>
- 스왑 파일
- 스왑 파일은 루트(/) 파일 시스템이 아는 다른 저장소를 사용할 것(성능 등)
- 스왑 파일이 저장될 파티션 및 파일시스템 생성
- 파티션 생성 → 파일시스템 생성 → 마운트 → 파일 생성 → 스왑 파일로 변경 → 스왑 등록
- dd if=/dev/zero of=/swapdir/swapfile bs=512 count=100000
- 약 50MB 정도의 빈 파일이 생성됨
- chmod 600 /swapdir/swapfile
- mkswap /swapdir/swapfile
- swapon /swapdir/swapfile
- swapoff /swapdir/swapfile
- 파일 생성
- 파일 권한 정보 변경
- 스왑파일로 변경
- 스왑 등록
- 스왑 해제
스왑 자동 등록
- /etc/fstab 파일을 사용하여 등록
- <장치/파일 이름>swap swap defaults 0 0
- 등록된 스왑 동작 테스트 : swapon -a
- mount -a : 일반적인 마운트 항목만 적용
*이 포스팅은 엔코아 플레이 데이터 수업 내용을 참고로 합니다.
'IT > Linux' 카테고리의 다른 글
systemd (0) | 2021.03.29 |
---|---|
저장소 관리(LVM,RAID) (0) | 2021.03.27 |
권한 / 프로세스 (0) | 2021.03.24 |
리눅스 사용자 관리 (0) | 2021.03.23 |
리눅스 기본 명령어 (0) | 2021.03.22 |
댓글