DAS(Direct Attached Storage) ↔ Network Attached Storage(NAS)
하드 디스크 구조
-
하드디스크
- 물리적인 장치
- 자기(Magnetic)을 사용한 데이터 기록
- 주요부품
- 플래터(Platter) : 실제 전/자기를 사용하여 데이터를 기록하는 부분
- 스핀들(Spindle) : 모터, 플래터를 회전시킴 (7200rpm, 5400rpm…)
- 헤드(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 ~ ...
파티션(Partition)
- 물리적으로 하나인 디스크를 논리적으로 분리하여 사용
- 파티션의 장점
- OS 및 데이터영역 분리 관리가 가능
- 다중 OS 사용가능
- Swap 용도로 사용이 가능하다.
- 공간의 체계적인 구성
파티션의 종류
MBR(Master Boot Record)
- 디스크의 파티션을 구성하기 위한 방식
- 디스크 1개의 섹터에 디스크 파티션에 대한 내용을 저장
- Boot Code + Partition Table + Signature = 512Byte
Boot Code : 파티션으로 부팅을 시키기 위해 필요한 실행코드
Partition Table : 실제 디스크의 파티션 구조 정보(64Byte)
Signature : MBR을 나타내는 특징적인 데이터
- Partition Table
- 파티션 정보를 저장
- 최대 4개의 파티션 정보를 저장 - 각 파티션별 데이터 크기 : 16Byte
- 부트가능 플래그(1Byte)
- 파티션의 유형(1Byte)
- 파티션의 시작주소, 파티션의 끝 주소(CHS)(각 3Byte)
- 파티션의 시작주소, 파티션의 크기(LBA)(각 4Byte)
- 파티션의 섹터주소 범위 : 2^32개 섹터 사용 →최대 약 43억개 섹터 사용 가능 →최대 사용가능한 디스크의 크기 2TiB
- MBR은 BIOS와 연관된 기술
- MBR은 반드시 LBA 0번 사용
- 확장 파티션 : MBR특성상 최대 4개까지만 파티션이 생성 가능
- 파티션의 유형을 주(Primary)파티션과 확장(Extended)파티션으로 구분
GPT(GUID Partition Table)
- 디스크의 파티션을 구성하기 위한 방식
- 디스크의 1개의 섹터를 Protective MBR로 사용 + 1개의 섹터를 GPT헤더(Header)
- 파티션 테이블을 별도로 저장 : 1개의 파티션당 128Byte를 사용 x 파티션 128개 사용가능
- GPT 정보의 백업이 존재 : LBA0~33 까지의 백업이 디스크의 가장 마지막에 백업으로 위치
- 파티션에서 사용할 수 있는 디스크의 크기 확장 : LBA주소의 크기 8Byte - 이론상 최대 8ZiB
- 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 규격에서 사용하는 연결방식, Hot Plugging 지원하지 않음, 연결가능한 디스크의 개수가 최대 4개로 제한(메인보드 연결포트에 따라 Primary/Secondary)(한 케이블에 연결된 두 디스크를 각각 Master/Slave)
- S-ATA : 현재 대부분의 데스크탑 시스템 등에서 사용하는 인터페이스, Hot Plugging 지원, 연결가능한 디스크의 개수는 메인보드의 SATA 포트의 개수에 영향
- SCSI(Small Computer System Interface) : Hot Plugging 지원, 여러대의 장치를 한꺼번에 연결 가능
- SA-SCSI(SAS) : Serial Ataatched SCSI , 현재 서버시스템에서 사용하는 주요 인터페이스
저장장치 파일이름
- 리눅스 시스템은 모든 장치를 파일로 관리 - 디스크는 블록장치 파일
- 장치파일은 /dev에 있음
- 디스크 장치는 파일유형에서 블록으로 조회(ls -l /dev | grep '^b')
- 장치 파일의 파일명은 연결 인터페이스와 관련
- 맨 첫번째 글짜 - 연결인터페이스와 관련
- s : SATA, SCSI
- h : IDE(현재는 IDE도 s 사용)
- v : 가상화 시스템에서 사용하는 가상디스크
- 두 번쨰 글자 - 장치의 종류
- 세 번째 글자 - 장치 순번
- a, b, c, d ... : 디스크 장치의 순번
- 0, 1, 2, 3... : 광학디스크 장치의 순번
- 네번째 글자 - 파티션 번호
리눅스 시스템에서 추가한 저장소 장치 인식 방법
/sys/class/scsi_host/host(#은 0부터 시작하는 번호)
- 해당 파일은 링크로 연결되어 있음
- 링크 연결되어 있는 디렉토리 내에 scan 파일을 사용하여 장치를 인식
- echo "- - - "명령어를 사용하여 scan 파일로 출력을 리다이렉트
echo ‘- - -’ 명령어를 사용하여 scan 파일로 출력을 리다이렉트
- echo ‘- - -’ > /sys/class/scsi_host/host0/scan
- echo ‘- - -’ > /sys/class/scsi_host/host1/scan
- echo ‘- - -’ > /sys/class/scsi_host/host2/scan
- …
파티셔닝(Partitioning)
fdisk : CLI 명령어, 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 withour saving changes
- -t : change a partition's system id : 파티션 종류 변경(L: 목록 확인)
- -w : write table to disk and exit : 저장하고 종료
- 사용중인 디스크의 파티션 정보 변경시 변경사항 적용
- 사용중인 디스크의 파티션정보는 이미 시스템에서 인식하고 있는 상태
- 변경사항 저장시(w) 바로 시스템이 인식되지 않고 대기, 경고메시지 출력
- partprobe 명령어를 사용하여 변경된 파티션 정보를 시스템에 전달
#partprobe <변경된 장치명>
eg)#partprobe /dev/sdb
- 파티션 생성시 입력항목
- 파티션의 유형 : primary, extended
- 파티션 번호 : 1~4(primary), 5~(extended)
- 시작 섹터주소(LBA)
- 파티션의 마지막 섹터 주소/ 사용할 섹터 갯수/ 사용할 용량
- 확장 파티션
- 일반적으로 3개의 파티션을 primary로 생성
- 4번째 파티션을 extended 로 생성
- 5번 이후 파티션은 자동으로 logical 파티션 유형 지정
gdisk : CL I명령어, 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 withour saving changes
- t : change a partition's system id : 파티션 종류 변경(L: 목록 확인)
- w : write table to disk and exit : 저장하고 종료
- 파티션 생성시 입력항목
- 파티션 유형은 선택하지 않음(주 파티션만 지원)
- 시작 섹터 주소 (LBA)파티션의 마지막 섹터 주소 / 사용할 섹터 개수 / 사용할 용량
- 파티션의 유형을 생성시 바로 지정
parted : CLI 명령어, 비대화형 파티셔닝 가능 - kiskstart : 네트워크를 통한 리눅스 자동설치시 사용
- 주요옵션
- -l : 디스크 별 파티션 상태 확인
- -m : 출력 형식 변경 (: 기호로 항목 분류)
- -s : 비대화형 실행 옵션
- parted를 사용한 비대화형 파티션 설정방식
- 파티션 유형 설정명령
parted -s /dev/sdb mklabel msdos(MBR)
- 파티션 유형 확인 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/ mkpark primary 0%30% (0MB 100MB)
parted -s /dev/sdb/ mkpark primary 30%60% (100MB 500MB)
parted -s /dev/sdb/ mkpark prymary 60%100% (500MB 1000MB)
- mkpart 시 파티션 유형별 주의사항
- MBR : 파티션 타입 지정필요(primary, extended) →
parted -s /dev/sdb mkpart **primary** 0% 100%
- GPT : 파티션 이름 지정 필요 →
parted -s /deb/sdb mkpart**test**0% 100%
- parted 명령어 정리
- mklabel : 파티션 유형 지정
- mkpart : 파티션 생성
- rm : 파티션 삭제
- select: 장치 선택(변경) - (parted) select /dev/sdb
- unit: 사용할 단위 선택 KB, MB, GB , compact : 자동 단위 선택 - (parted) unit GB
- print : 현재 파티션 정보 출력
- print devices : 장치 정보
- print free : 기본적인 출력 내용 + 할당되지 않은 영역 정보
디스크 초기화 방법
dd if=/dev/zero of=/dev/sdb bs=512 count=100 #디스크를 0으로 덮어서 초기화 하는 방식
- dd: Disk Dump. 데이터를 기록하기 위한 명령
- if: 원본
- of: 사본
- bs: 블럭 사이즈
- count: 블럭 개수
- 네트워크 연결 설정 방법
네트워크 연결 생성
# nmcli connection add con-name dhcp ifname ens33 type ethernet
네트워크 연결 사용
# nmcli connection up dhcp
네트워크 서비스 재시작
# systemctl restart NetworkManager
파일시스템(File System)
- 파티션 내에 파일/디렉토리를 적재하는 방식
- 어떤 방식으로 데이터를 저장할 것인지, 어떤식으로 탐색할지...
- 운영체제와 많은 연관
파일시스템의 구성
- 메타영역 : 파일들의 속성, 파일시스템 자체의 정보
- 데이터영역 : 실제 파일의 내용이 저장되는 영역
파일시스템의 종류
- 디스크 기반 파일시스템
- 유닉스 - UFS(Unix File System, Universal File System)
- 리눅스 : ext(Extended File System) - ext2, ext3, ext4, xfs(SGI사에서 제작한 file system)
- Windows : FAT(File Allocation Table) - FAT16, vFAT, FAT32, FAT64(exFAT), NTFS(NT File System), ReFS(Resilient File System)
- 광학디스크용 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 [파일시스템이름]
파일시스템 생성
마운트
- 파일시스템이 생성되어 있는 파티션을 연결하는 과정
- 마운트포인트와 장치를 연결
- 마운트포인트는 사전에 생성되어 있어야 함
- 마운트 명령어 : mount
- 사용법 : mount [옵션] <마운트할 장치이름> <마운트 포인트>
- 마운트 상태확인 : #mount
- 마운트제거
- 마운트 되어있는 장치를 연결 해제
- 명령어 : umount
- umount <장치이름>
- umount <마운트포인트>
- 시스템 부팅 시 자동으로 마운트하기 위한 설정
저장소 설정의 흐름
장치인식 →파티션 설정→파일시스템 생성→마운트
스왑(Swap)
- 물리적 장치인 디스크의 공간을 메모리처럼 사용하는 방식
- 당장 필요하지 않은 메모리 데이터를 보조기억장치로 이동시켰다가(Swap Out), 다시 필요할 때 불러오는(Swap In) 동작
- 마치 실제 물리메모리가 증가된 것 같은 효과를 가져옴
- 스왑이 빈번하게 일어날 경우 시스템의 성능이 굉장히 저하됨(Swap Out, Swap In 과정에서 발생하는 지연)
스왑 확인
- 시스템 상태 조회 명령
- top : 윈도우의 작업관리자와 유사하게 시스템 상태 및 프로세스 별 정보를 실시간으로 갱신하며 출력
- free : 현재 메모리 상태를 출력
- swapon -d : 현재 시스템의 스왑 등록 상태
- swapon -a : 현재 시스템의 스왑 상태
- 스왑의 종류
- 스왑 파티션 : 파티션 전체를 스왑 용도로 사용, 파티션으로 할당할 수 있는 공간이 필요
- 스왑 파일 : 파일을 생성해서 그 파일을 스왑 용도로 사용, 파일시스템의 가용공간을 사용하여 스왑 사용 가능하다는 장점
- 스왑등록 과정 디스크인식 - 파티션생성 -스왑파티션 생성 - 스왑등록
- 스왑 파티션 생성
- 생성된 스왑 파티션 등록
- 등록된 스왑파티션 해제
- 스왑파일
- 스왑파일은 루트(/) 파일시스템이 아닌 다른 저장소를 사용할 것(성능 등)
- 스왑 파일이 저장될 파티션 및 파일시스템 생성
- 파티션 생성 →파일시스템 생성→마운트→파일생성→스왑파일로 변경→스왑등록
- 파일 생성 : dd if=/dev/zero of=/swapdir/swapfile bs=512 count=100000→약 50MB 정도의 빈 파일이 생성됨
- 파일 권한 정보 변경chmod 600 /swapdir/swapfile
- 스왑파일로 변경mkswap /swapdir/swapfile
- 스왑해제 : swapoff /swapdir/swapfile
- 스왑 자동등록
- /etc/fstab 파일을 등록하여 등록 <장치/파일이름> swap swap defaults 0 0
- mount -a : 일반적인 마운트 항목만 적용