티스토리 뷰

개발용으로 테스트 서버를 이용하다보면, 실서버를 이용하기도 하지만 이는 대부분 많지 않고 

보통은 가상머신을 통해 서버를 구현해서 많이 사용하게 되는 것 같습니다.


이러다보면, 처음에는 넉넉하다고 생각했던 서버 용량이 부족해지는 경우도 생기게 됩니다.


가상머신 용량을 늘리는 방법은 존재합니다! (또 이미 많은 분들께서 정리해주셨습니다)


윈도우의 경우 그래도 가상머신 툴에서 제공하는 방법을 쓰면 금방 늘릴 수 있는데

리눅스는 윈도우보다는... 복잡하다보니

급할땐 그냥 밀어버리고 새로 구축하기도 하고 아니면 구글링을 통해 방법을 찾아서 그때 그때 구축하는 방법을 택했는데


제 경험상.... 하나의 사이트를 보고 구축했던 적은 없던 것 같네요


그래서 그때 그때마다 추가추가 해뒀던 방법들을 제 나름대로 한 번에 정리한 내용을 여기에 올려놓으려고 합니다.


----------------------------------------


1. 시작하기전에


 - 본 방법은 VitualBox, VMWare 기반에서의 가상머신에 대한 리눅스 저장소 용량 증설 방법에 대해 다루고 있습니다.


1.1 제약사항


 - 해당 가이드는 Linux  LVM 파일 시스템을 이용한 논리볼륨에서만 증설이 가능하며, 물리볼륨으로 구성된 하드에 대한 증설은 불가능합니다.

  → 하지만 편법으로 일부 디렉토리(ex. /DATA, /home ...등 특정 디렉토리에 용량이 몰려 있는 경우)에 한해 마운트 방식으로 증설시키는 방법은 있습니다.

    (해당 방법은 아래의 별도의 메뉴로 가이드를 다룰 예정입니다)

 - 또한, 부팅 디스크로 잡혀있는 파일시스템에 대한 증설도 불가능합니다.

  → 작업자체는 가능하나, 재실행 후 부트로더 손상으로 인해 부팅이 안될 가능성이 다분

 - 본 방법은 CentOS 환경에서 작성되었습니다. (타 OS의 경우 조금 다를 수 있으니 이 부분 양해해서 보셨으면 합니다)


1.2 작업순서


 - 아래와 같은 순서로 진행할 예정입니다.

  ① 가상머신을 통한 가상디스크 용량증설

  ② 리눅스 파일 시스템 적용


2. 가상머신을 통한 가상 디스크 용량 증설방법


2.1 VirtualBox 이용시


 - VirtualBox 프로그램은 가상 디스크 용량을 늘리기 위한 기능을 프로그램 자체 UI상에선 제공하지 않습니다. 대신 VIrtualBox에서 제공되는 VBoxManage 모듈을 이용하면 이런 일련의 작업을 할 수가 있습니다.

   이 모듈의 경우 기본으로 생성되는 .vmdk 파일은 지원하지 않고 .vdi 파일만 지원됩니다.

    (또한, 용량을 늘리는 것은 가능하나 용량을 줄이는 것은 불가능합니다.

    늘리는 것은 실제 VM Host의 저장소 크기와 관계없이 리사이즈가 가능하지만 실제 저장소크기를 오버했을 경우에는 가상머신이 실행되지 않아 이미지가 뻑(?)나는 현상을 보실 수 있으니 각별한 주의가 필요합니다)

 - 본 가이드 문서에서 사용한 버전은 VirtualBox 4.1.6 입니다.


2.1.1 .vmdk 파일을 .vdi 파일로 변경하는 방법


 - 윈도우+R 키를 사용하여 cmd를 입력한 후 명령프롬프트 창을 띄웁니다.

 - 명령창에 아래의 명령어를 입력합니다. ( 작업 실행전, VirtualBox 및 실행된 가상머신은 꼭 종료 할 것! )

명령어 : [~경로/VBoxManage.exe] clonehd [~경로/가상.vmdk] [~경로/가상.vdi] --format vdi

ex)

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd "C:\Users\Administrator\VirtualBox VMs\VM.TEST_1\VM.test-disk1.vmdk" "C:\Users\Administrator\VirtualBox VMs\VM.TEST_1\VM.test-disk1.vdi" --format vdi


 - 컨버팅 작업 완료 후 VirtualBox 실행 후 변경한 가상머신의 설정 클릭

 - 설정 -> 저장소 -> SATA 컨트롤러 아래

   매핑된 가상머신 저장소 클릭하여 기존저장소 내용을 확인 한 후 [삭제] 버튼을 클릭합니다.


 - SATA 컨트롤러 클릭 -> 우측 [추가]버튼 클릭(하드디스크 추가하기) -> 기존 디스크 선택하기를 클릭하여 좀전에 컨버팅한 .vdi 파일을 찾아 매핑해줍니다.





2.1.2 .vdi 가상 디스크 이미지 용량 증설방법

 

 - 기존 용량을 먼저 확인합니다.

 


 - 윈도우+R 키를 사용하여 cmd를 입력한 후 명령프롬프트 창을 띄웁니다.

 - 명령창에 아래의 명령어를 입력합니다. ( 위 작업과 동일하게 작업 실행전, VirtualBox 및 가상머신은 꼭 종료 )

명령어 : [~경로/VBoxManage.exe] modifyhd [~경로/가상.vdi] --resize [증설하고 싶은 최대 용량(MB단위)]

ex) 100GB (102400 MB) 로 증설

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "C:\Users\Administrator\VirtualBox VMs\VM.TEST_1\VM.test-disk1.vdi" --
resize 102400


- 용량 증설 작업 완료 후 VirtualBox를 실행시켜, 용량이 잘 증설되었는지를 저장소 정보를 통해 확인합니다.


 - 가상머신을 실행합니다.


2.2 VMWare 이용 시

 - VMWare는 자체 프로그램(VM Workstation) 상에서 UI를 통해 가상디스크 증설 메뉴를 제공합니다.

 - 본 가이드 문서 작성시 사용된 버전은 VMWare Workstation 11 입니다.


2.2.1 콘솔을 이용한 가상 디스크 이미지 증설방법

 - 먼저 VM Workstation 을 실행합니다.

 - 용량을 증설하고자 하는 가상머신을 클릭한 후 오른쪽 마우스 버튼을 클릭해 [Setting]을 클릭합니다.


 - "Virtual Machine Settings" 팝업창이 나타나면, 왼쪽 트리에서 "Hard Disk"를 클릭 후 오른쪽에서 [Expand...] 버튼을 클릭합니다.


 - "Expand Disk Capacity" 팝업창이 나타나면, "Maximum disk size (GB):" 항목의 [텍스트 박스[에 수정하고자 하는 용량을 기입합니다.

   그리고 [Expand] 버튼을 클릭합니다.


 - 증설작업이 완료되고 아래의 메시지가 나타나면 [OK]를 클릭합니다.


 - 설정 메뉴를 닫고 가상머신을 실행합니다.


3. 리눅스 파일 시스템 적용방법


3.1 논리볼륨일 경우


 - 다음 작업부터는 리눅스 터미널 환경에서 작업합니다. (본 작업은 root 계정으로 작업)

 - 아래의 명령을 통해 파일 시스템 정보를 먼저 확인합니다.

df -h

   리눅스 로그인 후 위의 명령을 통하여 실제 저장소 용량을 확인해보면 아직 용량이 늘어나지 않은 상태임을 알 수 있습니다.

 - 아래의 명령을 입력하여, 사용중인 저장소를 확인합니다.

fdisk -l

   이때 증설한 용량 만큼, Disk /dev/sda: 용량이 업데이트 되어 있으면 다음 작업으로 진행합니다.

ex)

Disk /dev/sda: 107.4 GB, 107374182400 bytes

   만약, 용량이 적용되지 않고 이전 용량과 동일하다면 어떤 다른 요인에 의해 적용이 되지 않은 것이기 때문에 다음작업을 진행할 수가 없습니다.(원인 파악 필요)

 - 변경하고자 하는 마운트된 디바이스 이름을 fdisk 명령 뒤에 입력합니다.

fdisk /dev/sda

Command (m for help): p #(/dev/sda 내 변경하려고 하는 파티션 정보를 확인한다.)

Command (m for help): d #(파티션 삭제)

Partition number (1-4): 2 #(기존 파티션 중 부팅디스크가 아닌 두번째 파티션을 삭제한다. 부팅 디스크 삭제 시, 구동이 안됨으로 각별주의)

Command (m for help): n #(파티션을 새로 만든다)

Command action
  e extended
  p primary partition (1-4)
p #(파티션을 설정한다)

Partition number (1-4): 2 #(2번으로 다시 만든다)

First cylinder (64-13054, default 64): #(기본값으로 생성 엔터)
Using default value 64

Last cylinder, +cylinders or +size{K,M,G} (64-13054, default 13054): #(기본값으로 생성 엔터)
Using default value 13054

Command (m for help): w #(작업내용을 저장한다)

# 이때, 시스템이 Busy 해서 적용하려면 리부트가 필요하다는 메시지가 나오면 정상적으로 적용된 것임(스크린샷에 없음)

reboot #(시스템 재시작)


- 시스템 재시작 이후 실제 사용 물리디스크에 해당 저장소용량을 업데이트 작업을 진행합니다.

df -h #(마운트된 파일시스템의 용량을 확인한다)
fdisk -l #(디스크용량을 확인하여 Block이 증가됨을 확인한다)
pvresize /dev/sda2 #(물리볼륨을 리사이징 한다)
pvscan #(반영여부를 확인한다)
lvextend -l +100%FREE /dev/mapper/VolGroup-lv_root #(증설되어 사용가능해진 저장소용량을 논리볼륨에 매핑한다 이때, 사용가능한 모든 용량을 매핑한다(100%FREE))
resize2fs /dev/mapper/VolGroup-lv_root #(수정내용을 반영한다)
df -h #(실제로 파일시스템에 반영된것을 확인한다)



3.2 물리볼륨일 경우 (편법)


 - 물리볼륨으로 생성된 파일 시스템의 경우, 저장소에 대한 증설은 불가능함을 앞서 설명드린바 있습니다.

   (컴퓨터 하드디스크와 같은 개념으로 초기에 용량이 픽스된 상태이기 때문에 자체 용량 증설이 안되는것과 동일한 경우라고 생각하시면 될 거 같습니다)

   하지만 편법으로 가상 디스크 이미지의 용량을 늘린 뒤 새로 늘어난 공간을 "신규파티션"으로 만들어 파일 시스템에 "마운트"시키면 특정 디렉토리에 한해 용량을 증설시킬 수 있습니다. (외장하드와 같은 개념)


3.2.1 준비사항


 - 가상 이미지 용량증설 방법은 위에서 설명드린 것과 동일한 방법으로 진행됩니다.

 - 또한, 아래의 모든 작업과정은 root 계정을 통해서만 진행가능합니다.


3.2.2 신규 파티션 생성


 - 파일시스템 확인

fdisk -l

 - Primary 파티션은 리눅스 시스템에서 최대 4개까지 지원합니다. 때문에, 4개를 초과하는 파티션을 생성 시에는 확장기능(extended)을 사용해야 합니다 (본 내용은 해당 가이드에선 다루지 않고 있습니다)


 - 파티션 생성 작업

fdisk /dev/sda

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): m #(메뉴보기)
Command action
  a toggle a bootable flag
  b edit bsd disklabel
  c toggle the dos compatibility flag
  d delete a partition
  g create a new empty GPT partition table
  G create an IRIX (SGI) partition table
  l list known partition types
  m print this menu
  n add a new partition
  o create a new empty DOS partition table
  p print the partition table
  q quit without saving changes
  s create a new empty Sun disklabel
  t change a partition's system id
  u change display/entry units
  v verify the partition table
  w write table to disk and exit
  x extra functionality (experts only)

Command (m for help): n #(신규생성)
Partition type:
  p primary (3 primary, 0 extended, 1 free)
  e extended
Select (default e): p #(파티션생성)
Selected partition 4
First sector (62914560-104857599, default 62914560): #(엔터, 기본값)
Using default value 62914560
Last sector, +sectors or +size{K,M,G} (62914560-104857599, default 104857599): #(엔터, 기본값)
Using default value 104857599
Partition 4 of type Linux and of size 20 GiB is set

Command (m for help): w #(현재까지 작업한 내용 저장)
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

 - 재부팅

reboot


3.2.3 파일시스템 포맷

 - 재부팅 이후, 정상적으로 파일시스템에 등록되었는지를 확인합니다.

fdisk -l



 - 해당 파일시스템을 사용하기전 포맷을 진행합니다. (타입 : ext3)

mkfs -t ext3 /dev/sda4

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
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 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

 - 정상적으로 해당 작업이 수행되었는지 확인합니다.

file -s /dev/sda4



3.2.4 마운트

 - 용량을 늘리고자 하는 디렉토리를 확인

  → 만약 기존에 사용하던 디렉토리이고, 해당 디렉토리를 통해 실행되는 프로세스가 있다면 모두 종료합니다.

  → 또한 기존 디렉토리의 이름을 잠시 변경합니다

ex)

mv /home /home.bak

  → 디렉토리를 새로 생성합니다.

mkdir /home

 - 새로 생성한 파티션을 해당 디렉토리에 마운트합니다.

mount /dev/sda4/ /home

 - 마운트가 정상적으로 되었는지 확인합니다.

df -h


 - 기존에 사용하던 디렉토리였다면, 위에서 잠시 이름을 변경하고 안에 들어 있는 모든 파일을 새로 생성한 디렉토리로 이동합니다.


3.2.5 재부팅 시 자동 마운트 설정

 - 본 방식을 통해, 저장소를 디렉토리에 마운트 할 경우 재부팅을 하게 되면 자동으로 마운트 되지 않는 문제가 있습니다.

   해당 문제를 해결하기 위해서는 fstab에 해당 내용을 추가해줘야 할 필요가 있습니다.

 - 파일시스템의 UUID를 확인합니다.

file -s /dev/sda4


 - fstab을 수정합니다.

vi /etc/fstab

ex)

 UUID = 추가할 파티션의 UUID <마운트할위치> ext4 defaults 1 2
 UUID=944fb9f9-99cd-4ff8-b043-************ /home ext3 defaults 1 2


 - 파일을 수정(:wq)한 이후 재부팅합니다

 - 재부팅한 이후 확인해보면 아래와 같이 정상적으로 마운트되어 있음을 알 수 있습니다.

df -h


4. 참고사이트


 - virtualbox 가상머신 파일 용량 늘리기

 - virtualbox 파일 형식 변경하기

 - [CentOS] VMWare에서 LVM을 이용하여 디스크 용량 늘이기

 - VirtualBox 디스크 용량 늘리기(LINUX)

댓글