Linux RAID 및 LVM 스토리지 구성

CompTIABeginner
지금 연습하기

소개

이 실습에서는 Linux 환경에서 고급 스토리지 솔루션을 구성하고 관리하는 방법을 배웁니다. 유연한 볼륨 관리를 위한 LVM(Logical Volume Manager) 과 소프트웨어 기반 RAID(Redundant Array of Independent Disks) 를 위한 mdadm이라는 두 가지 강력한 도구를 사용하게 됩니다. 이 실습은 루프 장치를 사용하여 물리적 디스크를 시뮬레이션함으로써, 커맨드 라인에서 견고하고 확장 가능한 스토리지 인프라를 구축하는 실제적인 실무 경험을 제공합니다.

먼저 LVM 물리 볼륨을 초기화하고 볼륨 그룹을 생성하는 것으로 시작합니다. 그다음 논리 볼륨을 생성, 포맷, 마운트 및 크기 조정을 수행하며 LVM 의 동적인 특성을 이해하게 됩니다. 이어서 데이터 중복성을 위한 RAID 1(미러링) 어레이를 구축하고 마운트합니다. 마지막으로 /etc/fstabmdadm.conf 파일을 수정하여 시스템을 재부팅한 후에도 이러한 스토리지 구성이 유지되도록 설정하며 실습을 마무리합니다.

이 실습은 학습과 연습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 통계 데이터에 따르면 이 실습은 초급 수준이며 완료율은 88%입니다. 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

pvcreate 및 vgcreate 를 사용한 LVM 초기화

이 단계에서는 LVM(Logical Volume Manager) 작업을 시작합니다. LVM 은 Linux 에서 스토리지 장치를 관리하기 위한 강력한 도구입니다. 물리적 하드 드라이브와 파일 시스템 사이에 추상화 계층을 추가하여, 실행 중인 상태에서 볼륨 크기를 조정하는 것과 같은 유연한 구성을 가능하게 합니다.

LVM 의 기본 구성 요소는 다음과 같습니다:

  • 물리 볼륨 (Physical Volumes, PVs): 하드 드라이브 파티션이나 이번 실습에서 사용하는 시뮬레이션 디스크와 같은 블록 장치입니다.
  • 볼륨 그룹 (Volume Groups, VGs): 하나 이상의 물리 볼륨을 묶어서 만든 스토리지 풀입니다.
  • 논리 볼륨 (Logical Volumes, LVs): 볼륨 그룹의 가용 공간에서 생성하는 "가상 파티션"입니다. 이 LV 위에 파일 시스템을 생성하게 됩니다.

먼저 필요한 도구인 lvm2mdadm이 설치되어 있는지 확인합니다.

sudo apt-get update && sudo apt-get install -y lvm2 mdadm

이 환경에는 여분의 물리 하드 드라이브가 없으므로 루프 장치를 사용하여 시뮬레이션합니다. 루프 장치를 사용하면 파일을 블록 장치처럼 취급할 수 있습니다. 프로젝트 디렉토리에 디스크 이미지 역할을 할 256MB 크기의 파일 두 개를 생성하는 것으로 시작합시다.

truncate -s 256M disk1.img disk2.img

이제 파일이 올바른 크기로 생성되었는지 확인합니다.

ls -lh

다음과 유사한 출력이 표시되어야 합니다:

total 0
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk1.img
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk2.img

이제 이 이미지 파일들을 루프 장치에 연결합니다. 여기서는 /dev/loop20/dev/loop21을 사용하겠습니다.

sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img

"디스크"(/dev/loop20/dev/loop21) 가 준비되었으므로, pvcreate 명령을 사용하여 LVM 물리 볼륨으로 초기화할 수 있습니다.

sudo pvcreate /dev/loop20 /dev/loop21

출력을 통해 PV 가 성공적으로 생성되었음을 확인할 수 있습니다:

  Physical volume "/dev/loop20" successfully created.
  Physical volume "/dev/loop21" successfully created.

pvs 명령으로 물리 볼륨의 요약을 확인하거나, pvdisplay로 더 자세한 정보를 볼 수 있습니다.

sudo pvs
  PV           VG   Fmt  Attr PSize   PFree
  /dev/loop20       lvm2 ---  256.00m 256.00m
  /dev/loop21       lvm2 ---  256.00m 256.00m

물리 볼륨이 준비되었으므로, 다음 단계는 두 PV 의 스토리지를 결합한 labvg라는 이름의 볼륨 그룹을 생성하는 것입니다. 이를 위해 vgcreate 명령을 사용합니다.

sudo vgcreate labvg /dev/loop20 /dev/loop21

성공 시 출력 결과는 다음과 같습니다:

  Volume group "labvg" successfully created

마지막으로 vgs를 사용하여 새 볼륨 그룹의 요약을 확인하거나 vgdisplay로 상세 내용을 검토합시다.

sudo vgs

출력 결과에 각 PV 에서 256MB 씩 가져와 총 약 512MB 크기를 가진 labvg 그룹이 표시됩니다.

  VG    #PV #LV #SN Attr   VSize   VFree
  labvg   2   0   0 wz--n- 512.00m 512.00m

이제 두 장치를 물리 볼륨으로 초기화하고 이를 하나의 볼륨 그룹으로 결합하여, 유연한 논리 볼륨을 생성할 준비를 마쳤습니다.

lvcreate 및 mkfs 를 사용한 논리 볼륨 생성 및 마운트

이 단계에서는 이전 단계에서 생성한 볼륨 그룹 labvg를 사용하여 논리 볼륨 (LV) 을 생성합니다. LV 는 LVM 에서 파티션에 해당하는 개념입니다. 생성된 후에는 파일 시스템으로 포맷하고 마운트하여 데이터를 저장할 수 있는 상태로 만들 수 있습니다.

먼저 labvg 스토리지 풀에서 lablvm이라는 이름의 200MB 논리 볼륨을 생성합니다. lvcreate 명령을 사용하며, -L 플래그로 크기를 지정하고 -n 플래그로 이름을 지정합니다.

sudo lvcreate -L 200M -n lablvm labvg

확인 메시지가 표시됩니다:

  Logical volume "lablvm" created.

이제 모든 논리 볼륨의 요약을 제공하는 lvs 명령으로 새 LV 를 확인할 수 있습니다.

sudo lvs

출력 결과에 labvg 그룹 내의 새 lablvm이 표시됩니다.

  LV     VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lablvm labvg -wi-a----- 200.00m

새 LV 는 /dev/labvg/lablvm 경로의 장치로 접근할 수 있지만, 현재는 포맷되지 않은 원시 블록 장치 상태입니다. 여기에 파일을 저장하려면 먼저 파일 시스템을 생성해야 합니다. 일반적인 ext4 파일 시스템으로 포맷하기 위해 mkfs.ext4 명령을 사용합니다.

sudo mkfs.ext4 /dev/labvg/lablvm

명령을 실행하면 생성된 파일 시스템에 대한 세부 정보가 출력됩니다:

mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: 28796151-bd37-4cae-a17f-071db8795919
Superblock backups stored on blocks:
        32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

다음으로 "마운트 포인트" 역할을 할 디렉토리가 필요합니다. 이는 LV 의 파일 시스템이 메인 디렉토리 트리에 연결될 빈 디렉토리입니다. 루트 디렉토리에 /lablvm이라는 디렉토리를 생성합시다.

sudo mkdir /lablvm

마지막으로 mount 명령을 사용하여 LV(/dev/labvg/lablvm) 의 파일 시스템을 마운트 포인트 (/lablvm) 에 연결합니다.

sudo mount /dev/labvg/lablvm /lablvm

볼륨이 성공적으로 마운트되었는지 확인하고 사용 가능한 공간을 점검하려면 df -h 명령을 사용합니다.

df -h /lablvm

출력 결과 장치가 마운트되었으며 약 200MB 의 공간을 사용할 수 있음을 보여줍니다.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  172M   24K  158M   1% /lablvm

이제 논리 볼륨을 성공적으로 생성, 포맷 및 마운트하여 사용할 준비를 마쳤습니다.

lvresize 를 사용한 LVM 논리 볼륨 크기 조정

이 단계에서는 LVM 의 가장 강력한 기능 중 하나인, 논리 볼륨과 파일 시스템이 온라인 상태이고 사용 중인 동안에도 크기를 조정할 수 있는 기능을 살펴봅니다. 이러한 유연성은 기존의 정적 파티션에 비해 큰 장점입니다.

먼저 df -h 명령을 사용하여 현재 마운트된 논리 볼륨의 크기를 다시 확인합니다.

df -h /lablvm

볼륨 크기가 약 200MB 인 것을 볼 수 있습니다.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  194M  2.6M  179M   2% /lablvm

이제 /lablvm에서 실행 중인 애플리케이션의 공간이 부족하다고 가정해 봅시다. 용량을 200MB 에서 300MB 로 늘려야 합니다. 이는 lvresize 명령으로 수행할 수 있습니다. 이때 -r 플래그를 사용하는 것이 매우 중요한데, 이 플래그는 논리 볼륨 내에 포함된 파일 시스템도 함께 크기를 조정하도록 lvresize에 지시하기 때문입니다. 이 플래그가 없으면 파일 시스템은 원래 크기로 유지되어 늘어난 공간을 사용할 수 없게 됩니다.

sudo lvresize -r -L 300M /dev/labvg/lablvm

출력 결과 논리 볼륨과 파일 시스템이 모두 크기 조정되고 있음을 보여줍니다.

  Size of logical volume labvg/lablvm changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
  Logical volume labvg/lablvm successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/labvg-lablvm is mounted on /lablvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/labvg-lablvm is now 76800 (4k) blocks long.

변경 사항을 확인하기 위해 df -h로 디스크 공간을 다시 확인합니다.

df -h /lablvm

이제 볼륨 크기가 약 300MB 가 되었습니다.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  293M  2.6M  275M   1% /lablvm

때로는 새로운 절대 크기를 설정하는 대신 특정 양만큼의 공간을 추가하고 싶을 수도 있습니다. 볼륨에 100MB 를 더 추가해 봅시다. 크기 앞에 + 기호를 사용하여 이를 수행할 수 있습니다. 이번 시연에서는 안정성을 위해 절대 크기 지정 방식을 사용하겠습니다.

sudo lvresize -r -L 400M /dev/labvg/lablvm

크기 조정 작업 중에 파일 시스템 오류가 발생하더라도 걱정하지 마십시오. 짧은 간격으로 연속해서 크기를 조정할 때 가끔 발생할 수 있습니다. 이런 경우 파일 시스템을 언마운트하고 파일 시스템 체크를 실행한 후 다시 마운트하여 복구할 수 있습니다.

## 파일 시스템 오류가 발생하면 다음 복구 명령을 실행하십시오:
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm

마지막으로 df -h를 한 번 더 실행하여 최종 결과를 확인합니다.

df -h /lablvm

이제 볼륨은 약 400MB 가 되었으며, labvg 볼륨 그룹의 여유 공간은 그만큼 줄어들었습니다.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  392M  2.7M  369M   1% /lablvm

가동 중인 LVM 볼륨의 크기를 두 번 성공적으로 조정함으로써, 서비스 중단 없이 스토리지 할당을 얼마나 쉽게 관리할 수 있는지 확인했습니다.

mdadm 을 사용한 RAID 1 어레이 구축 및 마운트

이 단계에서는 LVM 에서 또 다른 강력한 스토리지 기술인 RAID(Redundant Array of Independent Disks) 로 초점을 옮깁니다. mdadm 유틸리티를 사용하여 미러링으로도 알려진 RAID 1 어레이를 생성합니다. RAID 1 구성에서는 데이터가 두 개의 디스크에 동일하게 기록되어 중복성을 제공합니다. 한 디스크가 고장 나더라도 데이터는 다른 디스크에 안전하게 보관됩니다.

먼저 RAID 어레이를 위해 두 개의 시뮬레이션 디스크가 더 필요합니다. ~/project 디렉토리에 새로운 256MB 디스크 이미지 파일인 disk3.imgdisk4.img를 생성합시다.

truncate -s 256M disk3.img disk4.img

다음으로 이 새 이미지 파일들을 사용하지 않는 루프 장치인 /dev/loop22/dev/loop23에 연결합니다.

sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img

이제 RAID 1 어레이를 구축할 준비가 되었습니다. mdadm 명령을 사용하여 두 루프 장치를 이용한 /dev/md0이라는 이름의 새 RAID 장치를 생성합니다.

  • --create /dev/md0: /dev/md0이라는 이름의 새 RAID 장치를 생성합니다.
  • --level=1: RAID 레벨을 지정합니다. 여기서는 RAID 1(미러링) 입니다.
  • --raid-disks=2: 어레이가 두 개의 디스크로 구성됨을 지정합니다.
  • /dev/loop22 /dev/loop23: 어레이를 구성할 장치들입니다.

다음 명령을 실행하십시오:

sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/loop22 /dev/loop23

시스템이 진행하기 전에 확인을 요청할 것입니다. y를 입력하고 Enter 를 눌러 계속 진행합니다.

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

/proc/mdstat 파일을 확인하여 새 RAID 어레이의 상태를 점검할 수 있습니다.

cat /proc/mdstat

출력 결과 /dev/md0이 활성화되어 있으며 /dev/loop23/dev/loop22를 사용하고 있음을 보여줍니다. 어레이가 동기화 (resync) 중인 것을 볼 수도 있는데 이는 정상입니다. 이 프로세스가 완료되는 중에도 어레이를 사용할 수 있습니다.

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 loop13[1] loop12[0]
      261120 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.4% (1088/261120) finish=0.1min speed=21760K/sec

unused devices: <none>

LVM 볼륨과 마찬가지로 새 RAID 장치 /dev/md0에도 파일 시스템이 필요합니다. ext4로 포맷합시다.

sudo mkfs.ext4 /dev/md0

다음으로 RAID 어레이를 위한 마운트 포인트를 생성합니다.

sudo mkdir /labraid

마지막으로 RAID 장치를 새 디렉토리에 마운트합니다.

sudo mount /dev/md0 /labraid

df -h를 사용하여 RAID 어레이가 올바르게 마운트되었는지 확인합니다.

df -h /labraid

출력 결과 /dev/md0 장치 (미러링이므로 총 크기는 약 256MB) 가 마운트되어 사용할 준비가 되었음을 확인할 수 있습니다.

Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        249M  2.6M  234M   2% /labraid

성공적으로 RAID 1 어레이를 생성하고 마운트하여 /labraid 마운트 포인트에 데이터 중복성을 제공했습니다.

/etc/fstab 및 mdadm.conf 를 사용한 마운트 및 RAID 구성 영구화

이 마지막 단계에서는 LVM 및 RAID 구성을 영구적으로 만듭니다. 현재 상태로는 시스템을 재부팅하면 RAID 어레이가 자동으로 재구성되지 않으며, LVM 볼륨과 RAID 어레이 모두 마운트되지 않습니다. 이를 해결하려면 두 가지 주요 구성 파일을 업데이트해야 합니다. RAID 어레이를 위한 /etc/mdadm/mdadm.conf와 마운트 포인트를 위한 /etc/fstab입니다.

먼저 RAID 어레이부터 처리합시다. 시스템은 부팅 시 /dev/md0을 어떻게 재구성해야 하는지 알아야 합니다. mdadm 유틸리티는 필요한 구성 라인을 자동으로 생성해 줄 수 있습니다.

다음 명령을 실행하여 활성 어레이를 스캔하고 구성을 출력합니다:

sudo mdadm --detail --scan

출력은 어레이를 설명하는 한 줄의 텍스트입니다.

ARRAY /dev/md0 metadata=1.2 name=<hostname>:0 UUID=<some-uuid>

이제 이 구성을 /etc/mdadm/mdadm.conf에 위치한 mdadm 구성 파일에 추가합시다. tee 명령을 사용하여 스캔 명령의 출력을 파일에 직접 덧붙입니다.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

파일 내용을 확인하여 해당 라인이 추가되었는지 검증할 수 있습니다:

cat /etc/mdadm/mdadm.conf

다음으로 부팅 시 파일 시스템을 자동으로 마운트하도록 시스템에 지시해야 합니다. 이는 /etc/fstab(파일 시스템 테이블) 에 항목을 추가하여 수행됩니다. 이 파일의 각 라인은 하나의 마운트 포인트를 정의합니다.

먼저 LVM 볼륨에 대한 항목을 추가합시다. echo를 사용하여 라인을 생성하고 tee -a를 사용하여 sudo 권한으로 /etc/fstab에 덧붙입니다.

echo '/dev/labvg/lablvm /lablvm ext4 defaults 0 0' | sudo tee -a /etc/fstab

이제 RAID 어레이 마운트 포인트에 대해서도 동일하게 수행합니다.

echo '/dev/md0 /labraid ext4 defaults 0 0' | sudo tee -a /etc/fstab

/etc/fstab 파일의 마지막 두 줄을 확인하여 두 라인이 올바르게 추가되었는지 점검합니다.

tail -n 2 /etc/fstab

방금 추가한 두 라인이 표시되어야 합니다:

/dev/labvg/lablvm /lablvm ext4 defaults 0 0
/dev/md0 /labraid ext4 defaults 0 0

재부팅하지 않고 /etc/fstab 항목이 올바른지 테스트하려면, 파일 시스템을 언마운트한 다음 /etc/fstab에 나열된 모든 파일 시스템을 마운트하는 mount -a 명령을 사용할 수 있습니다.

먼저 두 볼륨을 모두 언마운트합니다:

sudo umount /lablvm
sudo umount /labraid

이제 mount -a를 실행하여 시스템이 /etc/fstab을 읽고 모든 것을 마운트하게 합니다.

sudo mount -a

마지막으로 df -h를 사용하여 다시 마운트되었는지 확인합니다.

df -h /lablvm /labraid

출력 결과 이전과 마찬가지로 두 파일 시스템이 모두 마운트된 상태로 표시되어야 합니다.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  392M  2.7M  369M   1% /lablvm
/dev/md0                  249M  2.6M  234M   2% /labraid

축하합니다! 부팅 시 RAID 어레이를 자동으로 구성하고 LVM 및 RAID 파일 시스템을 모두 마운트하도록 시스템 설정을 성공적으로 마쳤습니다.

요약

이 실습에서는 LVM 과 소프트웨어 RAID 를 사용하여 Linux 의 고급 스토리지 관리 기초를 배웠습니다. truncatelosetup으로 물리 디스크를 시뮬레이션하는 것으로 시작하여, pvcreate를 통해 이를 LVM 물리 볼륨 (PV) 으로 초기화했습니다. 그런 다음 이 PV 들을 vgcreate를 사용하여 볼륨 그룹 (VG) 으로 통합했습니다. 이 스토리지 풀에서 lvcreate로 유연한 논리 볼륨 (LV) 을 생성하고, mkfs를 사용하여 ext4 파일 시스템으로 포맷한 뒤 시스템에 마운트했습니다. 또한 lvresize로 LV 의 크기를 동적으로 조정하고 resize2fs로 파일 시스템을 확장하여 새 공간을 활용하는 LVM 의 핵심 기능을 실습했습니다.

더불어 데이터 중복성을 제공하기 위해 mdadm 유틸리티를 사용하여 소프트웨어 RAID 1(미러) 어레이를 구성했습니다. 두 개의 시뮬레이션 디스크로 어레이를 구축한 후, LVM 볼륨과 마찬가지로 포맷하고 마운트했습니다. 실습의 마지막에는 이러한 구성이 재부팅 후에도 유지되도록 설정했습니다. 이는 LVM 볼륨과 RAID 어레이의 마운트 포인트를 /etc/fstab에 추가하고, RAID 어레이의 구성 세부 정보를 /etc/mdadm/mdadm.conf에 저장함으로써 완료되었습니다.