본문 바로가기

OS,Network,Container

CentOS7 Parted로 LVM 생성, 확장 (PE, LE, e2label, xfs_admin ..)

반응형

CentOS7 Parted로 LVM 생성, 확장 (PE, LE, e2label, xfs_admin, ..)

 

 

들어가기에 앞서 간단한 용어 이해 및 사용할 개념과 명령어들을 소개하겠다.

 

 

# 파티션 : 하드디스크의 용량을 나누는 것

# 파일시스템 : 컴퓨터에서 파일이나 자료를 쉽게 접근할 수 있도록 조직시켜주는 system ( 말 그대로 File을 관리하는 체계)

# 마운트 : 디스크공간과 디렉터리를 연결해주는 것

 

 

사용 개념 & 명령어

 

- LVM

- partition

- PE, LE

- e2label, xfs_admin

- pvcreate, vgcreate, lvcreate, vgextend, lvextend, pvs, pvscan, vgs, vgscan, lvs, lvscan, pvdisplay, vgdisplay, lvdisplay

- LABEL을 통한 마운팅

- /etc/fstab

- resize2fs

 

 

 

 

 


LVM(Logical Volume Management)을 사용하는 이유 : 물리적인 하드디스크를 사용하면서 용량을 다 쓰게 되면 아예 더 큰 용량의 하드디스크로 교체해야 한다. 하지만 LVM을 이용한다면 유동적으로 용량을 확장할 수 있다.

또 n개의 디스크 공간을 vg란 볼륨 그룹으로 합친 후에 다시 LV(Logical Volume)으로 나누어 쪼갤 수 있다.

 

 

0. 디스크 조회

1. 파티션 나누기

2. pv, vg, lv 생성

3. 파일시스템 포맷, 마운트 디렉터리 생성

4. LABEL 작업

5. 최종 마운트

6. lv 확장

 

 

 

 

 

 

[ 디스크 조회 ]

 

 

 

 

 

- df -h

파일시스템 디스크 공간 사용량을 확인하는 명령어이다.

 

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.8M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  1.3G   15G   8% /
/dev/sda1                477M  106M  342M  24% /boot
/dev/mapper/centos-home  9.8G   37M  9.2G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0

 

 

- lsblk      // block device를 보여주는 명령어

 

sda1은 /boot, sda2는 swap, sda3는 각각 17.5G가 / (root), 10G가 /home에 마운트가 되어있다.

그 외 sdb와 sdc는 현재 파티션 생성도 하지 않았다. 이 놈들을 요리해서 LVM을 만들어보겠다.

 

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  500M  0 part /boot
├─sda2            8:2    0    2G  0 part [SWAP]
└─sda3            8:3    0 27.5G  0 part
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-home 253:1    0   10G  0 lvm  /home
sdb               8:16   0   30G  0 disk
sdc               8:32   0   20G  0 disk
sr0              11:0    1 73.7M  0 rom
sr1              11:1    1  942M  0 rom

 

 

- fdisk -l          // 좀 더 상세히 보고 싶다면...

 

[root@localhost ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000dddb6

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048     5220351     2097152   82  Linux swap / Solaris
/dev/sda3         5220352    62914559    28847104   8e  Linux LVM

Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-root: 18.8 GB, 18798870528 bytes, 36716544 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-home: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 

 


 

[ 1. Parted를 통한 Partition 생성 ]

 

# 우선 Parted 명령어에 대해 간략히 알아보자.

 

parted [disk] 를 통해 parted로 들어와서 help를 치면 아래와 같은 내부 명령어 리스트가 나온다.

 

 

1. mklabel LABEL-TYPE

라벨의 타입을 지정해주는 것이다. 대표적으로 msdos, gpt 등이 있다. ( man mklabel 한 다음에 /mklabel 치면 상세한 정보를 얻을 수 있음 )

 

2. mkpart PART-TYPE [FS-TYPE] start end

파티션 구간을 나눠주는 것이다.

 

ex ) mkpart primary 2048s 100%              // 하드디스크의 섹터가 2048s부터 시작하므로 2048s 부터 100% (끝까지)

ex ) mkpart primary 0 30g                      // 0부터 30g까지 primary 타입으로 파티션을 나눠줌.

 

참고로, mkpart 2048s 는 구글링하면 자세히나옴... ( fdisk로 해도 2048s 부터 시작함 )

 

3. rm NUMBER 

파티션을 삭제해준다.

 

4. unit UNIT

default unit을 지정해준다. (gb, s, tb, mb, mib, gib 등등 가능, gb로 지정해줬다면 mkpart로 파티션 시작과 끝 지정할 때 단위를 안써줘도 된다. )

 

5. q

다 했으면 나가셈ㅋ

 

 

 

 

 

 

 

 

 

 

- parted /dev/sdb

- p

맨 처음, p(print)를 쳐보면 Error 라고 뜬다. label 지정을 해주지 않았기 때문이다

- mklabel gpt

gpt로 인해 2T 이상의 Partition도 생성 가능. 가능하면 fdisk보단 parted를 쓰는 습관을 들이자

- mkpart primary 0 10g

 

# 아래 경고가 뜨는것은 디스크의 섹터때문이다. 0 대신 2048s라고 치면 경고창이 안 뜰 것이다. (근데 무시해도됌)

Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i

 

 

[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
(parted) mklabel gpt
(parted) mkpart primary 0 10g
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size     File system  Name     Flags
 1      17.4kB  10.0GB  10000MB               primary

(parted) q
Information: You may need to update /etc/fstab.

/dev/sdb의 디스크 용량이 32.2GB 이므로 그 중 0~10g에 /dev/sdb1을 파티션으로 나누어주었다.

 

 

 

- parted /dev/sdc

 

이번엔 2048s 을 시작점으로 주었다.

[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 2048s 20g
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  20.0GB  20.0GB               primary

(parted) q
Information: You may need to update /etc/fstab.

 

 

- lsblk

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  500M  0 part /boot
├─sda2            8:2    0    2G  0 part [SWAP]
└─sda3            8:3    0 27.5G  0 part
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-home 253:1    0   10G  0 lvm  /home
sdb               8:16   0   30G  0 disk
└─sdb1            8:17   0  9.3G  0 part
sdc               8:32   0   20G  0 disk
└─sdc1            8:33   0 18.6G  0 part
sr0              11:0    1 73.7M  0 rom
sr1              11:1    1  942M  0 rom

 

 

 

 

- pvcreate /dev/sdb1 /dev/sdc1

- vgcreate vg01 /dev/sdb1 /dev/sdc1

- vgs

- lvcreate -n lv이름 -L 용량 vg이름

 

lvcreate -n lv01 -L 27.93g vg01 로 lv를 생성하려니 볼륨그룹의 불충분한 잉여 공간이라고 뜬다.

( 7150 extents, 7151 required ) -> 7150 extnets 가 있는데 7151 extents를 요청했으므로 에러가 뜸.

잠시후에 설명할 PE와 LE의 개념을 미리 맛보기로 설명해보자면 PE는 Physical Extent고, LE는 Logical Extent이다.

각각 범위(공간)의 용량의 defaults 값은 4MB이고, 변경 가능하다.

 

pvs를 해보니 28mb 남았군ㅎ

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdc1
  Volume group "vg01" successfully created
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found volume group "vg01" using metadata type lvm2
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <27.51g      0
  vg01     2   0   0 wz--n- <27.93g <27.93g
[root@localhost ~]# lvcreate -n lv01 -L 27.93g vg01
  Rounding up size to full physical extent 27.93 GiB
  Volume group "vg01" has insufficient free space (7150 extents): 7151 required.
[root@localhost ~]# lvcreate -n lv01 -L 27.90g vg01
  Rounding up size to full physical extent 27.90 GiB
  Logical volume "lv01" created.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda3  centos lvm2 a--  <27.51g     0
  /dev/sdb1  vg01   lvm2 a--   <9.31g 28.00m
  /dev/sdc1  vg01   lvm2 a--   18.62g     0

 

 

 

 

[ File System 포맷 & 마운트 디렉터리 생성 & Label을 통한 마운트 ( e2label ) ]

 

 

 

 

 

- mkfs.ext4 /dev/vg01/lv01

- mkdir /mnt/lv01

 

type을 ext4로 파일시스템 포맷

마운트 디렉터리 생성 ( /mnt/lv01 )

[root@localhost ~]# mkfs.ext4 /dev/vg01/lv01
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1831424 inodes, 7314432 blocks
365721 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2155872256
224 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

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

[root@localhost ~]# mkdir /mnt/lv01

 

 

 

- e2label /dev/vg01/lv01 lv01

디바이스 /dev/vg01/lv01 에 lv01 이라고 LABEL 생성

 

- e2label /dev/vg01/lv01 하면 라벨명이 출력된다.

 

[root@localhost ~]# e2label lv01 /dev/vg01/lv01
e2label: No such file or directory while trying to open lv01
Couldn't find valid filesystem superblock.
[root@localhost ~]# e2label /dev/vg01/lv01 lv01
[root@localhost ~]# e2label /dev/vg01/lv01
lv01

 

 

 

 

- vi /etc/fatab 에서

LABEL로 auto-mount 설정을 해준다.

 

맨 아래줄을 쳐준다.

 

 

 

- mount LABEL=lv01

- df -h

- blkid

- lsblk

[root@localhost ~]# mount LABEL=lv01
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  1.3G   15G   8% /
/dev/sda1                477M  106M  342M  24% /boot
/dev/mapper/centos-home  9.8G   37M  9.2G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/vg01-lv01     28G   45M   26G   1% /mnt/lv01


[root@localhost ~]# blkid
/dev/sda1: UUID="8edd49be-b15a-4d90-81dc-11f39ded486a" TYPE="ext4"
/dev/sda2: UUID="aa639331-027e-4540-bdc5-d392fd346096" TYPE="swap"
/dev/sda3: UUID="jx9Hk2-KyaP-Z8Ku-jrfe-yYOs-Pjiy-tEzHey" TYPE="LVM2_member"
/dev/sdb1: UUID="BkwjT7-BafK-7s0I-he8j-MDt2-EVU9-36WKDV" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="0bb26d9b-d53a-45a0-b77b-e1a3bdc27d1f"
/dev/sdc1: UUID="4sKHXN-scRg-bLMc-UjZ4-ScNj-Y6iL-yATf3q" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="420ef916-4e69-49ed-8324-1df8e02b28e8"
/dev/sr0: UUID="2020-03-22-00-06-22-00" LABEL="CDROM" TYPE="iso9660"
/dev/sr1: UUID="2019-09-11-19-02-53-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="0e5e2272-f622-476b-82b4-b8e5ffed85d7" TYPE="ext4"
/dev/mapper/centos-home: UUID="ac54475a-e7d0-4af3-91b1-eeefc61d60c2" TYPE="ext4"
/dev/mapper/vg01-lv01: LABEL="lv01" UUID="faedb852-52bf-4ed5-992d-29b2dd216a21" TYPE="ext4"


[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  500M  0 part /boot
├─sda2            8:2    0    2G  0 part [SWAP]
└─sda3            8:3    0 27.5G  0 part
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-home 253:1    0   10G  0 lvm  /home
sdb               8:16   0   30G  0 disk
└─sdb1            8:17   0  9.3G  0 part
  └─vg01-lv01   253:2    0 27.9G  0 lvm  /mnt/lv01
sdc               8:32   0   20G  0 disk
└─sdc1            8:33   0 18.6G  0 part
  └─vg01-lv01   253:2    0 27.9G  0 lvm  /mnt/lv01
sr0              11:0    1 73.7M  0 rom
sr1              11:1    1  942M  0 rom

 

 

 

 

 

 

[ LV 확장 ]

 

 

- parted /dev/sdb

- p                                 // 1번째 파티션이10g까지 설정되어 있음을 확인

- mkpart primary 10g 100% // 10g부터 끝까지 파티션 나눠줌

- p

- q

- pvcreate /dev/sdb2          // pv 생성해줌

[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size     File system  Name     Flags
 1      17.4kB  10.0GB  10000MB               primary

(parted) mkpart primary 10g 100%
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size     File system  Name     Flags
 1      17.4kB  10.0GB  10000MB               primary
 2      10.0GB  32.2GB  22.2GB                primary

(parted) q
Information: You may need to update /etc/fstab.

[root@localhost ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.

 

 

 

 

 

- - - - - - - - -

밥먹고 왔더니 원격ssh가 꺼져서 데이터가 날라갔다...

 

그 이후로의 방법론을 텍스트로... 알려드리겠습니다.

 

 

 

  1. vgextend 명령어를 사용하여 'vg01' 볼륨에 '/dev/sdb2' 파티션을 추가해서 확장합니다.
  2. lvextend 명령어를 사용하여 ' /dev/vg01/lv01 '를 확장시켜줍니다. PE와 LE를 사용하여 확장시킬 겁니다.
  3. lvscan이나 lvdisplay를 통해 lv size가 증가됬나 확인한다.
  4. df -h 를 통해 확인해보면 lv공간만 늘렸지 늘어난 공간에 대해 파일시스템에 인식을 시켜주지 못했으므로 파일시스템을 포맷해준다.

 

 

PE란, Physical Extent의 줄임말로 우리나라 말로 하면 '피지컬 범위'입니다.

LE란, Logical Extent의 줄임말로 우리나라 말로 하면 '로지컬 범위'입니다.

 

그러니까 Physical Volume의 최소 단위를 PE라고 하며, Logical Volume의 최소 단위를 LE라고 합니다.

그래서 볼륨의 크기를 지정할 때도 단순 용량 (gb, tb)으로도 지정해줄 수 있지만 PE나 LE로도 지정해줄 수 있다는 뜻입니다. 

 

PE와 LE는 같은 값이라 생각하시면 되고, 단지 Physical 영역이냐 Logical 영역이나 2가지만 다릅니다.

 

default 값으로는 4MB 입니다. ( 1PE = 1LE = 4MB )

 

 

 

 

명령어로 적어봄으로써 순차적으로 보여드리겠습니다. 

 

  • vgextend vg01 /dev/sdb2           // vg01 확장
  • vgdisplay vg01 | grep -i free ; lvdisplay /dev/vg01/lv01 | grep -i current

vgdisplay vg01 출력내용 중에서 grep -i free 만 떼오고 바로 이어서 lvdisplay /dev/vg01/lv01 출력내용 중 grep -i current 만 떼온 걸 이어서 출력합니다.

free는 ' Free PE ' 로써, 남아있는 PE를 나타내는데, 확장 가능한 PE를 확인할 수 있으며

current는 current LE 로써, 확장 전 lv01에는 LE가 몇 개 있는지 확인이 가능합니다.

 

그러면, Free PE가 5400개, current LE가 10000개라 가정했을 때

lvextend 이후에는 무엇을 써야할까요?

Free PE와 current LE를 더한 15400을 적어줘야 합니다. 그래야 확장시켜준 이후 Free PE가 한개도 남지 않고 모두 할당이 되겠습니다.

 

  • lvextend -l 12445 /dev/vg01/lv01       // -L 은 용량, -l 은 LE 임. LE 12445개를 /dev/vg01/lv01에 할당해준다. ( 만약 LE 개수가 current LE보다 작을 시 Error 뜹니다 ~~ ^^ )
  • lvscan lvdisplay     // lv volume size 증가했음
  • df -h                   // 이거로 확인해보니 파일시스템은 늘어난 용량을 인식하지 못했음.
  • resize2fs /dev/vg01/lv01   // resize2fs 명령어를 통해 파일시스템 재포맷

@@ 중요 @@

ext2~4인 경우에는 resize2fs

xfs인 경우에는 xfs_growfs

 

 

 

  • df -h                   // 늘어났음 ㅋ

 

[root@localhost ~]# vgdisplay vg01 | grep -i free;lvdisplay /dev/vg01/lv01 | grep -i current
  Free  PE / Size       0 / 0
  Current LE             12445
  - currently set to     8192


[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  1.3G   15G   8% /
/dev/sda1                477M  106M  342M  24% /boot
/dev/mapper/centos-home  9.8G   37M  9.2G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/vg01-lv01     28G   45M   26G   1% /mnt/lv01
[root@localhost ~]# man resize2fs
[root@localhost ~]# resize2fs /dev/vg01/lv01
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.7M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  1.3G   15G   8% /
/dev/sda1                477M  106M  342M  24% /boot
/dev/mapper/centos-home  9.8G   37M  9.2G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0
/dev/mapper/vg01-lv01     48G   52M   46G   1% /mnt/lv01
반응형