엔터프라이즈 리눅스 03

AeZan·2023년 9월 23일
0

논리 볼륨을 왜 쓸까?

  • 파티셔닝 후에는 용량의 확장/축소가 어렵기 때문에 유연성을 높이기 위해 사용
  • 시스템 종료 없이 용량 변경을 하기 위해 사용 (디스크 추가시 System down 필요 -> down time 발생)
  • 데이터 유지한 상태에서 확장/축소 가능
  • RAID 적용한 볼륨 생성 가능
  • 스냅샷 기능 사용 가능

논리 볼륨을 구성하려면 물리 볼륨, 볼륨 집단이 필요함

물리 볼륨

  • 디스크 전체 또는 일부를 파티션으로 지정하고 물리 볼륨으로 생성
  • 볼륨 그룹의 하나의 요소가 됨
  • 논리 볼륨에 메타데이터 저장하는 영역 존재 -> 논리 볼륨 정보 복구시 사용

볼륨 그룹

  • 1개 이상의 물리볼륨의 집합으로 구성
  • 볼륨 그룹 총 사이즈 = 물리 볼륨 사이즈 합
  • 물리 확장 PE 크기 지정 (default 4MB)

*PE 논리 볼륨 생성 또는 확장 시 사용할 수 있는 최소 단위

논리 볼륨

  • 파일시스템에서 데이터를 저장할 수 있는 볼륨
  • 사이즈 입력시 PE 개수, MB 와 같은 단위로 지정
  • 논리 볼륨의 사이즈는 최대 볼륨 그룹의 크기까지 지정 가능
  • thin provisioning 형태로 생성 -> 볼륨 그룹의 크기보다 더 큰 사이즈로 생성 가능 = OverCommit


논리 볼륨 생성하기

저번에 파티션해둔 디스크 확인

파티셔닝 해둔 디스크 타입 변경 (새로 추가한 디스크 파티셔닝해도 됨)

4번 파티션을 Linux LVM 타입으로 변경
w 로 저장하고 나오기

파티션 타입 변경 완료

물리 볼륨 만들기

파티션의 mount를 해제해야 설정이 가능함

precreate [장치 이름]


볼륨 그룹 만들기

vgcreate [option] [volume-group-name] [physical-volume1] [physical-volume2] [...]

-s 옵션 사용 시 PE 크기 단위로 할당 및 조정 가능
vgcreate -s 10M [이하 동일]

논리 볼륨 만들기

lvcreate [option] [volume-group-name]
vg 남아있는 용량 다 lv로 만들래 -> lvcreate -l 100%FREE -n lv_test4 vg_test4

*option
-l: PE 개수 지정
-L: 사이즈로 지정 (MB)
-n: 이름 지정

논리볼륨의 장치이름(경로)를 따라가보면 심볼릭 링크가 생성된 것을 볼 수 있음
논리 볼륨 파일 또한 일반 파티션과 동일한 블록 장치 파일을 가리키는 심볼릭 링크 파일인 것을 알 수 있음

논리 볼륨 확인 명령어

lvs or lvdisplay 로 논리 볼륨 확인

*물리 볼륨, 볼륨 그룹 확인 명령어
pvs or pvdisplay or lvmdiskscan
vgs or vgdisplay

논리 볼륨에 파일시스템 적용

파일시스템 타입 옵션 mkfs.ext4 or mkfs -t ext4 로 둘다 가능

mkdir lvm 으로 디렉토리 생성
mount /dev/mapper/vg_test-lv_test4 /lvm 로 마운트

아무 파일이나 해당 마운트 지점에 복사해봄
사용 가능한 볼륨인 것을 확인!

lost+found 디렉터리란..?
"lost+found"는 하드디스크의 파티션마다 생김
오류 등으로 인해 정상적인 종료를 하지 못했을 때 메모리나 버퍼의 내용을 담고 있다가 재부팅시 복구에 이용함



볼륨 그룹 확장

먼저 남는 파티션 하나 umount 하고 lvm 타입으로 변경 후 물리 볼륨으로 생성

vgextend [volume-group-name] [파티션 장치이름]
PV 가 2개인 것을 확인 할 수 있음 -> 볼륨 그룹 확장 완료!


논리 볼륨 확장

lvextend [option] [PE개수 or 사이즈] [logical-volume-name]

df -h 로 확인했을 때 확장된 모습을 볼 수 없음
-> 확장된 부분에는 fs 을 아직 생성하지 않았기 때문에 fs 도 확장해주어야 함

resize2fs [logical-volume-path]

resize2fs /dev/mapper/vg_test4-lv_test4 로 파일시스템 확장

*파일시스템마다 명령어 다름
xfs: xfs_growfs [mount-point]



이슈 발견

+ 기호를 빼고 용량을 추가하려 했을 때 위와 같은 메세지가 떴음

기존 파티션은 5GB 였고, 추가하려는 파티션은 1GB 였는데, 추가하려는 파티션의 용량이 적어서 확장이 안된다고 나온 메세지 였음

+ 없이 해당 명령어를 작성하면, 추가하려는 파티션의 용량으로 변경이 되기 때문에 현재 존재하는 파티션보다 적으면 안된다고 하는 것 같았음

그래서 다른 파티션으로 실습을 해서 눈으로 확인해봄

디스크를 하나 추가하고 파티션을 2개로 나눔

파티션을 lvm 타입으로 변경하고 물리 볼륨 -> 볼륨 그룹 으로 생성했음

파일시스템 적용 후 마운트 지점인 디렉토리 생성 하고, mount 까지 함

sdc2 도 동일하게 해주었음

+ 기호 없이 논리 볼륨 확장 시도
추가 파티션 sdc2 (2GB) | 기존 파티션 sdc1 (1GB) 이므로 오류 없이 명령어가 실행됨

resize2fs 명령어로 파일시스템의 크기도 확장

df -h3GB 확장이 아닌 2GB 로 변경된 것을 볼 수 있음

결론
논리 볼륨 확장 시 + 기호를 반드시 붙여야 하며, 기호없이 사용 시 추가하려는 용량의 파티션만큼 크기가 변경됨
(그래서 추가 파티션의 용량이 같거나 작으면 진행되지 않음)



쓸데없는 궁금증 2

  • mount 해제 시 데이터는 어떻게 될까?

sdb2 장치의 경로로 가서 he, hello 파일을 만들고, umonut 로 마운트 해제를 하려 했으나 target is busy 라는 메세지와 함께 명령어가 실행되지 않았음

-> 현재 sdb2 경로에 접속한 상태여서 위와 같은 현상이 발생한것

해당 디렉터리에서 벗어나 마운트 해제를 하고 확인해 봄

sdb2 의 디렉터리는 그대로 남아있음
그리고 해당 디렉토리에 접근해서 파일을 확인했더니 데이터는 없음


  • 디렉토리 경로를 바꿔 mount를 해주면 어떻게 될까?

새로운 디렉토리를 생성함

해당 디렉토리에 sdb2 장치를 마운트해봄

위에서 작성했던 데이터(he, hello)를 확인할 수 있음

결론
mount는 논리적인 개념이기 때문에 데이터에는 영향을 끼치지 않음.
mount파일시스템에 접근할 수 있는 경로일 뿐임.

/mnt/sdb2_test 는 마운트 포인트일 뿐이고, 마운트 시에 파티션 된 장치 (/dev/sdb2) 를 가리키는 것임

0개의 댓글