Linux Storage Management

김재현·2023년 8월 2일
1

Linux

목록 보기
9/12
post-thumbnail

Disk Partitioning

디스크 파티셔닝은 하나의 물리적인 디스크를 여러 논리적인 파티션으로 나누는 과정을 말한다.
파티셔닝을 할 경우 각 파티션은 독립적으로 관리되고 파일 시스템을 생성하여 데이터를 저장할 수 있다.

1. MBR(Master Boot Record)

디스크의 처음 부분에 위치하는 파티션 테이블 형식으로 BIOS 기반 시스템에서 주로 사용된다.
최대 4개의 기본 파티션을 지원하며 하나의 기본 파티션을 확장 파티션으로 만들어 여러 논리 파티션을 생성할 수 있다.
하지만 MBR의 한계로 더 많은 파티션을 생성할 수 없는 경우도 있다.

2. GPT(Guid Partition Table)

UEFI 기반 시스템와 일부 최신 시스템에서 사용되는 파티션 테이블 형식이다.
최대 128개의 파티션을 지원하며 복구와 데이터 무결성을 위한 여러 기능을 제공한다.

파티셔닝을 수행하는 도구는 일반적으로 fdisk, parted, gdisk 가 있다.
# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x88b5c1e2.

Command (m for help): n

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended

Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
// 아무런 입력 값이 없을 경우 default (2048) Sector 로 설정됨.

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
// 아무런 입력 값이 없을 경우 default (10485759) Sector 로 설정됨.

Using default value 10485759
Partition 1 of type Linux and of size 5 GiB is set

Command (m for help): p

Disk /dev/vdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x88b5c1e2

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    10485759     5241856   83  Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

# lsblk

NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
vdb           252:16   0    5G  0 disk 
└─vdb1        252:17   0    5G  0 part

File System

시스템의 저장 장치(HDD, SDD 등)에 파일과 디렉터리를 저장하는 방식과 데이터를 읽고 쓰는 규칙을 정의하는 체계이다.
운영 체제에서 파일과 디렉터리를 구조화하고 저장하여 데이터를 쉽게 관리하고 접근할 수 있도록 한다.

1. 데이터 저장과 조직

컴퓨터 디스크에 파일과 디렉토리를 저장하고 이들을 조직적으로 관리한다.
파일 시스템은 파일의 크기, 위치, 이름 등을 추적하고 데이터를 클러스터화하여 효율적으로 관리한다.

2. 디렉토리 구조

디렉토리 구조를 지원하여 파일들을 계층적으로 구성한다.
이를 통해 사용자는 파일들을 특정한 카테고리에 맞게 분류하고 논리적으로 정리할 수 있다.

3. 파일 액세스

파일을 읽고 쓰는 규칙을 정의하여 사용자가 파일에 접근하고 데이터를 변경할 수 있도록 한다.
파일 시스템은 액세스 권한을 관리하여 보안을 유지하고 데이터를 보호한다.

4. 파일 시스템 종류

여러 가지 파일 시스템이 존재하며 각각의 파일 시스템은 특정 운영 체제나 장치에 최적화되어 있다. 일반적으로 리눅스에서는 ext4, xfs, btrfs 등의 파일 시스템을 사용하고, 윈도우는 NTFS, FAT32 등을 사용한다.

5. 파일 시스템 유틸리티

사용자가 파일과 디렉토리를 관리할 수 있도록 명령어와 유틸리티를 제공한다.
리눅스에서는 ls, cd, cp, mv, rm 등의 명령어가 있으며, 윈도우는 탐색기를 통해 파일 시스템을 관리할 수 있다.

  • 파일 시스템 생성
    # mkfs.ext4 /dev/sda1

  • 파일 시스템 마운트
    # mount /dev/sda1 /test-dir
    # df -Th

  • 영구 마운트 적용
    # vi /etc/fstab

	...
	/dev/sda1		/test-dir		ext4		defatuls		0 0
  • fstab 파일 확인
    # mount -a
    // 이 명령어를 입력했을 때 오류가 발생할 경우 fstab 파일을 확인해야 한다.

LVM

리눅스/유닉스 기반 시스템에서 디스크 파티셔닝을 더욱 유연하게 관리하기 위한 기술이다.
물리적인 디스크를 논리적은 볼륨 그룹으로 나누고, 이 볼륨 그룹을 논리 볼륨으로 나눌 수 있다.
파티션의 크기를 확장하거나 여러 디스크를 하나의 논리 볼륨으로 결합하는 등의 유연한 디스크 관리가 LVM의 핵심 기능이다.

1. 물리 볼륨(Physical Volume, PV)

물리적인 디스크 또는 파티션에 해당하며 LVM이 사용하는 기본 저장 장치이다.

2. 볼륨 그룹(Volume Group, VG)

PV의 그룹을 말한다.
하나 이상의 PV를 묶어서 사용하고 PV들의 용량을 합쳐서 하나의 큰 공간으로 사용한다.

3. 논리 볼륨(Logical Volume, LV)

생성된 VG에서 일부 공간을 할당받아 파일 시스템을 생성하여 사용할 수 있다.
크기를 동적으로 확장할 수 있어 용량 변경이 간단하고 유연하다.

  • 특정 디스크를 pv로 생성
    # pvcreate /dev/sda1

  • pv를 vg로 생성
    # vgcreate testVG /dev/sda1

  • 기존 vg를 확장
    # vgextend testVG /dev/sda2

  • 크기를 단위로 지정하여 새로운 lv 생성
    # lvcreate -n testLV01 -L 20G testVG

  • 크기를 %로 지정하여 새로운 lv 생성
    # lvcreate -n testLV02 -l +100G testVG

  • 기존 lv를 확장(vg에 여유 공간이 필요)
    # lvextend -L 100%FREE /dev/testVG/testLV01 -r
    // -r: lv 확장 후 파일 시스템 resize 진행

  • lv 삭제
    # lvremove /dev/testVG/testLV01

  • vg 삭제
    # vgremove testVG

  • pv 삭제
    # pvremove /dev/sda1

iSCSI

네트워크를 통해 스토리지를 전송하는 프로토콜이다.
서버와 스토리지 장치 간의 네트워크 연결을 통해 리소스를 공유하여 클라이언트는 로컬 디스크처럼 사용할 수 있다.
기본적으로 SCSI 명령어를 TCP/IP 프로토콜을 사용하여 네트워크로 전송하는 방식으로 동작한다.
SAN(Storage Area Network) 이나 NAS(Network Attached Storage)를 구성하는데 사용되며
기존 파이버 채널(Fiber Channel)을 대체할 수 있는 비용 효율적인 스토리지 솔루션이다.

1. iSCSI Target

스토리지 리소스를 제공하는 서버로 클라이언트(Initiator)에게 스토리지 리소스를 공유한다.

2. iSCSI Initiator

스토리지 리소스를 제공받는 서버로 Target 에게 요청을 보내 스토리지를 마운트하고 사용한다.

Tartget 서버 설정

  1. target 패키지 설치
    # yum install targetcli

  2. target 서비스 활성화
    # systemctl enable --now target

  3. target 쉘 진입
    # targetcli

  4. 전체적인 구조 확인
    /> ls

o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 0]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 0]
  o- loopback ......................................................................................................... [Targets: 0]
  1. iscsi 타겟 설정
    /> backstores/block create block01 /dev/sdb1
    // 공유할 디바이스 정의
    /> iscsi/ create iqn.2023-07.com.target:server
    // iscsi 타겟 생성
    /> iscsi/iqn.2023-07.com.target:server/tpg1/acls create iqn.2023-07.com.initiator:client
    // 접근할 수 있는 initiator name 정의
    /> iscsi/iqn.2023-07.com.target:server/tpg1/luns create /backstores/block/block01
    // 공유할 lun 정의
    /> iscsi/iqn.2023-07.com.target:server/tpg1/portal create 192.168.10.15 3260
    // target 서버의 IP 입력
    /> iscsi/iqn.2023-07.com.target:server/tpg1/portal create 192.168.20.15 3260
    // target 서버의 2번째 IP 입력(Multipath 구성할 경우)

  2. 구성 확인
    /> ls

o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- block01 ........................................................................ [/dev/sdb1 (10.0GiB) write-thru activated]
  | |   o- alua ................................................................................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2023-07.com.target:server ..................................................................................... [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 1]
  |     | o- iqn.2023-07.com.initiator:client ..................................................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............................................................................... [lun0 block/block01 (rw)]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ................................................................... [block/block01 (/dev/sdb1) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 2]
  |       o- 192.168.10.15:3260 ............................................................................................... [OK]
  |       o- 192.168.20.15:3260 ............................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]

Initiator 서버 설정

  1. iscsi 패키지 설치
    # yum install iscsi-initiator-utils

  2. iscsi 서비스 활성화
    # systemctl enable --now iscsid

  3. Target 서버 검색
    # iscsiadm -m discovery -t st -p 192.168.10.15
    // -m discovery: Target 서버를 검색
    // -t st: sendtargets 옵션을 사용
    // -p: Target 서버의 주소를 지정

  4. Target 서버 연결
    # iscsiadm -m node -l
    // -m node: Target 서버와 연결할 때 사용하는 옵션
    // -l: Target 서버로 로그인
    # lsblk --scsi
    // iscsi 연결 확인

  5. Target 서버 연결 해제
    # iscsiadm -m node --logout

Multipath

리눅스 시스템에서 스토리지 디바이스의 경로를 중복화하고 여러 경로를 사용하여 장애 허용성과 성능 향상을 제공하는 기술이다.
주로 SAN 환경에서 사용되며 대규모 스토리지 시스템과 고가용성을 요구하는 서버에서 유용하다.
Multipath 의 주요 특징은 다음과 같다.

1. 장애 허용성

여러 경로가 스토리지 디바이스와 연결되므로 하나의 경로에 문제가 발생하더라도 다른 경로를 통해 데이터에 접근할 수 있다.
이를 통해 스토리지 장치의 가용성과 안정성을 향상시킨다.

2. 성능 향상

여러 경로를 통해 데이터를 전송할 수 있으므로 데이터의 입출력 성능이 향상된다.
특히 대규모 스토리지 시스템에서 많은 클라이언트가 동시에 접근해야 할 때 성능의 균형을 맞출 수 있다.

3. 동적 경로 관리

스토리지 디바이스와 연결된 경로가 추가되거나 제거되는 경우에도 동적으로 경로를 관리한다.
따라서 스토리지의 구성이 변경되어도 시스템은 계속해서 적절한 경로를 사용하여 스토리지에 접근할 수 있다.

4. 편의성

사용자에게는 하나의 복합적인 스토리지 디바이스를 제공하므로 사용자는 스토리지를 복잡하게 관리하는 것을 피할 수 있다.

Multipath 구성

  1. multipath 패키지 설치
    # yum install device-mapper-multipath

  2. multipath.conf 파일 활성화
    # mpathconf --enable

  3. scsi id 확인
    # /usr/lib/udev/scsi_id -g /dev/sdb1

  4. /etc/multipath.conf 파일 수정
    # vi /etc/multipath.conf

multipaths {
	multipath {
		wwid <scsi_id>
		alias red
		}
}
  1. multipathd 활성화
    # systemctl enable --now multipathd

  2. 블록 디바이스 구성 확인
    # lsblk

NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda             8:0    0   10G  0 disk  
└─red         253:2    0   10G  0 mpath 
sdb             8:16   0   10G  0 disk  
└─red         253:2    0   10G  0 mpath
...
  1. 멀티패스 구성 확인
    # multipath -ll
red (36001405fdf37b02cd834dd980a0fa0de) dm-2 LIO-ORG,block01
size=10.0G features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 6:0:0:0 sda 8:0  active ready running
`-+- policy='service-time 0' prio=50 status=enabled
  `- 7:0:0:0 sdb 8:16 active ready running
  1. multipath.conf 파일 수정 후 적용
    # systemctl reload multipathd
profile
Linux/Cluster/Infra Engineer

0개의 댓글

관련 채용 정보