}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 시스템 해킹 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate using chrome ↓↓↓===***===>

2019년 12월 10일 화요일

lvm 이란 매우 쉽게!

안녕하세요~ 마무입니다! 오늘은 드디어 "lvm 이란"에 대해서 배워볼 겁니다만, "lvm"의 개념을 먼저 설명하고 "lvm 설정", "lvm 확장", "lvm 삭제" 등을 하고 자세하게 개념을 설명할 겁니다!

당연히 이것을 완벽하게 이해하기 위해선 앞서 포스팅한 "마운트"개념을 알아야 하고요,
"파일시스템 개념"을 알고 있으면 이해에 더 좋습니다!

*이 글을 이해하기 위해 필요한 개념*
마운트 및 하드디스크 추가 :https://mamu2830.blogspot.com/2019/11/fdisk-df-etcfstab-blkid.html
파일시스템 : https://mamu2830.blogspot.com/2019/10/chs-lba.html


--목차--

1. LVM이란?? 왜 LVM을 쓰는 것이지?

2. 이미 리눅스에서 사용되고 있던 LV인 "/dev/sda2"

3. "PV(Physical Volume)", "VG(Volume Group)", "LV(Logical Volume)", "PE(Physical Extent)", "LE(Logical Extent)"란?
i) "PV(Physical Volume)", "PE(Physical Extent)"
ii) "VG(Volume Group)"
iii) "LV(Logical Volume)", "LE(Logical Extent)"

4. LVM관련 명령어들 "pv,vg,lv(create, scan, display, remove, extend, reduce)"
i) [pv, vg, lv]create
ii) [pv, vg, lv]scan, display
iii) [vg, lv]extend
iv) [vg, lv]reduce
v) [pv, vg, lv]remove

5. "centos VG"를 확장한 다음 "루트파일시스템의 LV"인 "/dev/mapper/centos-root"의 
크기를 확장해보자
i) XFS 파일시스템이 확장된 공간을 인식하게 해주는 명령어 "xfs_growfs"


---------

여기서 못 찾은 정보는
운영체제 독학:https://mamu2830.blogspot.com/p/blog-page_14.html
리눅스 독학:https://mamu2830.blogspot.com/p/blog-page_13.html
에서 찾아보세요!




1. LVM이란?? 왜 LVM을 쓰는 것이지?


자 리눅스의 "LVM(Logical Volume Manager)"이란 이름 뜻 그대로 Logical(논리적인) Volume(공간을) Manager(만들게 해주는{관리 해주는} 프로그램)입니다.

그럼 여기서 "엥? 우리가 평소에 디스크를 파티션을 나눈 것도 논리적으로 만든 것
아닌가요?"  라고 의문이 드실 수 있을텐데 "파티션"은 "논리적으로 만든 것"이라고
하긴 애매합니다.

과일을 예시로 설명해볼게요.

"파티션"이란 어떤 하나의 뭔가를 여러개로 나누는 개념으로, 수박 한 통을 여러 조각으로 짜르는 개념이라고 생각하시면 됩니다.  수박 한 통(디스크 하나)을 이제 원하는 크기의 여러 조각(파티션)으로 나누는 거죠.

우리는 이렇게 "나누는 행위""만든다"라고 표현을 하지 않잖아요?

하지만 "LVM"은 사과 하나, 바나나 하나, 먹다 남은 수박 몇 조각 등등 과일 여러개를
모두 한 그릇에 담아서 화채를 만들어주는 것과 같습니다. 여러개의 과일(디스크 공간)이나 짜투리 과일(짜투리 공간)을 합쳐서, 하나의 화채(LV)"만든 것"이죠

자 그럼 방금의 설명으로 "LVM"이란 기능을 언제 쓰는지, 왜 쓰는지, 어떻게 쓰는지
대충 감이 오실 겁니다. 그렇죠! 바로

1. 여러개의 디스크 공간을 합쳐서 하나인양 사용하기 위해

2. 사용하기 애매한 공간의 디스크 파티션(짜투리)들을 활용하기 위해

3. 기존에 사용중인 디스크의 공간을 확장할 수 있기에

크게 이렇게 볼 수 있겠습니다.

그런데 "디스크 공간을 합친다는 것"을, 이렇게 글로만 보면 이해가 될 듯~ 말~듯 싶으실 겁니다. 그래서 제가 밑에 그림을 하나 준비해 보았습니다.

밑에서 사진을 본 뒤, 다시 한번 제 설명을 보시며 "디스크 공간"을 합친다는 것을 이해해보면 좋을 것 같습니다.





이 그림을 보시면, 위에서 말한 LVM을 쓰는 이유 "1번"과 "2번"이 이해가 되실겁니다
하지만 3번 "기존에 사용중인 디스크의 공간을 확장할 수 있다"라는 건 이해가 안 되실
텐데요!

그건 밑에서 저희가 이미 리눅스에서 사용중인 "/dev/sda2"를 예시로 들며
설명해 드리겠습니다






2. 이미 리눅스에서 사용되고 있던 LV인 /dev/sda2


저의 "마운트와 디스크추가" 포스트를 보셨던 분이시라면 이 소제목만 봐도 대충 제가 뭘 설명할 건지 느낌이 오실겁니다만, 모르는 분들도 상관은 없어요~
https://mamu2830.blogspot.com/2019/11/fdisk-df-etcfstab-blkid.html
보고 오시면 되니까요 ㅎ

꼭 전부다 보고 오실 필요는 없구,
1. "마운트" 개념과 디스크 "파티션", sda디스크 구조
부분만 보고 오시면 될 겁니다!





자 위에 언급한 부분을 보고오시면 이렇게 윈도우로 치면 "C드라이브"인, 리눅스의 "/dev/sda"가 사실은 "/dev/sda1""/dev/sda2" 파티션으로 나뉘어져있으며

"/dev/sda2"는 오늘 배울 "LVM"이란 기능으로 "LV(Logical Volume)"이란 하나의
가상디스크로 만들어진 다음,

"Centos-root"라는 "최상위 루트 디렉토리용 파티션"
"Centos-swap"이라는 "swap용 공간 파티션"으로 나눠진다는 것을 아셨을 겁니다.

자, 그럼 여기서 의문이 드실겁니다. '
왜 굳이 /dev/sda2를 "LVM"을 사용해,"LV"로 만든다음 사용하는 것이지???'
라고요

다시 말해서 그냥 애초에 "/dev/sda""/dev/sda1, /dev/sda2, /dev/sda3"이렇게
3개의 파티션으로 나눈다음 각각 "boot용, 루트파일시스템, swap파일시스템" 이렇게
사용하면 되는 걸

굳이 귀찮게 "/dev/sda2"를 "LV"로 만든 다음 "루트파일시스템용, swap용"으로
나눠 사용하냐는 것이죠

맞습니다.

제가 말한 것 처럼 LV으로 안 만들고, 그냥 3개의 파티션으로 나눠 사용해도 상관 없어요. 하지만 왜 "LVM"으로 만들어 사용하냐면 그것이 바로 제가 위에서 언급한 "LVM을 사용하는 3번째 이유" "기존에 사용중인 디스크의 공간을 확장할 수 있기" 때문입니다

우리가 현재 사용하고 있는 윈도우의 "C 드라이브"를 한번 생각해볼까요?
저희는 기존에 사용하고 있던 드라이브의 공간이 부족해지면 어떻게 했었나요?

뭐.. 파일을 지워서 공간을 확보하거나 아니면 백업을 한 뒤, 더 큰 디스크로 교체를
할 수 밖에 없었죠?

리눅스도 마찬가지입니다. 리눅스도 "윈도우의 C드라이브"처럼 물리적인(실제) 디스크 공간에 파일시스템을 포맷해서 사용할 경우, 용량이 부족해질시 더 큰 디스크로 바꿀 수 밖에
없습니다.  

뭐 여기까지는 개인적인 컴퓨터를 사용하는 사람들에겐, 이렇게 디스크만 교체하는 건 별 문제가 아니지만

실제로 서버를 운영할 때 자주쓰이는 리눅스인 경우, 갑자기 서버 인기가 많아져서 확장을 해야한다거나 할 때마다 일일이 엄청나게 큰 용량의 디스크 내용들을 백업하고 교체하는 건 매우 매우 힘든 일이거든요 그래서 "LVM"을 쓰는 겁니다.

"LVM"으로 만든 "Logical Volume"에 파일시스템을 포맷해서 사용할 경우, 용량이 부족할 시, 단순히 다른 디스크의 공간을 기존에 사용중이던 "/dev/sda2"에 추가해 사용할 수 있기 때문이죠!

말로는 잘 이해가 안 되시죠? 그림을 보여드리며 다시 설명해볼게요





















이렇게 물리적인 디스크에 파일시스템을 포맷한 경우, 디스크 공간을 추가할 수가
없습니다. 하지만







그림처럼 "LVM"기술을 사용해 만든 "LV, /dev/sda2"는 이렇게 쉽게 공간을 추가할
수 있습니다.

물론 사진을 보니 뭔 이상한 영어들 "PV, PE, VG, LE, LV"가 보이셔서
벌써부터 머리가 아파지실텐데...

음 어렵게 생각하지 마세요! 단지 위 사진은 디스크에 공간을 추가하기 위한 총 과정
모두 그려서 복잡한 겁니다. 지금 여기서는 "3번"과 "4번"만 보시면 됩니다.

지금보니 잘 안보이는데 "3번"과정을 보시면, 주황색 영역에 "LV"라는 것이 써진 것이
보이시나요?  "/dev/sda2"도 "LV"의 공간으로 만들었기 때문에, 같은 "LV"를 합쳐 
쉽게 공간을 확장할 수 있다는 걸 보여드린 겁니다!

물론 저 "LV"을 추가하는데 필요한 전체 과정을 보셨기에 벌써부터 한숨이 나오실 겁니다.
ㅋㅋㅋㅋ 자자 원리만 알고나면 그리 어려운 건 아니니 마음 가다듬고
이제 "LV"를 추가하는데 필요한 전체 과정을 보도록 하겠습니다.






3. "PV(Physical Volume)", "VG(Volume Group)", "LV(Logical Volume)", "PE(Physical Extent)", "LE(Logical Extent)"란?






맨 위에 "0번""fdisk"라고 표시한 곳이 보이시나요?
제일 먼저 할 행동은 바로 여분의 디스크 공간을 저번 포스트 "마운트"에서 배운
명령어 "fdisk"를 이용해, "lvm시스템용"으로 바꾸는 겁니다.


일단 여분의 디스크 공간이 있어야 하므로, 가상머신에서 하드 디스크
"20GB"와 "10GB", 총 "2개"를 추가해줍니다.(마운트와 디스크 추가 포스트를 보셨으면
이 부분은 아시죠?)




이렇게 항상 혹시 모르니, 장치 이름 확인해 주시고!

"fdisk /dev/sdb"이렇게 명령어를 쳐서 세팅해 줍시다.





하나의 디스크를 통째로 한 파티션으로 만듭니다.





잘 만들어진 걸 "p"로 확인하신 다음

"t"를 이용해 파티션의 "시스템 id"를 변경해줍니다.

모르실 경우 "L"를 누르시면 모든 시스템 id가 나와요! 기억 안 날시 확인하고 하시면 돼요!



리눅스용 "LVM"의 시스템 id는 16진수로 "8e"입니다.
이제 8e를 입력해서 바꿔주시면





이렇게 잘 바뀐 것을 볼 수 있죠? 잊지말고 "w"로 나가주세요
(q로 나가면 저장 안되는 겁니다!)

같은 방식으로 "/dev/sdc""LVM"용으로 세팅해주세요~

여기까지 하시면 이제 "0번"은 끝난 겁니다 ㅎㅎ 왜 "1번"이 아닌 "0번"이라 제가
썼냐면, 디스크에 관련된 어떤 일을 할땐, 가장 먼저 무조건 디스크 공간을 "fdisk"를 이용해
시스템 id를 바꿔줘야 하기 때문입니다!

자 이제 본격적으로 "LVM"을 만드는 "1번"의 과정을 알아볼까요?
첫 번째 과정은 바로 "LV"을 만드는데 필요한 디스크 공간을 "PV(Physical Volume)"으로
만드는 것
입니다.


i) PV(Physical Volume), PE(Physical Extent)


"PV(Physical Volume)"말 그대로 그냥 기존의 디스크 공간과 별 차이가 없는
"물리적 공간"입니다. 그러면 왜 "PV"라는 개념으로 따로 구분을 하느냐?

기존의 디스크랑 큰 차이는 없지만 약간의 차이가 있기 때문이죠.(???)

그 약간의 차이라는 것은
1. "LVM"에서 사용하기 위한 개념 이라는 것과
2. "PV"의 최소 단위를 "PE"라 부르며, "PE"로 전체 공간을 나눴다는 것
입니다.

기존의 디스크 공간은 최소 단위가 "섹터(Sector)"로 나뉘워져 있다는 것을 이젠 다들 아시죠? (모른다면 얼렁 "디스크 원리" 포스트를 읽고 오시길 
https://mamu2830.blogspot.com/2019/11/fdisk-df-etcfstab-blkid.html)

"PV"라는 건 기존의 디스크공간과 다르게 섹터가 아닌, "PE(Physical Extent)"라는
단위로 이루어져 있다는 겁니다.





이렇게 말이죠 그럼 "PE(Physical Extent)"란 뭐냐? 그냥 해석하면 "물리적 공간"
입니다 ㅋㅋ 뭐 말장난 하는 건가 싶죠?

아 그리고 저희가 현재 자연스럽게 사용하는 "LVM"은 사실 "LVM2"입니다.
버젼 2라는 것이죠. 그리고 이 "LVM2"에선 기본적으로 "PE"의 사이즈가
4MB로 되어있습니다. 

"PE"의 사이즈를 바꿀 수도 있지만 알아보니 그냥 그대로 쓰는 걸 추천하더라고요

어쨌든, 굳이 "PE"라는 개념을 왜 사용하냐라고 한다면 이제 서로 다른 디스크 공간을
합쳐서 "LV"로 만들기 위해선 공간의 가장 작은 단위부터 통일을 해야하지 않겠습니까?

즉, "PV(Physical Volume)"을 만드는 이유는 "LV"를 만들기 쉽게, 디스크의 최소 공간들을
"PE"라는 것으로 통일하는 과정이라고 생각하시면 됩니다.


ii) VG(Volume Group)





자 "LV"를 만드는 2번째 과정 "VG(Volume Group)"은 어렵게 생각하실 것 없습니다.

위 사진을 보시면 이제 이 "PV"들을 합쳐서 "VG(Volume Group)"를 만드는 것을
알 수 있죠? 그게 답니다.

네?

네 그게 답니다. Volume 'Group' 이란 이름대로 공간들을 그냥 하나의 그룹,
즉 합친 겁니다.

맨 처음 "LVM"를 "화채"에 비유했었는데 기억 나시나요?
그 때 화채를 만들기 위해 "다듬은 과일조각들"이 이제 "PV(Physical Volume)"인 것이고
이제 그 "PV"들을 하나의 그릇에 담은 것이 바로 "VG(Volume Group)"인 것입니다.

딱히 어려울 건 없죠? ㅎㅎ


iii) LV(Logical Volume), LE(Logical Extent)


자 우리 과일들을 다듬어서 이제 한 그릇에 모두 담았습니다.
남은 건 뭐일까요? 그렇죠 각자 먹을 만큼 덜어가서 막걸리든, 사이다든, 밀키스든
부어서 먹으면 되죠?

이렇게 음료를 부어서 완성 시킨 "화채"가 바로 "LV(Logical Volume)"이라고
보시면 됩니다.

물론... 각자 먹을만큼 덜어가서 만드는게 아니라, 처음부터 스까스까! 하면서
만든 다음 나눠 먹을 수도 있지만, 아무래도 덜어서 만드는게 위생에 더 좋지
않을까요 ㅎㅎ..



이렇게 합친 "VG(Volume Group)"을 필요에 따라 덜어서 "LV(Logical Volume)"
으로 만들어 사용하는것이죠.

그림을 보시면 "LV"을 만들 시 "PE(Physical Extent)""LE(Logical Extent)"로 바뀌는 게
보이실텐데요 그냥 "Logical Volume"에서 사용하는 것이니 "Logical Extent"다 라고
생각하시면 됩니다.

"LVM2"에선 기본적으로 "PE"의 사이즈가 "4MB"라고 했었는데, 이
"PE"가 변한 "LE"도 똑같이 "4MB"입니다.

자 이제 "PV, VG, LV, PE, LE"의 개념에 대해서 대충 이해가 되셨을 겁니다.
이제 여러분들은, 방금 설명한 각 과정들에 필요한 명령어들만 아시면
"LVM"란 기능을 자유자재로 사용하실 수 있을겁니다!




4. LVM관련 명령어들 "pv,vg,lv(create, scan, display, extend, reduce, remove)"



이 부분이 조금 명령어가 많다고? 느끼실 수 있어서 잘 안 외워지실 텐데,
제가 알려드린데로 외우시면 이제 금방 외우실 겁니다!

"LVM"에서 쓰이는 명령어들은 대부분 "pvcreate", "vgcreate", "lvcreate"
이런식으로 앞에 "pv, vg, lv"를 제외하면, 뒤에 오는 영어들은 다 똑같습니다.
즉 뒤에 영어들만 외우면 된다 이거죠!



i) [pv,vg,lv]create : "pv, vg, lv"를 만들겠다

pvcreate [블록 파일]... : 뒤에 적은 블록파일(들)을 "PV"로 만들겠다




항상 블록 파일에 대한 작업을 할 땐, "ls /dev/sd*"로 확인하시고 해야하는 것! 잊지마세요
그리고 "sdb, sdc"가 아니라 "sdb1, sdc1"인거 아시죠?

위 명령어를 실행시



이렇게 "Physical volume"이 잘 만들어졌다고 뜹니다~



vgcreate [만들 VG이름] [VG으로 합칠 PV들...] : 맨 처음 이름으로 "VG"를 만들겠다,
그 뒤에 적은 "PV"들로  




사진처럼 "vgcreate(vg를 만들겠다) VG_30GB(이란 이름으로) /dev/sdb1
/dev/sdc1(이 pv들로)"을 치시면 성공적으로 Volume group이 만들어졌다고 뜹니다.


lvcreate -n(name) [만들 LV이름] -L(LV사이즈) [만들 LV사이즈{단위 붙여서}] [VG이름] :  
-n 옵션 뒤에 적은 이름으로 "LV"를 만드는데 -L 옵션 뒤에 적은 사이즈로 만들겠다,
맨 뒤에 적은 VG로부터 

pvcreate와 vgcreate와 다르게 "lvcreate"는 필수 옵션이 2개 "-n""-L"
있습니다.







꼭 "-n" 옵션을 먼저 써야 한다는 것은 없습니다.

리눅스는 무조건 [-a 옵션] [a 옵션 값] [-b 옵션] [b 옵션 값] 이렇게,
"옵션" 바로 뒤에는 "옵션 값"을 적는 규칙만 지켜주면, 옵션의 순서는 모든 명령어에서
중요하지 않습니다.

어쨌든 위 사진을 보시면 성공적으로 "lv_10G"라는 이름의 Logical volume이 만들어졌다고
뜹니다.

물론 대문자 "-L"이 아니라 소문자 "-l"을 쓸수도 있는데 이 경우엔 뒤에 PE의 개수를
적어줘야 합니다. "PE"가 하나당 4MB라고 했었죠?

솔직히 이를 이용하면 정교하게 줄 수는 있지만 누가 이렇게 주겠습니까...
일단 알고만 있으세요~ 큼직하게 용량을 줄 수 있는 건 큰(대문자) "-L",
정교하게 용량을 줄 수 있는 건 작은(소문자) "-l"



ii) [pv, vg, lv]scan, display


자 우리 지금까지 성공적으로 "PV --> VG --> LV" 순으로 완성했습니다.
그럼 당연히 확인하는 명령어도 있겠죠?

확인하는 명령어에는 "scan"과 "display"가 있습니다. 둘다 뜻이
보여준다는 식으로 비슷하죠? 하지만 살짝의 뉘앙스 차이가 있습니다.

"scan"은 스타크래프트 테란의 스캔처럼, 있는지 없는지 정도만 간략하게
확인한다는 느낌이고

"display"는 이제 제대로 쫘~악 펼쳐서 세부적으로 정보를 보여주는 느낌입니다.

둘다
[pv, vg, lv]scan
[pv, vg, lv]display 형식으로 사용이 가능하며, 딱히 옵션은 알 필요 없을 것 같습니다.

[pv, vg, lv]scan : pv, vg, lv가 뭐뭐 있는지 간략하게 보여준다














[pv, vg, lv]display : pv, vg, lv가 뭐뭐 있는지와 세부적인 정보를 보여준다














iii) [vg, lv]extend

"extend"라는 뜻은 뭔가를 "확장"한다는 의미죠?
리눅스 명령어에서도 그~대로 쓰입니다.
기존의 만들어진 "VG""LV"의 공간을 확장하겠다는 것이죠.

어? "왜 PV"는 "extend"가 없나요?"라는 질문이 생각나실겁니다.
그리고 질문 하려는 순간! 바로 또 다른 생각이 나실 겁니다.

'아~ 실제 디스크 공간인 PV(Physical Volume)는 확장이 안됐지, 그래서 우리가 
VG, LV를 만들어서 사용하는 것이고'

Excellent!, 아주 훌륭해염~ 바로 그거죠! 제 포스트를 잘 읽으셨군요!
그렇습니다. 실제 디스크 공간이랑 별 차이가 없는 "PV"는 확장할 수가 없죠!

"확장"이 있으면 "축소"도 있음이 세상에 이치, 당연한 것,
바로 밑에서 "축소"명령어도 배울텐데 그 역시 마찬가지 입니다.
실제 디스크 공간인 "PV"는 축소가 안되죠~ 축소랑 파티션을 혼동하시면 안됩니다!



vgextend [확장할 VG이름] [VG에 넣을 PV이름] : vg의 공간을 확장하겠다.



아,, 실수 했네요 우리 이미 모든 디스크를 사용하고 있어서 확장할 공간이 더 없네요 하하..

다시 가상 머신에서 디스크 하나를 추가해주고 아까 "0번"과정인
"fdisk"로 lvm시스템으로 세팅한 다음 "PV"를 만들어주겠습니다.(이 과정은 좀 생략할게요
번거롭게 해서 죄송합니다 ㅠ)

 

이렇게 추가한 거 확인하고~ fdisk로 lvm 시스템 세팅 해주고




"PV"를 하나 더 만들어 줬습니다.

자 이제 본격적으로 "VG"를 확장해보겠습니다.






이렇게 vgextend(VG을 확장하겠다) VG_30GB(이 이름의 VG를) /dev/sdd1(이 녀석의
공간을 합쳐서) 하니 성공적으로 확장됐다고 뜹니다.

확인해볼까요? 위에서 배운 "vgdisplay"를 써보죠




자 "2번"을 보시면 "LVM2"를 이용하여 만든 "VG"라는 것을 알 수 있고

"3번"을 보시면 사이즈가 대략 40GiB 정도 되며

"4번"을 보시면 Alloc(Allocate, 얼마나 할당, 현재 쓰고 있는가)PE 2560이라고
아까~ 초반에 배운 "PE"가 현재 2560(대략 10GiB)가 쓰이고 있다는 것을 알 수 있습니다.

"5번"은 뭐 Free PE로 남은 PE공간 이라는 것을 알 수 있죠?

"6번"은 UUID네요! "마운트"포스트에서 마지막쯤 배웠었죠?




lvextend -L [바꿀 LV사이즈] [LV이름] : -L 뒤에 적은 사이즈대로 LV의 용량을 바꾸겠다.



명령어는 확장이라서 더 큰사이즈로만 변경이 가능합니다. 주의하실 것은
"lvextend -L 10G [LV이름]" 이렇게 하면 LV의 사이즈가 10G만큼 증가하는 게 아니라
10G로 바뀝니다.

물론 확장 명령어이기 때문에 기존 사이즈 이상 용량만 줄 수 있으며,
기존 용량보다 작게는 안 변합니다.





이렇게 기존 용량보다 작은 용량을 잘못 줘도,
기존 2560PE(10GiB)사이즈보다 주어진 값이 1280PE(5GiB)가 작다며 적용이 안됩니다. 
그러니 용량를 잘못 줄 걱정은 안하셔도 됩니다.




자 이렇게 "lvextend -L 20G /dev/VG_30GB/lv_10G" 이렇게 한 뒤,
"lvscan"으로 확인하니 용량이 20GiB로 증가한 걸 확인할 수 있습니다.

참고로 이렇게 "LV"를 확장하면 그만큼 "VG"의 용량이 줄어듭니다.




딱 이 그림처럼 말이죠!




iv) [vg, lv]reduce


자 위에서 말했었죠, 확장이 있다면 축소도 있다구 말예요.
그러니  "왜 PV는 reduce가 없느냐"란 질문은 대답할 필요는 없겠죠?


vgreduce [축소할 VG이름] [VG에서 뺄 PV...] : VG을 이루고 있는 PV를 빼서 VG공간을
축소하겠다.

이건 사이즈를 주면서 축소하면 안되죠 왜냐면





이렇게 "VG"는 "PV" 여러개를 고대로 이어 붙여 만들었었기 때문입니다~

자 축소하기 전에 "pvscan" 명령어로 우선 사이즈와 구성 PV들을 확인하고,
축소를 해줍시다. 리눅스에서 "축소, 제거" 같은 명령어는 꼭! 확인을 한 뒤에 
하시는 습관을 들여야 해요 자칫하면 큰일 나기 때문이죠 ㄷㄷ






이렇게 "vgreduce VG_30GB(VG이름) " 이 상태에서 "tab"을 2번 누르시면
이 공간에 올 수 있는 파일들을 보여줍니다~ "vgreduce"뿐만 아니라
모든 명령어에서 사용할 수 있습니다~

"vgdisplay"로 확인해보시면



아까 새로운 디스크를 추가해서 40GiB였었는데, 제거하여 다시 30GiB가 된 걸
확인 할 수 있습니다.

아 물론 여기서 사용중인 PV를 제거하면 어떡하지 ㄷㄷ.. 하실 수 있는데




이렇게 사용중인 PV라고 뜨며 실행이 안되니 걱정 안하셔도 됩니다~



lvreduce -L [만들 LV용량] [LV이름] : -L 뒤에 적은 용량으로 LV의 크기를 축소하겠다.

딱 "lvextend"의 정반대 개념이라고 생각하시면 됩니다.
"reduce"라는 단어가 들어가는 것처럼 기존의 용량보다 큰 사이즈를 줄 순 없습니다.

"lvreduce -L 10G [LV이름]" 이렇게 할 시 LV의 사이즈를 10G로 만들어 버립니다.

하지만 확장하는 것과 달리 주의해야할 점이 있습니다. 그것은 바로
늘리는 건 막 늘려도 되지만, 줄이는 용량에 사용중인 데이터가 있을 수 있다는 건데요.

손님에게 서비스라고 하며 음식을 더 주는 건 문제가 되지 않지만,
손님이 먹던 음식을 갑자기 뺏으면 손님이 불같이 화내겠죠?(비유가 좀..)

같은 맥락입니다.






먼저 "lvscan"으로 용량을 확인 한다음
"lvreduce -L 15G /dev/VG_30GV/lv_10G" 이렇게 기존에 용량이 20GiB던 LV를
15G로 줄인다고 하자 

빨간 줄로 표시한 곳에 "지금 이 행위가 당신의 데이터를 파괴할 수 있습니다.
정말로 용량을 줄일 겁니까? [yes / no]"
이렇게 물어보죠? 저희는 딱히 이 LV에 만든 것도 없기에
걱정없이 그냥 "Y(태양신 만ㅅ....)" 을 쳐줍니다.




네 성공적으로 용량이 15GiB로 줄었습니다.


iii) [pv, vg, lv]remove


자 마지막으로 지우는 명령어를 알아야겠죠? 사실 이건 매우 간단합니다.
그냥 지우는 거니깐요, 원래 만드는 건 힘들지만 없에는 건 엄청 편하잖아요?

오랜만에 "PV"가 등장했네요! 왜 일까요? 그야 당연히 물리적인 공간도
"제거"하는 건 할 수 있기 때문이죠!

아 중요한 것은 제거하는 건 만드는 것과 반대로
"LV --> VG --> PV"순으로 제거 해야합니다. 뭐 당연한거쥬?

만약 순서를 틀리게 제거하려 하면





이렇게 사용중이며 "PV면 VG"를, "VG면 LV"를 먼저 제거해달라고 나옵니다.



lvremove [제거할 LV이름] : LV를 제거하겠다.





"lvscan"으로 확인 한 뒤 제거 완료! 제거한 공간 만큼 다시 "VG"공간은 확보되겠죠?



vgremove [제거할 VG이름] : VG를 제거하겠다.





"pvscan"이 vgscan보다 더 좋은 것 같아요 ㅋㅋ 확인한 뒤
제거~



pvremove [제거할 PV이름] : PV를 제거하겠다.






"pvscan"으로 확인한 다음

"2번"대로 성공적으로 제거한 뒤, 다시 "pvscan"으로 확인하니
"/dev/sdd1"이 성공적으로 사라진 걸 볼 수 있습니다~


자 이제 여러분은 95%정도 마스터 하셨습니다.
마지막 5%는 이제 저희가 실제로 사용하는 루트파일시스템이 포맷된
"/dev/sda2"의 크기를 증가시켜 봅시다!




5. "centos VG"를 확장한 다음 루트파일시스템의 LV인 "/dev/mapper/centos-root"의 
크기를 확장해보자



"lvscan"명령어로 한번 지금 사용중인
"루트 파일시스템이 포맷된 LV"의 용량을 확인해 봅시다!






"/dev/centos/root" 라는 이름이 보이시죠? 저게 지금 바로
"최상단 루트 디렉토리에 마운트 된" "root LV"입니다.

이제 용량을 증가시켜 봅시다! 어떻게 하면 될까요?
참고로 이 "root LV"를 증가시키는 것엔 약간 함정이 있습니다

그것은 바로 "root LV""centos라는 LV"로 만들어졌다는 것이죠!
정확히 말하자면 저희가 저번부터 얘기를 했던 "LV가 된 /dev/sda2"
이름은 바로 "centos"였던 겁니다.


한번 "vgdisplay"으로 봐 봅시다.




 자 그럼 이제 어떻게 해야할 지 한번 생각해봅시다.
























그렇죠
 1. 아직 지우지 않은 PV가 2개 있었는데 그걸 "vgextend"명령어로 "centos" VG를 
확장한 다음






2. 확장한 "centos" VG를 이용해 
"lvextend -L [바꿀 사이즈] /dev/centos/root 이렇게 하면 될 겁니다!


하지만 아무래도 정확하게 남김 없이 용량을 주려면 "-l [PE개수]" 이렇게 줘야겠죠?

"vgdisplay"로 먼저 "ceotos"VG의 "남은 PE 개수"를 확인해주시고





"lvdisplay"로 "/dev/centos/root"의 "현재 PE 개수"를 확인해준다음





두 값을 더한 "14589"‬을






이렇게 줍니다. 이 "GiB"라는 값이 참 애매한 것 같아요...

자 이제 끝났으니 확인해볼까요?






머지?? 왜 증가가 안 됐죠?
그 이유는 저희는 분명 공간을 늘렸지만, 현재 최상위 루트 디렉토리에 포맷된
파일시스템 "XFS"는 공간이 늘어난 것을 인식하지 못했기 때문입니다.

그러므로 i) XFS파일 시스템이 늘어난 공간을 확인할 수 있게 해주는 명령어를 줘야하는데

바로 "xfs_growfs [파일시스템이 포맷된 마운트공간]"
입니다.




사진처럼 /dev/centos/root LV를 xfs로 포맷하고 마운트한 "/"를 대상으로
명령어를 실행하니, 파일시스템을 포맷하듯이 수 많은 정보가 뜨며

마지막에 블록의 크기가 증가했다고 뜹니다.

이제 다시 확인해볼까요?




크으 성공적으로 30GB가 증가한 모습입니다!



여기까지 하셨으면 이제 여러분들은 "LVM"이 뭔지 확실히 알게 됐을겁니다.

와,, 그동안 네트워크 공부를 하다가 오랜만에 리눅스 포스트를 써보는데,
카페에서 아메리카노 한잔 시키고 11시간동안 풀 집중해서 포스트했네요 ㅋㅋㅋㅋ ㅠㅠ
토할 것 같아요..

제 하루와 영혼을 갈아넣은 이 포스트가 꼭 도움이 되셨으면 좋겠고!
도움이 되셨다면 구글 블로그 팔로우, 좋아요 클릭과 따듯한 댓글 부탁합니다!

공감, 댓글을 달려면 로그인 해야하니 귀찮으실거 압니다.
하지만 여러분의 그 노력으로 단 공감 및 댓글은 정말 블로거에 엄청 큰 힘이 됩니다!

그럼 다음에는 더욱 무시무시한 ㅎ.. RAID에 대해서 포스트해보겠습니다!






댓글 33개:

  1. 이번 포스팅 대박이네요~ㅎㅎ

    답글삭제
    답글
    1. 아앗! 도움이 됐다니 정말 다행입니다 ㅎㅎ

      삭제
  2. 많은 도움 되었습니다^&^

    답글삭제
  3. 정말 감사합니다. 큰 배움이 되었습니다.

    답글삭제
  4. 다른 글들을 많이 찾아보았지만, 이 글 한방에 이해가 다되었네요. 감사합니다!!

    답글삭제
  5. 덕분에 많이 알아갑니다!! 감사해요:)

    답글삭제
  6. 작성자가 댓글을 삭제했습니다.

    답글삭제
  7. 댓글 귀찮아서 절대 안다는데.. 너무 자세하게 잘 정리해주셔서 댓글 답니다. 자세한 정보 감사합니다.ㅎ

    답글삭제
    답글
    1. 도움이 돼 정말 다행입니다!! 소중한 시간 할애해 댓글 달아주셔서 감사해요!

      삭제
  8. 글이 너무 재밌고 이해하기 쉽게 설명 되어 있어서 도움이 많이 됐어요!! 좋은 글 감사합니다:)

    답글삭제
    답글
    1. 도움이 돼 정말 다행입니다!!! 따뜻한 댓글 감사해요~ :)

      삭제
  9. 이직해서 전혀 모르는 리눅스 담당하게 되었는데, 업무하는데 많은 도움이 되고 있어요! 감사합니다ㅎㅎ

    답글삭제
    답글
    1. 이야.. 도움이 돼 정말 다행입니다 ㅎㅎ 따뜻한 댓글 감사해요~!

      삭제
  10. 정성이 정말 대박입니다. 특히 챕터3에 모든 핵심이 쉽게 잘 설명되어있네요.
    좋은 컨텐츠 감사합니다.👍👍👍

    답글삭제
    답글
    1. 정성을 알아주셔서 감사합니다!! 도움이 돼 다행이에요!

      삭제
  11. 이해안됐지만 네번정도 읽으니 이해 팍팍 잘됩니다. 감사합니다

    답글삭제
  12. AWS EC2 Instance 를 통해 SAP ERP 를 Cloud 위에 구축 중이었는데 AWS 에서 제공하는 Storage 중 'gp2, gp3'에 다음과 같은 문구가 써져있길래("striped with LVM") LVM이 무엇인지 파악하려다가 마무님의 웹페이지에 방문하게 되었네요. 상세한 설명 덕에 LVM 에 대한 개념을 명확히 인지할 수 있었습니다. 감사합니다.

    답글삭제
    답글
    1. 아하 그렇게 해서 또 저의 블로그로 오시게 됐군요 ㅎㅎ 이번에도 도움이 돼 다행입니다!

      삭제
  13. 정말 좋은 포스트입니다 ㅜㅜㅜㅜ 감사합니다

    답글삭제
  14. 당신은 나의 구세주입니다. 나의 공중제비를 멈추게하십시오.

    답글삭제
    답글
    1. ㅋㅋㅋㅋ 너무 과찬이십니다... 도움이 돼 다행입니다!!

      삭제
  15. LVM 개념 하나도 몰랐는데 이 글 보고나니 완전 이해가 잘가요!! 감사해요

    답글삭제
    답글
    1. 이해가 잘 되셨다니 정말 다행입니다!! 따뜻한 댓글 감사해요!!

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!