본문 바로가기
Technical/System

리눅스에서 VG 공유하기 (vgexport / vgimport)

by 박성규 2026. 10. 19.

하나의 디스크를 두대의 서버에서 공유하며 사용할 경우 두대의 서버에서 동시에 읽기 쓰기가 불가능하다.

그 이유는 A 서버의 OS가 디스크에 접근하여 데이터를 관리하며 읽기/쓰기를 하고 있는데 이때 B서버의 OS가 디스크에 접근하여 데이터를 생성하거나 수정했을 경우 A서버의 OS가 관리하는 데이터 정보와 달라지게 되면서 정합성이 맞지 않아 데이터를 쓸수 없게 되어 버린다. 그래서 OS에서는 디스크에 접근했을 경우 디스크의 소유권을 가져가면서 데이터 보호를 위해 다른 OS의 접근을 차단해 버린다.

 

결국 두대의 서버에서 하나의 디스크를 사용하려고 하면 소유권을 넘겨 가며 번갈아 가며 사용해야 한다는 뜻이다. 이렇다 보니 서버 이중화를 할 때 Active-Active가 아닌 Active-Standby로 구성을 한다.

 

하지만 모든 이중화 구성이 Active-Standby은 아니고 Active-Active도 가능한데 다만 Active-Active 구성을 하기 위해선 별도의 이중화 솔루션을 사용해야 한다.

 

아무튼 두대의 서버에 공유된 디스크에 LVM을 구성하고 VG넘겨가며 두대의 서버에서 같은 VG를 사용하기 위해 사용되는 명령어가 vgexport와 vgimport 이다.

 

vg를 공유하기 위해선 먼저 디스크를 공유해야 하는데 VMware 환경에서의 디스크 공유하는 방법을 아래 링크를 참고 하면 된다.

 

https://blog.innern.net/200

 

vSphere에서 공유볼륨 설정하는 방법

레거시 환경에서 서버를 Active/Active나 Active/Standby 방식으로 이중화 구성을 하려면 두대의 서버가하나의 스토리지의 볼륨을 바라보는 구성을 많이 하게 된다.이러한 스토리지 볼륨 공유 구성을

blog.innern.net

 

 

 

 

■ 테스트 환경

• VMware 8.0.3

• 게스트 VM : node1, node2

• VM OS : Rocky 10.2

• 공유 디스크 : sdb - 20GB

 

  

 

1. 공유 볼륨 디스크 확인

해당 다스크가 동일한 디스크 볼륨인지 UUID를 통해 확인한다.

# lsblk -o NAME,SIZE,MODEL,SERIAL,WWN

 

또는

 

# /usr/lib/udev/scsi_id -g -u -d /dev/sdb

 

 

 

2. sdb를 LVM 구성 및 파일시스템 생성하기

1) LVM 생성하기

먼저 node1에서만 sdb디스크로 LVM구성을 한다.

VG이름 : shareVG

LV이름 : sharelv

마운트포인트 : /share_disk

[root@node1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
 
[root@node1 ~]# vgcreate sharevg /dev/sdb
  Volume group "sharevg" successfully created
 
[root@node1 ~]# lvcreate -l +100%FREE --name sharelv /dev/sharevg
  Logical volume "sharelv" created.
 
[root@node1 ~]# mkfs.xfs /dev/mapper/sharevg-sharelv
meta-data=/dev/mapper/sharevg-sharelv isize=512    agcount=4, agsize=1310464 blks
            =                       sectsz=512   attr=2, projid32bit=1
            =                       crc=1        finobt=1, sparse=1, rmapbt=1
            =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
            =                       exchange=0   metadir=0
data     =                       bsize=4096   blocks=5241856, imaxpct=25
            =                       sunit=0      swidth=0 blks
naming   =version 2      bsize=4096   ascii-ci=0, ftype=1, parent=0
log      =internal log      bsize=4096   blocks=16384, version=2
           =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none             extsz=4096   blocks=0, rtextents=0
           =                       rgcount=0    rgsize=0 extents
           =                       zoned=0      start=0 reserved=0
[root@node1 ~]#

 

 

 

2) 파일시스템을 생성

lvm 구성한 볼륨을 xfs로 포맷하고 /share_disk 디렉토리에 마운트한다.

[root@node1 ~]# mkfs.xfs /dev/mapper/sharevg-sharelv
meta-data=/dev/mapper/sharevg-sharelv isize=512    agcount=4, agsize=1310464 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=1
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
         =                       exchange=0   metadir=0
data     =                       bsize=4096   blocks=5241856, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1, parent=0
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
         =                       rgcount=0    rgsize=0 extents
         =                       zoned=0      start=0 reserved=0
[root@node1 ~]# mkdir /share_disk
[root@node1 ~]#
[root@node1 ~]# mount /dev/mapper/sharevg-sharelv /share_disk
[root@node1 ~]#
[root@node1 ~]# df -Th
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/rl-root       xfs        30G  6.3G   24G  21% /
devtmpfs                 devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                     tmpfs     3.8G   84K  3.8G   1% /dev/shm
efivarfs                   efivarfs  256K   58K  194K  23% /sys/firmware/efi/efivars
tmpfs                     tmpfs     1.5G  9.3M  1.5G   1% /run
tmpfs                     tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
/dev/sda2                   xfs       960M  412M  549M  43% /boot
/dev/sda1                   vfat     1022M  9.0M 1014M   1% /boot/efi
tmpfs                       tmpfs     768M  120K  768M   1% /run/user/0
/dev/mapper/sharevg-sharelv  xfs        20G  424M   20G   3% /share_disk
[root@node1 ~]#

 

 

3. vgexport 하기

node1에서 sharevg를 export한다.

1) 파일시스템 umount

[root@node1 ~]# umount /share_disk
[root@node1 ~]#

 

2) vg 비활성화 하기

[root@node1 ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rl      -wi-ao---- <30.00g                                                   
  swap    rl      -wi-ao----   8.00g                                                   
  sharelv sharevg -wi-ao---- <20.00g                                                   
                                  ││
                                  │└─── Active - LV 활성화 상태
                                  └──── Open - 현재 장치가 열려 있음
 
[root@node1 ~]# vgchange -an sharevg
0 logical volume(s) in volume group "sharevg" now active
 
* vgchange 옵션
  -a = activation
  -y = yes
  -n = no
 
[root@node1 ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rl      -wi-ao---- <30.00g                                                   
  swap    rl      -wi-ao----   8.00g                                                   
  sharelv sharevg -wi------- <20.00g

 

 

3) vgexport 하기

[root@node1 ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  rl         1   2   0 wz--n- <38.00g    0
sharevg   1   1   0 wz--n- <20.00g    0
[root@node1 ~]#
[root@node1 ~]# vgexport sharevg
Volume group "sharevg" successfully exported
[root@node1 ~]#
[root@node1 ~]# vgs
VG      #PV #LV #SN Attr   VSize   VFree
rl         1   2   0 wz--n- <38.00g    0
sharevg   1   1   0 wzx-n- <20.00g    0
                              │││
                              ││└─── Exported - export 상태
                              │└───── Resizable - VG 크기 변경 가능
                              └─────── Writable - VG 쓰기 가능

 

 

4. vgimport 하기

공유 디스크를 맨 처음 구성을 하고 node1에서 lvm 구성을 했다고 하더라고 node2에선 그 어떤 lvm의 정보를 가지고 있지 않는 상태이다. 그래서 lvm 정보를 조회 해도 node1에서 생성한 lvm 정보를 볼수 없다.

[root@node2 ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sda3  rl lvm2 a--  <38.00g    0
 
[root@node2 ~]# vgs
  VG #PV #LV #SN Attr   VSize   VFree
  rl   1   2   0 wz--n- <38.00g    0
 
[root@node2 ~]# wipefs /dev/sdb
DEVICE   OFFSET   TYPE             UUID                                    LABEL
sdb      0x218     LVM2_member   Mfs0f2-RO4b-6Kdz-ia82-gSBb-Byd8-7VFzQs
 
/dev/sdb가 LVM 디스크임은 확인 되었으나 lvm 정보가 없음

 

LVM이 검색하고 사용할 수 있는 장치 목록에 디스크를 등록한다.

 

1) node2의 lvm 목록에 공유 볼륨 sdb 추가하기

 * 기존에 vgimport를 했던 이력이 있을 경우 건너띄어도 된다.

[root@node2 ~]# lvmdevices --adddev /dev/sdb
[root@node2 ~]#
[root@node2 ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  rl        1   2   0 wz--n- <38.00g    0
sharevg   1   1   0 wzx-n- <20.00g    0
 
node1에서 생성한 sharevg 정보가 보임

 

2) vgimport 하기

[root@node2 ~]# vgimport sharevg
Volume group "sharevg" successfully imported
[root@node2 ~]#
[root@node2 ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  rl        1   2   0 wz--n- <38.00g    0
  sharevg   1   1   0 wz--n- <20.00g    0
 
Attr의 세번째 값이 - 로 export 되지 않았음을 확인

 

 

3) vg 활성화 하기

[root@node2 ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rl      -wi-ao---- <30.00g                                                   
  swap    rl      -wi-ao----   8.00g                                                   
  sharelv sharevg -wi------- <20.00g 
 
[root@node1 ~]# vgchange -ay sharevg
  1 logical volume(s) in volume group "sharevg" now active
[root@node1 ~]#
[[root@node1 ~]# lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rl      -wi-ao---- <30.00g                                                   
  swap    rl      -wi-ao----   8.00g                                                   
sharelv sharevg -wi-a----- <20.00g
 
sharelv가 active 상태임을 확인

 

 

4) 파일시스템 마운트 하기

마운트할 디렉토리를 생성하고 마운트를 해준다.

[root@node2 ~]# mkdir /share_disk
[root@node2 ~]#
[root@node2 ~]# mount /dev/mapper/sharevg-sharelv /share_disk/
[root@node2 ~]#
[root@node2 ~]# df -Th
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/rl-root         xfs        30G  6.2G   24G  21% /
devtmpfs                  devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                     tmpfs     3.8G   84K  3.8G   1% /dev/shm
efivarfs                    efivarfs  256K   58K  194K  23% /sys/firmware/efi/efivars
tmpfs                     tmpfs     1.5G  9.3M  1.5G   1% /run
tmpfs                      tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
/dev/sda2                   xfs       960M  412M  549M  43% /boot
/dev/sda1                   vfat     1022M  9.0M 1014M   1% /boot/efi
tmpfs                       tmpfs     768M  120K  768M   1% /run/user/0
/dev/mapper/sharevg-sharelv xfs        20G  424M   20G   3% /share_disk

 

 

댓글