System/Linux

[Linux] 저장소(Storage)관리

Yoonsoo Park 2024. 9. 24. 20:22

1. 저장소의 종류 

자기 저장 장치

  • magnetic, 자기적 성질을 이용해 저장
  • HDD(Hard Disk Drive)
  • Tape Drive

플래쉬 메모리(Flash Memory)

  • flash, 전기적 방식으로 저장 
  • SSD(Solid State Memory)
  • USB Thumb Drive(USB memory)

광학 저장 장치

  • optical, 레이저 광을 이용해 저장
  • CD/DVD/BlueRay

 

 

2. 하드 디스크의 물리적/논리적 구조 

1) HDD의 물리적 구조 

<HDD의 구조>

스핀들(회전축, Spindle moter)

  • 플래터를 일정하 속도로 회전시킨다(속도가 변하면 데이터를 읽고 쓰기 어렵다)
  • 노트북용5400rpm, 일반PC7200rpm, 서버용10000rpm/15000rpm..

디스크(Disk), 플래터(Platter)

  • 자력을 이용하여 실제 데이터가 저장되는 공간 

읽기/쓰기 헤드(Read/Write Head)

  • 전자석으로 제작되어 플래터의 표면에 데이터를 읽고 쓰는 장치 
  • 최대한 작게 만들어야 많이 기록 가능

엑츄에이터 암(Actuator Arm)

  • 헤드를 이동시키는 기구

제어기판 

  • 모터 회전 제어
  • 엑츄에이터 암 제어 
  • 인터페이스: 하드디스크와 하드디크스 콘트롤러(메인보드)와 통신
    • PATA(Parrellel ATA): 옛날 방식(IDE) 
    • SATA(Serial ATA): 일반적인 PC/노트북/저성능 서버 
    • SCSI(스커지스카시): 가장 일반적으로 사용되는 하드디스크 인터페이스, 병렬 데이터 전송, SAS로 대체
    • SAS(Serial Attached SCSI): 서버와 데이터 센터에서 사용되는 고성능 인터페이스, SCSI의 직렬 버전
    • FC(Fibre Channel): SAN(Storage Area Network)에서 사용되는 고속 데이터 전송 인터페이스

 

 

2) HDD의 논리적 구조 

<HDD의 논리적 구조>

섹터(Sector)

  • 하드 디스크의 기본 데이터 저장 단위, 부채꼴 모양
  • 일반적으로 512byte 또는 4KB의 크기를 가짐

트랙(Track)

  • 플래터 표면에 있는 원형의 경로(여러 개의 섹터로 구성됨)
  • 디스크가 회전하고, 헤드가 부채꼴 모형으로 이동하기 때문에 원형으로 구성

실린더(cylinder)

  • 각 디스크마다 같은 위치의 트랙들은 하나의 실린더에 속해있다
  • 헤드의 이동을 최소화하기 위해 실린더의 개념을 적용
  • 헤드 어셈블리: 여러 개의 헤드가 한 덩어리로 묶여서 작동 

 

 

3. HDD와 SSD의 차이 

저장 방식 자기적 성질을 이용한 데이터 저장 전기적 방식으로 데이터 저장
속도 느림, 회전 속도에 의존 (5400-7200 RPM) 매우 빠름, 기계적 부품이 없어 랜덤 액세스 우수
내구성 기계적 부품 때문에 충격에 약함 기계적 부품 없음, 충격에 강함
수명 쓰기 수명에 제한이 없음 쓰기 수명 제한 있음 (NAND 플래시 셀)
가격 용량당 저렴 (대용량에 유리) GB당 가격이 높음
용도 대용량 데이터 저장, 백업, 서버, 데이터센터 빠른 데이터 접근이 필요한 장치, 휴대용 장치, 고성능 PC

 

결론적으로, HDD대용량 데이터 저장을 저렴하게 제공하고, SSD빠른 속도와 내구성으로 고성능 컴퓨터와 휴대용 장치에 주로 주로 사용된다.   

 

* 스토리지를 리눅스가 인식하면 /dev/sda (첫 번째 스토리지), /dev/sdb (두 번째 스토리지), /dev/sdc (세 번째 스토리지).. 와 같은 이름의 장치 디렉토리 만든다. 여기서 sd는 SCSI (Small Computer System Interface) 디스크를 의미하는 약자이다. 현재는 SCSI 외에도 SATA, SAS, USB와 같은 저장 장치도 동일하게 sd라는 명칭으로 인식한다. 

 

 

4. 저장공간을 나눠쓰자, 파티션(Partition)

 파티션(Partition)큰 저장 공간을 각기 다른 용도(운영체제 설치..)로 사용하기 위해 논리적으로 분할하는 것을 의미한다. 파티션을 통해 하나의 물리적인 저장소(HDD, SSD..)를 여러 개의 독립적인 공간으로 분할하고, 각 공간에 개별적으로 운영체제 또는 파일 시스템에 할당할 수 있다.

 

 한 저장소를 여러 개의 파티션으로 분할하게 되면, 몇 개로 분할했는지, 파티션 별 용량(크기)는 얼마인지, 파티션의 위치(시작과 끝)는 어디인지를 규정하고 관리해야할 필요가 있다.  이러한 파티션 분할 정보표(테이블) 형태로 관리하게 되는데, 이를 파티션 테이블이라고 하고, 파티션 테이블에는 2가지 방식이 있다(운영체제는 파티션 테이블을 참고하여 디스크의 논리적 구성을 이해하고 관리한다). 

 

 

파티션 테이블 관리 방식

1) MBR(Master Boot Record)

  • 디스크의 첫 번째 섹터(0번 섹터)에 존재하며, Boot Strap Code, Patition Table을 포함한다
  • Boot Strap Code: 하드디스크로 부팅을 시작할 때 처음으로 실행되는 코드(기계어코드)와 에러메시지                                                       ( 파괴될 경우 부팅이 되지 않는다)
  • Patition table: 하드디스크의 분할(파티션) 정보를 기록하는 공간                                                                                                          ( 파괴될 경우 파티션 확인이 불가하고, 부팅, 읽어오기도 불가하다)
  • 각 파티션의 크기가 최대 2TB까지 가능하다
  • 옛날 방식이라 GPT에게 자리를 넘겨주는 중이나 호환성 문제로 아직 많이 사용된다
  • BIOS(Basic I/O System)에서 사용

2) GPT(GUID Partition Table)

  • GUID: 각 파티션과 디스크 자체에 대해 전역 고유 식별자(Global Unique Identifier)를 사용
  • MBR의 제약 사항을 해결, 128개의 파티션을 지원하며, 파티션 크기를 8ZB까지 지원
  • 백업 GPT: 디스크의 끝 부분에 GPT 헤더와 파티션 테이블의 백업을 저장하여 데이터 손상 시 복구를 용이하게 한다
  • 현대적인 UEFI (Unified Extensible Firmware Interface) 시스템에서 사용

 

*BIOS? UEFI?

  • BIOS:
    • 오래된 시스템에서 사용.
    • MBR과 함께 동작.
    • 16비트 코드로 동작하며, 제한된 메모리 공간에서 운영.
    • 단순한 인터페이스와 기능.
  • UEFI:
    • 최신 시스템에서 사용.
    • GPT와 함께 동작.
    • 32비트 또는 64비트 코드로 동작하며, 더 많은 메모리 공간과 확장성을 제공.
    • 네트워킹, 보안 부팅, 그래픽 인터페이스 등 더 많은 기능 제공.

*MBR과 GPT의 부팅 방식

MBR(BIOS): 메인보드의 BIOS가 MBR에 있는 부트스트랩 코드를 실행시키면 부트스트랩 코드가 주 파티션(부트 파티션)의 운영체제에 포함된 부트 로더를 실행시켜 부팅한다

GPT(UEFI): 메인보드의 UEFI가 EFI 시스템 파티션엣 부팅 로더를 실행하여 부팅한다

 

 

*앞서 리눅스가 스토리지를 인식하면 sda, sdb.. 와 같은 이름의 장치 파일을 만든다고 언급한 바 있다. 해당 저장 장치를 분할하여 만든 파티션은 /dev/sdb1, /dev/sdb2, /dev/sdb3.. 와 같은 이름의 디렉토리를 만든다. 

<파티션 예시>

 

 

파티션의 종류 

MBR에서는 파티션을 주 파티션, 확장 파티션, 논리 파티션(드라이브)으로 구분한다. 반면 GPT에서는 주 파티션, 논리 파티션의 구분 없이 모든 파티션이 GUID Partition(지 파티션)이다. 

 

1) 주 파티션(Primary Partition)

  • 스토리지의 가장 기본적인 파티션
  • MBR 방식에서는 최대 4개의 주 파티션을 만들 수 있다
  • 주 파티션 중 하나에는 부트로더(GRUB..)가 실행되는 부팅 파티션이다 
  • 논리 드라이브(파티션)을 사용하는 경우, 한 칸은 확장 파티션의 공간으로 사용되어 실제 데이터를 저장하는데 사용할 수 없다

2) 확장 파티션(Extended Partition)

  • 실제 데이터를 저장하지 않고, 그 안에 논리 드라이브를 생성해 더 많은 파티션을 만들 수 있게 한다
  • 확장 파티션을 사용할 경우, 주 파티션은 3개만 사용 가능하다

3) 논리 파티션(Logical Partition)

  • 확장 파티션 내에 존재하는 파티션으로, 주 파티션과 비슷한 방식으로 사용된다
  • 논리 파티션은 MBR에 직접적으로 부팅할 수 없는 구조로 되어있다
  • 운영 체제를 설치할 수는 있지만, 부팅 파티션은 주 파티션이어야 함 

 

 

파티션 설정 방법 및 명령어

 스토리지를 분할하여 파티션을 설정하고 실제로 사용하기 위해서는 다음과 같은 과정을 수행해야 한다.

스토리지 장착  ==>  파티션 설정  ==>  포맷(파일 시스템 생성)  ==>  디렉토리에 마운트

 

먼저 하드디스크 같은 스토리지를 탑재한 후, fdisk 명령어를 통해 파티션을 생성/삭제/확인이 가능하다.

fdisk -l 
=> 하드디스크와 파티션 목록 출력

fdisk [파티션을 설정할 스토리지]
=> 파티션 설정 명렁어

ex) 
fdisk /dev/sdb
=> 두 번째 하드디스크에 파티션을 설정하라

 

<fdisk -l을 통해 2번째 스토리지의 정보를 볼 수 있다>

 

<fdisk /dev/sdb를 실행한 모습>

 

fdisk 명령어를 통해 들어간 후  m을 입력하면 입력 가능한 명령어들이 나온다. 주로 사용하는 명령어는 다음과 같다.

  • m: 메뉴얼
  • n: 새로운 파티션 생성
  • d: 파티션 삭제
  • w: 설정 저장 (생성 후 꼭 하드디스크의 파티션 테이블에 기록/저장 해줘야 함)

<파티션 생성 과정>
<생성된 파티션>

 

*파티션의 크기를 설정할 때, 이전에는 섹터의 수로 지정했으나, 현재는 +500G 와 같이 용량을 지정할 수도 있다

*파티션의 크기를 설정할 때, 시작 섹터가 2048번인 이유는 0번 섹터에 존재하는 MBR을 비롯하여, GPT와의 호환성, 1MB 단위를 주로 사용하는 많은 운영 체제와 파일 시스템과 호환 시 정렬을 최적화하기 위해서이다. *해당 빈 섹터들은 운영 체제에 의해 관리되지 않기 때문에, 루트킷 공격과 같은 악성 소프트웨어에 의해 악용되기도 한다. 

(2048 x 512byte = 1MB)

 

파티션을 설정했다면, 생성된 파티션을 포맷(파일시스템 생성)을 해주고, 디렉토리를 만들어 마운트해준다. 

(파일 시스템과 마운트에 대해서는 다른 포스팅에서 더 자세히 다루겠다)

mkfs.[생성할 파일 시스템]

ex)
mkfs.xfs
mkfs.ext4

mkdir [디렉토리 명]
=> 디렉토리 생성

mount [마운트할 파티션] [마운트할 디렉토리]

ex)
mkdir movie
mount /dev/sdb1 /movie/

*마운트된 하드디스크 끊기
umount /dev/sdb

 

*만약 4개 이상의 파티션을 만든다면??

<4번째 파티션은 실질적으 사용이 불가능한 확장 파티션이다>

 

3개의 주 파티션을 만들고, 한 파티션을 확장 파티션으로 만든 뒤 논리 파티션을 확장 파티션 내에 넣는 방식으로 4개 이상의 파티션을 만들 수 있다. 

 

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디,

"obstacles don't have to stop you. If you run into a wall, don't turn around and give up,. Figure out how to climb it, go through it, or work around it", Micheal Jordan

 

"나를 가로막는 장애물이 있어도 돌아서거나 멈추지 말고, 이를 어떻게 이겨낼지 고민하고 노력하자"

 

 

'System > Linux' 카테고리의 다른 글

[Linux] 원격 관리 서비스(Telnet, SSH)  (1) 2024.09.26
[Linux] 파일 시스템, 마운트  (0) 2024.09.25
[Linux] init? runlevel? target?  (0) 2024.09.23
[Linux] 작업 예약 명령어: cron  (2) 2024.09.21
[Linux] DHCP  (0) 2024.09.21