논리 볼륨 관리하기
-
파티션 확장은 같은 실제 하드 드라이브에 사용 가능한 공간의 범위까지로 제한된다.
하드 드라이브에 더 이상 사용할 수 있는 공간이 없다면 더 큰 하드 드라이브를 구해서 수동으로 새 드라이브에 기존의 파일시스템을 옮겨야 한다.
이보다 편리한 방법은 다른 하드 드라이브 파티션을 기존의 파일시스템에 추가함으로서 기존의 파일시스템에 동적으로 더 많은 공간을 추가하는 방법이다.
리눅스 논리 볼륨 관리자(Linux Logical Volume Manager, LVM) 소프트웨어 패키지가 이런 일을 할 수 있다.
LVM 은 전체 파일 시스템을 재구축할 필요 없이 리눅스 시스템의 디스크 공간을 조작할 수 있는 쉬운 방법을 제공한다.
* 논리 볼륨 관리 레이아웃 살펴보기
-
여러 PV(Physical volume) 요소는 볼륨 그룹(Volume Group, VG)을 만들어 함께 모아둔다.
LVM 은 실제 하드 드라이브와 같은 VG 를 다루지만 실제로는 VG 는 여러 하드 드라이브에 분산된 여러 개의 물리적 파티션으로 구성될 수 있다.
VG 는 실제로 파일시스템을 포함하는 논리 파티션을 만들 수 있는 플랫폼을 제공한다.
구조의 최종 계층은 논리 볼륨(Logical Volume, LV)이다.
LV 는 리눅스에 파일시스템을 만들기 위한 파티션 환경을 만들며 이 파티션은 리눅스에서는 실제 하드 디스크의 파티션과 비슷하게 동작한다.
리눅스 시스템은 물리적 파티션처럼 LV를 처리한다.
사용자는 표준 리눅스 파일시스템 중 어느 하나를 사용하여 LV 를 포맷하고 마운트 지점에서 리눅스 가상 디렉토리에 추가할 수 있다.
* 리눅스에서 LVM 사용하기
-
리눅스 LVM 으로 사용자는 단순한 커맨드라인 명령을 사용하여 리눅스 논리 볼륨 관리 환경을 완벽하게 관리할 수 있다.
LVM1, LVM2 이렇게 두 가지 버전이 있다.
커널 2.6 이상인 경우 LVM2 를 이용할 수 있다.
** 스냅샷 찍기
-
원래의 리눅스 LVM 은 논리 볼륨이 활성화되어 있는 동안 다른 장치에 기존 논리 볼륨을 복사할 수 있다.
이 기능을 스냅샷이라고 한다.
스냅샷은 잠글 수 없는 중요한 데이터를 백업하기 위한 훌륭한 도구다.
전통적인 백업 방법은 보통 백업 매체에 복사할 때 파일을 잠근다.
스냅샷을 이용하면 복사를 수행하는 동안 웹 서버 또는 db 서버를 계속 실행할 수 있다.
아쉽지만 LVM1 은 읽기 전용 스냅샷만 만들 수 있다.
LVM 은 활성 논리 볼륨에 대한 읽기 및 쓰기 스냅샷을 만들 수 있다.
이 기능은 빠른 fail-over(장애가 발생했을 때 대체 시스템으로 운영을 넘기는 기능) 또는 데이터를 변경하는 앱을 실험하다가 실패했을 경우 이를 복원할 필요가 있을 때 특히 유용하다.
** 스트라이핑
-
LVM2 가 제공하는 기능으로, striping 은 하나의 논리 볼륨을 여러 개의 물리적 하드 드라이브에 걸쳐 만들 수 있다.
리눅스 LVM 이 논리 볼륨에 파일을 기록할 때 파일의 데이터 블록은 여러 하드 드라이브에 걸쳐 분산된다.
각각의 연속된 데이터의 블록은 그 다음 하드 드라이브에 기록된다.
스트라이핑은 리눅스가 한 하드 드라이브 안에서 읽기/쓰기 헤드를 다른 위치로 옮기기 위해서 기다리지 않고 한 파일에 대한 여러 데이터 블록을 동시에 여러 하드 드라이브에 쓸 수 있으므로 디스크 성능 향상을 돕는다. 읽을 때도 마찬가지다.
-
LVM 스트라이핑은 RAID 스트라이핑과 다르다.
LVM 스트라이핑은 결함을 자체 처리할 수 있는 환경인 페리티 엔트리를 제공하지 않는다.
LVM 스트라이핑은 하드 드라이브 오류가 일어났을 때 파일이 손실될 수 있는 가능성을 높인다.
** 미러링
-
LVM 논리 볼륨은 정전이나 디스크 장애에 물리적 정전이나 디스크 장애에 마찬가지로 취약하다.
파일 시스템이 손상되고 나면 이를 복구할 수 없을 가능성은 항상 존재한다.
LVM 스냅샷 프로세스로 언제든지 논리 볼륨의 백업 사본을 만들 수 있다는 점 때문에 안심이 되지만 일부 환경에서는 이 정도로는 충분하지 않다.
DB 서버와 같이 데이터 변경이 많이 이루어지는 시스템은 마지막 스냅샷 이후 기록의 수백 또는 수천 개의 레코드를 저장했을 수도 있다.
-
이 문제에 대한 해결책은 LVM 미러다.
미러는 실시간으로 업데이트 되는 논리 볼륨의 완전한 사본이다.
미리 논리 볼륨을 만들 때 LVM 은 미러 사본에 원래의 논리 볼륨을 동기화한다.
원래의 논리 볼륨의 크기에 따라 이 작업을 완료하는 데에는 시간이 약간 걸릴 수 있다.
최초의 동기화가 완료된 후 LVM 은 파일시스템에서 쓰기 작업을 할 때마다 쓰기를 두 번 한다.
한번은 메인 논리 볼륨에 또 한번은 미러된 복사본에 쓴다.
물론 성능저하를 가져오지만, 안정성은 높아진다.
* 리눅스 LVM 사용하기
** 물리 볼륨 정의하기
-
작업의 첫 번째 단계는 물리적 파티션을 리눅스 LVM 이 사용하는 물리 볼륨 익스텐트로 변환하는 것이다.
fdisk 명령을 사용하는데, 기본 리눅스 파티션을 만든 후 t 명령으로 파티션 유형을 변경한다.
pvcreate 명령은 PV 에 사용할 물리 파티션을 정의한다.
이 작업은 단지 파티션에 리눅스 LVM 시스템의 물리 볼륨이라는 태그를 붙여 놓는 것이다.
$ sudo pvcreate /dev/sdb1
$ sudo pvdisplay /dev/sdb1 # 만들어진 물리 볼륨 확인
** 볼륨 그룹 만들기
-
볼륨 그룹을 만들려면 vgcreate 명령을 사용한다.
$ sudo vgcreate Vol1 /dev/sdb1
$ sudo vgdisplay Vol1 # 만들어진 볼륨 그룹 확인
** 논리 볼륨 만들기
-
리눅스 시스템은 물리적 파티션처럼 논리 볼륨을 다루며, 논리 볼륨에 파일시스템을 정의한 다음 가상 디렉토리에 파일시스템을 마운트할 수 있다.
논리 볼륨을 만들려면 lvcreate 명령을 사용한다.
다른 리눅스 LVM 명령은 보통 커맨드라인 옵션을 사용하지 않아도 되지만 lvcreate 명령은 최소한 몇 가지 옵션을 입력해야 한다.
옵션에 대한 자세한 설명은 생략한다.
$ sudo lvcreate -l 100%FREE -n lvtest Vol1
$ sudo lvdisplay Vol1
** 파일시스템 만들기
-
$ sudo mkfs.ext4 /dev/Vol1/lvtest
$ sudo mount /dev/Vol1/lvtest /mnt/my_partition
** LVM 수정하기
-
LVM 을 사용할 때 장점은 동적으로 파일시스템을 수정할 수 있다는 것이다.
다음 명령들을 사용하면 된다.
vgchange : 볼륨 그룹의 활성화 및 비활성화 한다.
vgremove : 볼륨 그룹을 제거한다.
vgextend : 볼륨 그룹에 물리 볼륨을 추가한다.
vgreduce : 볼륨 그룹에서 물리 볼륨을 제거한다.
lvextend : 논리 볼륨의 크기를 늘린다.
ivreduce : 논리 볼륨의 크기를 줄인다.
-
논리 볼륨의 크기를 직접 늘리거나 줄일 때에는 주의해야 한다.
논리 볼륨에 저장된 파일시스템은 크기의 변화에 대응하여 수정되어야 한다.
대부분의 파일시스템은 리포맷을 위한 커맨드라인 프로그램을 포함한다. resize2fs 같은 녀석이다.
요약
-
리눅스에서 저장장치로 작업을 하려면 파일시스템에 대해 알고 있어야 한다.
파일 및 폴더를 저장하기 위해 수많은 파일시스템을 제공한다.
각각의 파일시스템 유형은 저장장치와 상호작용하기 위해 각자 다른 명령을 사용한다.
저장장치에 파일시스템을 설치하기 전에 먼저 장치를 준비한다.
fdisk 명령은 저장장치를 파티션함으로써 파일시스템을 준비할 수 있도록 한다.
인기 있는 파인시스템은 ext4 및 XFS 와 같은 것들이다.
이들은 저널링 파일시스템 기능을 제공한다.
저장장치 파티션에 직접 파일시스템을 만들 때 디스크 공간이 부족해도 파일시스템의 크기를 쉽게 변경할 수 없는 한계가 있다.
그러나 리눅스는 가상 파티션을 생성하는 논리 볼륨 관리를 지원한다.
LVM 패키지는 여러 저장장치에 파일시스템을 구축하는 논리 볼륨을 만드는 커맨드라인 명령을 제공한다.
'프로그래밍 놀이터 > Script(Python)' 카테고리의 다른 글
[책 정리] 09.소프트웨어 설치하기 - 리눅스 커맨드라인 쉘 스크립트 바이블 (0) | 2020.04.29 |
---|---|
[책 정리] 08-1. 파일 시스템 관리하기 - 리눅스 커맨드라인 쉘 스크립트 바이블 (0) | 2020.04.27 |
[책 정리] 07. 리눅스 파일 사용 권한 이해하기 - 리눅스 커맨드라인 쉘 스크립트 바이블 (0) | 2020.04.26 |
[책 정리] 06. 리눅스 환경 변수 사용하기 - 리눅스 커맨드라인 쉘 스크립트 바이블 (0) | 2020.04.25 |
[책 정리] 05. 쉘을 이해하기 - 리눅스 커맨드라인 쉘 스크립트 바이블 (0) | 2020.04.24 |
댓글