Linux LVM2
2023-10 add pysical volume to vg
2018-09-19 when umount, device busy!
2018-06-23 mount 명령
{: history-right}
LVM2 를 사용해 물리 disk를 논리 disk로 분할/합병/관리 하는 과정을 조금 정리한 것이다.
LVM2
SBC보드인 Odorid C2에 USB Memory를 사용해서 리눅스의 LVM을 이용하고 있다. 여기서는 LVM 설정에 대해서만 다루고 있다.
Single board computer 종류의 보드는 주 디스크로 SD Card, eMMC 를 사용하고, USB 메모리 등은 디바이스 장치로 /dev/sd* 이름으로 접근할 수 있다.
디스크 파티션
시스템에 사용할 디스크 파티션을 생성한다. 그리고 사용할 디스크 파티션 종류 LVM으로 해야 한다. parted
혹은 fdisk
를 사용해서 디스크 볼륨을 생성하고 사용한다.
parted
대상 디스크 목록을 통해 디스크의 크기 정보를 확인한다.
1 | sudo parted -l |
parted로 lvm 볼륨 잡기
1 | sudo parted /dev/sdb |
fdisk 사용
대상 디스크 목록을 통해 디스크의 크기 정보를 확인한다.
1 | sudo fdisk -l |
fdisk
로 파티션을 시작한다.
1 | # fdisk /dev/sda |
이제 새로운 파티션 ‘/dev/sda1’ 이 생성됐다.
LVM 생성하기
- LVM 종류로 파티션한 볼륨으로 Pysical volume 을 생성한다.
- Pysical volume을 Volume Group으로 등록한다.
- 실제 사용할 크기 만큼 Logical Volume으로 나눠 생성한다.
- 파일 시스템을 생성하고 마운트 한다.
시스템에 lvm2
를 설치한다.
1 | $ sudo apt install lvm2 |
Pysical Volume 만들기
파티션을 Pysical volume으로 만든다.
1 | $ sudo -s |
이제 물리볼륨을 로지컬 볼륨 그룹으로 나누고
1 | # vgcreate vg_usb /dev/sdb1 |
볼륨그룹 지우기
1
2 # vgremove vg_usb
Volume group "vg_usb" successfully removed
Logical Volume 만들기
로지컬 볼륨을 만든다. 용량은 -L 과 -l 옵션을 사용
-L [GB/KB/B..]
단위 용량-l PE
PE 용량 단위 - vgdisplay 에 표시되는 PE 개수
여기서 두개의 로지컬 볼륨을 만든다고 가정한다.
1 | # lvcreate -L +20G -n dbvol vg_usb |
생성한 로지컬보륨은 lvdisplay
로 자세한 정보를 확인할 수 있다.
로지컬 볼륨을 지우려면
lvremove
로 볼륨그룹 밑에 있는 로지컬보륨을 삭제한다.
1 # lvremove /dev/vg_usb/dbvol
이제 로지컬볼륨이 준비됐고, 실제 파일 시스템을 생성한다.
파일시스템 생성
mkfs 명령으로 파일 시스템을 생성한다.
1 | # mkfs.ext4 /dev/vg_usb/dbvol |
부팅시 항상 마운트하기 위해서 fstab에 등록해야 하는데, fstab에 아운트 지점을 지정하는 방법은 디바이스 드라이브의 경로 혹은 UUID를 명시하는 것이다. LVM도 다르지 않는데 먼저 fstab에 등록해서 마운트 하기 위해서 lvdisplay
명령으로 LV path 를 확인한다.
1 | # lvdisplay |
/etc/fstab에 LV Path 경로를 추가 한다.
1 | /dev/vg_usb/dbvol /data ext4 defaults 0 1 |
UUID를 사용하려면 위에 찾은 LV Path에 해당하는 UUID를 찾아야 한다.^1 먼저 LV path 경로를 보면
1 | $ ll /dev/vg_usb/dbvol |
같이 링크로 나온다. 이 링크 파일의 UUID를 찾으면 된다.
1 | $ ls -l /dev/disk/by-uuid/ |
찾은 UUID를 fstab에 마운트 지점과 함께 기록한다.
1 | # <file system> <dir> <type> <options> <dump> <pass> |
LVM 관리
- VG에 물리 disk 추가
- VG의 LV 크기 변경
VG에 물리 disk 추가
기존 VG 에 PV 를 추가하면 디스크 용량이 확장된다. 다음은 현재 VG 상태이다. VG size가 118GB 이다.
1 | # vgdisplay |
어떤 물리 디스크 크기가 100GB인 dbf1 을 이 vg에 추가했다. 아래는 VG인 vg_usb 에 새 PV 파티션을 추가하고 있다.
1 | # vgextend vg_usb /dev/sdf1 |
결과를 보면 VG Size가 100GB가 늘어난 304GB로 표시된 것을 확인할 수 있다.
1 | --- Volume group --- |
이 VG의 크기 변경은 다음 같인 lvextend 로 변경하면 된다.
VG의 LV 크기 변경
VG의 크기 내에서 LV 의 크기를 변경할 수 있다. 이때 lvextend 명령을 사용한다.
먼저 LV 의 정보를 확인해서 경로를 파악한다.
1 | # lvdisplay |
다음은 VG인 vg_usb의 LV인 dbvol에서 -100MB를 감소시키는 명령이다.
1 | # lvextend -L -10M /dev/vg_usb/dbbol |
변경된 disk 크기 확인
df
명령은 물리 디스크에 대해서 표시를 한다. 그래서 LV 로 변경된 크기는 정확히 나타나지 않는다. 그래서 보통 lvm 사용시 fdisk 명령으로 확인하면 된다.
다음은 pv 명령으로 생성된 시스템 디바이스 dm-0 가 lvm 의 물리 디스크인다. 이 디스크의 정보를 fdisk 등으로 보면 VG 혹은 LV의 정확히 할당된 크기를 확인할 수 있다.
1 | # fdisk -l /dev/dm-0 |
기존 LVM 을 새 시스템에 장착하기
LVM으로 사용하는 디스크를 다른 시스템에서 사용하려면 다음 단계를 거쳐서 새 Volume group 을 시스템에 등록해야 한다.
- volume group 비활성화
- volume group 추출
- 새 시스템에서 volume group 가져오기
- 새 시스템에서 volume group 활성화
- 새 시스템에서 마운트
1. vgscan으로 확인
1 | # vgscan |
2. vg 추출
1 | # vgexport vg_usb |
이제 새 시스템에서 추출한 volume group을 활성화 한다.
3. PV 파티션 확인
pvscan으로 파티션을 확인한다. 비활성화하고 추출한 파티션을 확인할 수 있다.
1 | # pvscan |
vbimport 로 volume group을 가져온다.
1 | # vgimport vg_usb |
4. VG 활성화
1 | # vgchange -ay vg_usb |
마운트 하기 위해서 볼륨그룹은 장치는 dev 밑에 보륨그룹 이름 /dev/vg_usb 같이 생성되므로 ls 명령으로 확인 가능
1 | # ls /dev/vg_usb/ |
혹은 lvdisplay
명령으로 LV path 를 확인한다.
1 | # lvdisplay |
mount 명령으로 LV path를 마운트 한다.
1 | # mount /dev/vg_usb/dbvol mongodata/ |
LVM error
기존 LVM 디스크를 사용하던 OS에 타 시스템에서 생성한 LVM을 옮겨와 사용하려면 다음 같이 lvmetad 에러가 난다.
1 | > /run/lvm/lvmetad.socket: connect failed: No such file or directory |
lvm2 서비스를 활성화하고 시작해 주면 된다.
1 | sudo systemctl enable lvm2-lvmetad.service |
Unmount - It’s busy
LVM 볼륨을 사용중 마운트를 해제하려고 할 때 다음 같은 경고가 난다.
1 | sudo umount /data |
fuser
명령 lsof
명령으로 해당 디렉토리를 사용중인 파일, 프로세스를 확인할 수 있다.
1 | $ sudo fuser -vm /data |
lsof로 어떤 프로세스가 디렉토리를 사용하는지 출력해 볼 수 있다.
1 | $ sudo lsof +D /data |
xfs 파일시스템
주의: USB 메모리를 사용한 디스크에서 mongodb에 사용하기 위해서 시작했는데, 최신 mongodb의 storage engine인 WiredTiger는 xfs를 요구한다. 다만 Odroid C2 의 Ubuntu, Ambian 에서 xfsprogs 설치후 xfs 파일 시스템 생성시 문제가 있다.
1 | # apt install xfsprogs |
디스크 볼륨을 xfs file system 생성한다.
1 | # mkfs.xfs /dev/usb64_vg/db_xfs |