2017년 7월 3일 월요일

How to choose best storage device for you on softlayer



https://www.ibm.com/developerworks/community/blogs/9e696bfa-94af-4f5a-ab50-c955cca76fd0/entry/how_to_choose_best_storage_device_for_you_on_softlayer?lang=en

2017년 7월 2일 일요일

리눅스 LVM에 관하여

출처 : http://sgbit.tistory.com/12  ,  http://sgbit.tistory.com/13


LVM이란 Logical Volume Manager. 논리 볼륨 관리자라는 뜻으로 우리가 사용하는 물리적인 (하드)디스크 ex) hda, sda등 여러개를 논리적인 디스크으로 할당하여 유연하게 관리할 수 있게 해줍니다. 비슷한 방식으로 Software RAID가 있는데 LVM이 보다 더 주목을 받고 있습니다. LVM이 주목을 받는 이유는 다음과 같습니다.
·쉬운 관리
·직관적인 저장 장치로의 접근
·뛰어난 확장성
·믿을만한 안전성과 효율
.편의에 따라 장치 이름 지정
·스냅샷 기능 지원
예를 들어, 처음 설치할 때 /home 파티션에 1GB를 할당한 후 나중에 이 파티션을 늘리는 방법은 운영체제를 새로 설치, 파티션을 나누는 방법 밖에 없다. 이때 lvm을 이용, /home 파티션 크기를 10GB로 늘릴 수 있다. 반대로 10GB의 필요없는 /var라는 파티션이 있다면 이것을 줄여 다른 곳에 사용할 수 있다. 또 lvm을 이용하면 기존 하드 디스크의 /home 파티션이 꽉 차 더 이상 사용할 수 없을 때, 하드 디스크를 추가해 /home의 용량을 늘릴 수 있다. lvm은 이렇게 고무줄처럼 파티션을 늘였다 줄였다 할 수 있어 대형 서버에서 아주 유용한 기능이다.
이해하기 쉽도록 그림을 올리고 LVM에 쓰이는 용어들도 기입하겠습니다.
1. 파티션(Partition)
하나의 하드디스크에 대해 영역(구역)을 나누는 것을 말한다. fdisk로 파티션 설정 가능.
2. 물리볼륨(PV, Physical Volume)
물리볼륨은 각각의 파티션을 LVM으로 사용하기 위해 형식을 변환시킨 것이다.(/dev/ hda1, /dev/hda2 등)
3. 논리볼륨(LV, Logical Volume)
사용자가 다루게 되는 부분이며 마운터 포인터로 사용할 실질적인 파티션이다. 크기를 확장 및 축소 시킬 수 있다.
4. 볼륨그룹(VG, Volume Group)
PV로 되어 있는 파티션을 그룹으로 설정한다. /dev/sda1 을 하나의 그룹으로 만들 수도 있고, /dev/sda1 + /dev/sda2처럼 파티션 두 개를 하나의 그룹으로 만들 수 있다.
5. 물리적 범위(PE, Physical Extent)
PE는 LVM이 물리적 저장공간(PV)을 가리키는 단위이다. 기본 단위는 4MB이다.
6. 논리적 범위(LE, Logical Extent)
LE는 LVM이 논리적 저장공간(LV)을 가리키는 단위이다. 기본 단위는 물리적 범위와 동일합니다.
7. VGDA(Volume Group Descriptor Area) : 볼륨그룹의 모든 정보가 기록되는 부분. VG의 이름, 상태, 속해있는 PV, LV, PE, LE들의 할당 상태 등 을 저장한다. VGDA는 각 물리볼륨의 처음부분에 저장된다.
예를 들어 제가 VMware(player or Warkstation)을 사용하여 리눅스를 하드디스크(SCSI)를 20GB(기본 설정)를 만들어 놓고 설치를 시작하여

모든 공간 사용 하고 파티션 레이아웃 확인 및 변경(V)을 체크하고 다음을 누르면

위 화면처럼 나오는데 지금의 설정이 Centos 6.6의 기본 저장 장치 설정입니다.  Centos같은 경우는 설치 때부터 LVM을 사용 하고 있다는 걸 알 수 있습니다. 문득 떠올라서 다시 만들고 그 때에 하드디스크를 10GB짜리 두개를 추가 하여 설치를 진행하였을 때

이렇게 추가한 디스크들도 LVM에 적용하게됩니다. 그럼 이미 설치되어 있는 리눅스도 하드디스크(sdb, sdc)를 추가하면 적용이 되는지 확인 해보겠습니다.(확인 명령어는 fdisk -l)
볼륨그룹(volGroup)에 적용 되있지도 않고 파티션도 되어 있지 않습니다. 이 같은 경우에는 명령어를 사용함으로서 LVM 설정을 할 수 있습니다.


저번에 설치된 리눅스에 추가한 디스크(sdb, sdc)로 LVM을 만들어 보겠습니다.
LVM을 생성하는 과정은 이렇습니다.
1. 하드디스크를 장착(생성)  (완료)
2. 하드디스크의 파티션을 LVM타입(8e)으로 생성  (#fdisk)
3. 물리볼륨을 생성  (#pvcreate)
4. 만든 물리볼륨을 볼륨그룹으로 모아 설정   (#vgcreate)
5. 위 볼륨그룹에서 논리볼륨을 원하는 크기대로 생성  (#lvcreate)
6. 파일시스템으로 포맷 후 마운트   (#mk~, mount)
여기서는 putty로 입력한 명령어를 출력하여 붙이겠습니다.
1. 하드디스크를 LVM타입으로 파티션 생성 (fdisk /dev/[하드디스크 이름])
[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p                                                                                        
Partition number (1-4): 1
First cylinder (1-652, default 1): (Enter)     (생성할 파티션의 범위 설정)
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652): (Enter)   (파티션 하나만 설정 할게요)
Using default value 652

Command (m for help): t   (파티션 시스템 타입 변경)
Selected partition 1
Hex code (type L to list codes): 8e    ( l 을 누르면 리스트 출력)
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w      (저장하고 끝낸다)
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#(/dev/sdc 도 동일하게 해줍시다.)
생성된 파티션은 뒤에 숫자가 붙습니다.  ex)sdb1, sdc1
2. 물리볼륨 생성 (pvcreate [파티션 이름])
[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
pvdisplay 로 물리볼륨 확인 가능
3. 볼륨그룹 설정 (vgcreate [볼륨그룹 이름] [물리볼륨1] [물리볼륨2])
[root@localhost ~]# vgcreate datavg /dev/sdb1 /dev/sdc1
  Volume group "datavg" successfully created
vgdisplay 로 볼륨그룹 확인시 두 물리볼륨의 용량이 합한만큼의 용량이 나옵니다.
4. 논리볼륨 생성 (lvcreate -n [논리볼륨 이름] -(L, l) [size] [볼륨그룹 이름])
[root@localhost ~]# lvcreate -n data -L 5GB datavg        (-n : name, -L : 사이즈(용량) 지정)
  Logical volume "data" created
[root@localhost ~]# lvcreate -n backup -l 100%FREE(=5GB) datavg    (-l : 사이즈(pe) 지정)
  Logical volume "backup" created
-L 과 -l 의 차이는 -L은 우리가 늘 보는 KB,MB,GB,TB 로 정하는 옵션이고 -l은 따로 pe의 개수로 용량을 지정합니다. 이 때 1pe가 4MB 입니다.
5. 파일 시스템 포맷 및 마운트
-포맷
[root@localhost ~]# mkfs.ext4 /dev/datavg/data
... (포맷중~)
[root@localhost ~]# mkfs.ext4 /dev/datavg/backup
... (포맷중~)
-마운트
[root@localhost ~]# mkdir /mnt/data
[root@localhost ~]# mkdir /mnt/backup
[root@localhost ~]# mount -t ext4 /dev/datavg/data /mnt/data
[root@localhost ~]# mount -t ext4 /dev/datavg/backup /mnt/backup
[root@localhost ~]#df -l    마운트 확인
[root@localhost ~]#vi /etc/fstab            부팅시 자동으로 디스크를 읽어줄 수 있게 fstab 설정
/dev/datavg/data        /mnt/data               ext4    defaults        0 0       (맨밑에서 추가)
이렇게 완성된 걸 볼 수 있습니다.  PV(Physical Volume)생성할 때 4.99GB가 돼었고 4.8G로 나오네요.
LVM을 만들었으니 명령어들을 여러가지 더 알려드리겠습니다.
  LVM 명령어        사 용 법
pvcreate            fdisk로 만든 파티션을 물리적 볼룸(PV)을 생성하는 명령어이다.
문법 : pvcreate 디바이스명    ex) # pvcreate /dev/hdb1
  vgscan              디스크에 있는 볼륨그룹(VG)를 검색하여 출력해준다.
문법 : # vgscan
vgcreate            볼륨그룹을 생성하는 명령어로 생성된 PV를 지정한 볼륨그룹에 포함시키면서 생성한다.
문법 : vgcreate 볼륨그룹명 디바이스명 디바이스명
ex) # vgcreate lvm /dev/sda2 /dev/sdb1 -> lvm 이라는 볼륨그룹을 생성하고
/dev/sda2, /dev/sdb1 이라는 PV를 포함시킨다.
  vgdispaly          볼륨그룹의 속성과 정보를 보여주는 명령어이다.
문법 : vgdisplay [option] [볼륨그룹명]
옵션 : -v = 자세히 보여주는 옵션. gical Volume과 Physical Volume도 같이 보여준다.
vgextend          미리 생성된 볼륨그룹에 추가로 물리볼륨을 추가할 때 사용한다.
문법 : vgextend 볼륨그룹명 새PV명
ex) # vgextend lvm /dev/sdd1 -> lvm이라는 볼륨그룹에 /dev/sdd1을 추가한다.
  vgreduce          볼륨그룹에 있는 물리볼륨을 삭제하는 명령어다.
문법 : vgreduce 볼륨그룹명 PV명
ex) # vgreduce lvm /dev/sdd1 -> lvm이라는 불륨그룹에서 /dev/sdd1을 삭제한다.
vgchange        볼륨그룹을 속성을 변경하는 명령으로 볼륨그룹을 사용가능여부, 최대 LV 갯수등을 변경 할 수 있다.
문법 : vgchange 옵션 볼륨그룹명
옵션
-a y (or) n : 볼륨그룹의 사용여부를 지정
-l 갯수 : 해당 볼륨그룹에 생성할 수 있는 최대 논리볼륨 수 지정
ex) # vgchange -a y lvm -> lvm이라는 볼륨그룹을 활성화시킨다.
# vgchange -a n lvm -> lvm이라는 볼륨그룹을 비활성화시킨다.
# vgchange -l 100 lvm -> lvm이라는 볼륨그룹을 최대 논리볼륨 수를 100개로 지정한다.
  vgremove      볼륨그룹을 제거하는 명령
문법 : vgremove 볼륨그룹명
ex) # vgremove lvm -> lvm이라는 볼륨그룹을 삭제한다.
lvcreate        볼륨그룹안에 lv(논리볼륨)을 생성하는 명령이다.
문법 : lvcreate 옵션 볼륨그룹명
옵션
-L : LV의 사이즈를 지정하는 옵션으로 킬로바이트, 메가바이트, 기가바이트, 테라바이트 단위를 붙여 지정가능하다.
-l : LV의 사이즈를 지정하는 옵션으로 pe의 개수로 용량을 지정한다. 참고로 보통 1pe당 4MB이다.
-n : LV의 이름을 지정하는 옵션이다. 
ex) 1. # lvcreate -L 2000M -n backup lvm -> lvm이라는 볼륨그룹에 backup이라는 이름으로 2000메가바이트(2기가) 용량으로 LV을 생성한다.
2. # lvcreate -l 250 -n data lvm -> lvm이라는 볼륨그룹에 data라는 이름으로 250pe(약 1GB) 용량으로 LV를 생성한다.
  lvscan          디스크에 있는 논리볼륨을 찾아준다.
문법 : lvscan [옵션]
옵션 : -v 정보를 자세히 보여준다.
ex) # lvscan
lvdisplay      논리볼륨의 정보를 보여준다.
문법 : lvdisplay [옵션] LV명
옵션 : -v : 정보를 자세히 보여준다.
ex) # lvdisplay -v /dev/lvm/data -> /dev/lvm/data 라는 LV의 정보를 자세히 보여준다.
  lvextend      논리볼륨의 용량을 확장하는 명령이다.
문법 : lvextend 옵션 [볼륨그룹명] LV명
옵션
-l +사이즈 : 지정한 pe수만큼 용량을 늘린다.
-L +사이즈[k,m,g,t] : 지정한 사이즈만큼 용량을 늘린다. 단위를 표시하지 않으면 기본 MB단위이다.
ex) # vlextend -L +200M /dev/lvm/data -> 기존의 용량에 추가로 200MB를 할당한다.
lvreduce      논리볼륨의 용량을 줄이는 명령
문법 : lvreduce 옵션 [볼륨그룹명] LV명
옵션
-l -사이즈 : 지정한 pe수만큼 용량을 줄인다.
-L -사이즈 : 지정한 사이즈만큼 용량을 줄인다. 단위를 표시하지 않으면 기본 단위는 MB 이다.
ex) # lvreduce -L -500 /dev/lvm/data -> /dev/lvm/data의 용량을 500MB 줄인다.
  lvresize      논리볼륨의 용량을 조정하는 명령이다.
문법 : lvresize 옵션 (+,-)사이즈 [논리그륩명]
옵션
-l -사이즈 : 지정한 pe수만큼 용량을 줄인다.
-L -사이즈 : 지정한 사이즈만큼 용량을 줄인다. 단위를 표시하지 않으면 기본 단위는 MB 이다.
ex) # lvreduce -L 3GB /dev/datavg/data -> /dev/datavg/data의 용량을 3GB로 줄인다.

 주의 : lv 용량조절은 데이터를 손실시킬 수 있으니 신중히 하시길 바랍니다.
읽어주셔서 감사합니다.