디스크 파티셔닝은 하나의 물리적인 디스크를 여러 논리적인 파티션으로 나누는 과정을 말한다.
파티셔닝을 할 경우 각 파티션은 독립적으로 관리되고 파일 시스템을 생성하여 데이터를 저장할 수 있다.
디스크의 처음 부분에 위치하는 파티션 테이블 형식으로 BIOS 기반 시스템에서 주로 사용된다.
최대 4개의 기본 파티션을 지원하며 하나의 기본 파티션을 확장 파티션으로 만들어 여러 논리 파티션을 생성할 수 있다.
하지만 MBR의 한계로 더 많은 파티션을 생성할 수 없는 경우도 있다.
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
시스템의 저장 장치(HDD, SDD 등)에 파일과 디렉터리를 저장하는 방식과 데이터를 읽고 쓰는 규칙을 정의하는 체계이다.
운영 체제에서 파일과 디렉터리를 구조화하고 저장하여 데이터를 쉽게 관리하고 접근할 수 있도록 한다.
컴퓨터 디스크에 파일과 디렉토리를 저장하고 이들을 조직적으로 관리한다.
파일 시스템은 파일의 크기, 위치, 이름 등을 추적하고 데이터를 클러스터화하여 효율적으로 관리한다.
디렉토리 구조를 지원하여 파일들을 계층적으로 구성한다.
이를 통해 사용자는 파일들을 특정한 카테고리에 맞게 분류하고 논리적으로 정리할 수 있다.
파일을 읽고 쓰는 규칙을 정의하여 사용자가 파일에 접근하고 데이터를 변경할 수 있도록 한다.
파일 시스템은 액세스 권한을 관리하여 보안을 유지하고 데이터를 보호한다.
여러 가지 파일 시스템이 존재하며 각각의 파일 시스템은 특정 운영 체제나 장치에 최적화되어 있다. 일반적으로 리눅스에서는 ext4, xfs, btrfs 등의 파일 시스템을 사용하고, 윈도우는 NTFS, FAT32 등을 사용한다.
사용자가 파일과 디렉토리를 관리할 수 있도록 명령어와 유틸리티를 제공한다.
리눅스에서는 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
# mount -a
리눅스/유닉스 기반 시스템에서 디스크 파티셔닝을 더욱 유연하게 관리하기 위한 기술이다.
물리적인 디스크를 논리적은 볼륨 그룹으로 나누고, 이 볼륨 그룹을 논리 볼륨으로 나눌 수 있다.
파티션의 크기를 확장하거나 여러 디스크를 하나의 논리 볼륨으로 결합하는 등의 유연한 디스크 관리가 LVM의 핵심 기능이다.
물리적인 디스크 또는 파티션에 해당하며 LVM이 사용하는 기본 저장 장치이다.
PV의 그룹을 말한다.
하나 이상의 PV를 묶어서 사용하고 PV들의 용량을 합쳐서 하나의 큰 공간으로 사용한다.
생성된 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
네트워크를 통해 스토리지를 전송하는 프로토콜이다.
서버와 스토리지 장치 간의 네트워크 연결을 통해 리소스를 공유하여 클라이언트는 로컬 디스크처럼 사용할 수 있다.
기본적으로 SCSI 명령어를 TCP/IP 프로토콜을 사용하여 네트워크로 전송하는 방식으로 동작한다.
SAN(Storage Area Network) 이나 NAS(Network Attached Storage)를 구성하는데 사용되며
기존 파이버 채널(Fiber Channel)을 대체할 수 있는 비용 효율적인 스토리지 솔루션이다.
스토리지 리소스를 제공하는 서버로 클라이언트(Initiator)에게 스토리지 리소스를 공유한다.
스토리지 리소스를 제공받는 서버로 Target 에게 요청을 보내 스토리지를 마운트하고 사용한다.
target 패키지 설치
# yum install targetcli
target 서비스 활성화
# systemctl enable --now target
target 쉘 진입
# targetcli
전체적인 구조 확인
/> 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]
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 구성할 경우)
구성 확인
/> 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]
iscsi 패키지 설치
# yum install iscsi-initiator-utils
iscsi 서비스 활성화
# systemctl enable --now iscsid
Target 서버 검색
# iscsiadm -m discovery -t st -p 192.168.10.15
// -m discovery: Target 서버를 검색
// -t st: sendtargets 옵션을 사용
// -p: Target 서버의 주소를 지정
Target 서버 연결
# iscsiadm -m node -l
// -m node: Target 서버와 연결할 때 사용하는 옵션
// -l: Target 서버로 로그인
# lsblk --scsi
// iscsi 연결 확인
Target 서버 연결 해제
# iscsiadm -m node --logout
리눅스 시스템에서 스토리지 디바이스의 경로를 중복화하고 여러 경로를 사용하여 장애 허용성과 성능 향상을 제공하는 기술이다.
주로 SAN 환경에서 사용되며 대규모 스토리지 시스템과 고가용성을 요구하는 서버에서 유용하다.
Multipath 의 주요 특징은 다음과 같다.
여러 경로가 스토리지 디바이스와 연결되므로 하나의 경로에 문제가 발생하더라도 다른 경로를 통해 데이터에 접근할 수 있다.
이를 통해 스토리지 장치의 가용성과 안정성을 향상시킨다.
여러 경로를 통해 데이터를 전송할 수 있으므로 데이터의 입출력 성능이 향상된다.
특히 대규모 스토리지 시스템에서 많은 클라이언트가 동시에 접근해야 할 때 성능의 균형을 맞출 수 있다.
스토리지 디바이스와 연결된 경로가 추가되거나 제거되는 경우에도 동적으로 경로를 관리한다.
따라서 스토리지의 구성이 변경되어도 시스템은 계속해서 적절한 경로를 사용하여 스토리지에 접근할 수 있다.
사용자에게는 하나의 복합적인 스토리지 디바이스를 제공하므로 사용자는 스토리지를 복잡하게 관리하는 것을 피할 수 있다.
multipath 패키지 설치
# yum install device-mapper-multipath
multipath.conf 파일 활성화
# mpathconf --enable
scsi id 확인
# /usr/lib/udev/scsi_id -g /dev/sdb1
/etc/multipath.conf 파일 수정
# vi /etc/multipath.conf
multipaths {
multipath {
wwid <scsi_id>
alias red
}
}
multipathd 활성화
# systemctl enable --now multipathd
블록 디바이스 구성 확인
# 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
...
# 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
# systemctl reload multipathd