3. 기본 원리

여러분에게 겁을 주기 위해서가 아니라, LVM은 여러분의 파일 시스템을 위험하게 하지 않도록 하기 위한 용어에서 왔다.

다소, 밑바닥 부터 시작하자.

물리적 미디어

우리가 단순히 하드 디스크나 파티션을 가정하였다 할지라도, 여러분은 어림 잡아서 '물리적' 이라는 말을 이해해야 한다. 예를 들어, /dev/hda, /dev/hda6, /dev/sda. 여러분은 블럭 장치의 연속적인 블럭 수들을 바꿀수 있다.

물리적 볼륨(Volume) (PV)

PV는 단지 여기에 추가된 관리 데이타를 가지는 물리적 미디어이다. -- 일단 여기에 추가하면, LVM은 이것을 소유한 것처럼 인식한다.

물리적 확장(PE)

물리적 확장(Physical Extents)은 메가 바이트 크기를 가지는 큰 블럭같은 것이다. PEs는 할당될 수 있다.

볼륨 그룹(Volume Group)

VG는 물리적 확장의 수(여러 물리적 볼륨이나 하드 드라이브가 기본인)로 이루어 진다. 이것을 여러 하드 드라이브(예를 들어, /dev/hda 와 /dev/sda)로 이루어져 있는 것 같은 VG로 생각할수 있지만, 이것은 이들 하드 드라이브가 제공하는 PE들을 포함한다고 말하는 것이 더 정확하다.

>From this Volume Group, PEs can be assigned to a ...

논리적 볼륨(LV)

우리는 마지막으로 갖는 것이 있다. 논리적 볼륨은 모든 작업의 결과이며 우리는 정보를 여기에 저장한다. 이것은 파티션에 대한 생각과 동일한 것이다.

정규 파티션처럼, 논리적 볼륨은 전형적으로 만들어 진다.

파일 시스템

이 파일 시스템은 여러분이 원하는 모든 것이다.: 표준 ext2, ReiserFS, NWFS, XFS, JFX, NTFS 등등. 리눅스 커널에서, 정규 파티션과 논리적 볼륨사이에는 아무런 차이가 없다.

나는 여러분이 쉽게 이것을 볼수 있도록 하기 위해 ASCII 챠트로 만들었다.

물리적 확장을 포함한, 물리적 볼륨:

  +-----[ Physical Volume ]------+
  | PE | PE | PE | PE | PE | PE  |
  +------------------------------+

6개의 물리적 확장과 2개의 물리적 볼륨(PVs)를 포함한 볼륨 그룹:

  +------[ Volume Group ]-----------------+
  |  +--[PV]--------+  +--[PV]---------+  | 
  |  | PE | PE | PE |  | PE | PE | PE  |  |
  |  +--------------+  +---------------+  |
  +---------------------------------------+ 

우리는 여기에 더 추가 확장을 하였다.:

  +------[ Volume Group ]-----------------+
  |  +--[PV]--------+  +--[PV]---------+  |
  |  | PE | PE | PE |  | PE | PE | PE  |  |
  |  +--+---+---+---+  +-+----+----+---+  |
  |     |   |   | +-----/     |    |      |
  |     |   |   | |           |    |      |
  |   +-+---+---+-+      +----+----+--+   |
  |   |  Logical  |      |  Logical   |   |
  |   |  Volume   |      |   Volume   |   |
  |   |           |      |            |   |
  |   |  /home    |      |    /var    |   |
  |   +-----------+      +------------+   |
  +---------------------------------------+

이것은 두 디스크에 걸친 두 파일 시스템을 우리에게 보여준다. /home 파일 시스템은 4개의 물리적 확장을, /var 파일 시스템은 2개의 물리적 확장을 포함한다.

bert hubert는 더욱 시각적으로 LVM을 보여주기 위해 을 만들었다. screenshot도 있다. ASCII 차트보다 더 좋게 보인다.

3.1. 보여주기& 말하기

이 부분은 이해하기 어렵다. 그래서 논리적 볼륨을 만드는 예제에 주석을 달았다. 이 예제를 콘솔에 복사하지 마라. 왜냐하면 만일 여러분의 컴퓨터가 /dev/hda3와 /dev/hdb2를 사용하지 않는다면, 여러분의 데이타를 파괴하기 때문이다.

의문스럽다면, 위의 ASCIIgram을 봐라.

여러분은 /dev/hda3와 /dev/hdb2 파티션 타입을 0x8e, 즉 'Linux LVM'으로 설정해야 한다. fdisk의 버전이 이 타입을 아직 알지 못해 'Unknown'으로 나오는지 확인해라.:

# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1         2     16033+  83  Linux
/dev/hda2             3       600   4803435   83  Linux
/dev/hda3           601       607     56227+  83  Linux
/dev/hda4           608       614     56227+  83  Linux

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e

Command (m for help): p

Disk /dev/hda: 255 heads, 63 sectors, 623 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1         2     16033+  83  Linux
/dev/hda2             3       600   4803435   83  Linux
/dev/hda3           601       607     56227+  8e  Unknown
/dev/hda4           608       614     56227+  83  Linux

Command (m for help): w

우리는 /dev/hdb2도 했지만, 여기서는 보여주지 않았다. 이것은 LVM이 여러분의 설정을 잃은 것들을 재구성하기 위해 필요하다.

지금, 이것이 필요하지는 않지만, 몇몇 컴퓨터는 여기서 재부팅을 요구하기도 한다. 그래서 만일 다음 예제가 제대로 작동하지 않는다면, 재 부팅해라.

그리고, 우리는 다음처럼 물리적 볼륨을 만든다.:
# pvcreate  /dev/hda3
pvcreate -- physical volume "/dev/hda3" successfully created
# pvcreate  /dev/hdb2
pvcreate -- physical volume "/dev/hdb2" successfully created

그리고, 우리는 이들 두개의 PVs를 'test'라 불리는 볼륨 그룹에 추가한다:
# vgcreate test /dev/hdb2 /dev/hda3
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "test"
vgcreate -- volume group "test" successfully created and activated

그래서, 우리는 빈 볼륨 그룹을 가지게 되며, 이제 비트(bit)를 검사하도록 하자.

# vgdisplay -v test
--- Volume group ---
VG Name               test
VG Access             read/write
VG Status             available/resizable
VG #                  0
MAX LV                256
Cur LV                0
Open LV               0
MAX LV Size           255.99 GB
Max PV                256
Cur PV                2
Act PV                2
VG Size               184 MB
PE Size               4 MB
Total PE              46
Alloc PE / Size       0 / 0
Free  PE / Size       46 / 184 MB

--- No logical volumes defined in test ---


--- Physical volumes ---
PV Name (#)           /dev/hda3 (2)
PV Status             available / allocatable
Total PE / Free PE    13 / 13

PV Name (#)           /dev/hdb2 (1)
PV Status             available / allocatable
Total PE / Free PE    33 / 33
여기에 있는 많은 데이타들 - 이 데이타중 대부분은 지금 이해해야 한다. 우리는 여기에 정의된 어떠한 논리적 볼륨도 없어서 이걸 치료해야 한다. 우리는 볼륨 그룹 'test'에 'HOWTO'라 불리는 50 메가 바이트 볼륨을 만들도록 한다.:

# lvcreate -L 50M -n HOWTO test 
lvcreate -- rounding up size to physical extent boundary "52 MB"
lvcreate -- doing automatic backup of "test"
lvcreate -- logical volume "/dev/test/HOWTO" successfully created

자, 여기서 파일 시스템을 만들도록 하자.

# mke2fs /dev/test/HOWTO 
mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
13328 inodes, 53248 blocks
2662 blocks (5.00%) reserved for the super user
First data block=1
7 block groups
8192 blocks per group, 8192 fragments per group
1904 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961

Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
# mount /dev/test/HOWTO /mnt
# ls /mnt
lost+found

다 했다. 이제 볼륨 그룹을 다시 보도록 해라. 왜냐하면, 지금쯤 비트(bit)가 채워져야 하기 때문이다.

# vgdisplay test -v
--- Volume group ---
VG Name               test
VG Access             read/write
VG Status             available/resizable
VG #                  0
MAX LV                256
Cur LV                1
Open LV               1
MAX LV Size           255.99 GB
Max PV                256
Cur PV                2
Act PV                2
VG Size               184 MB
PE Size               4 MB
Total PE              46
Alloc PE / Size       13 / 52 MB
Free  PE / Size       33 / 132 MB

--- Logical volume ---
LV Name               /dev/test/HOWTO
VG Name               test
LV Write Access       read/write
LV Status             available
LV #                  1
# open                1
LV Size               52 MB
Current LE            13
Allocated LE          13
Allocation            next free
Read ahead sectors    120
Block device          58:0


--- Physical volumes ---
PV Name (#)           /dev/hda3 (2)
PV Status             available / allocatable
Total PE / Free PE    13 / 13

PV Name (#)           /dev/hdb2 (1)
PV Status             available / allocatable
Total PE / Free PE    33 / 20

자, 됐다. /dev/hda3는 완전히 사용되지는 않았지만, /dev/hdb2는 13개의 물리적 확장을 사용하고 있다.

3.2. 활성화(Active)와 비 활성화(Inactive): 커널 영역과 유저 영역

모든 운영체제처럼, Linux도 두 부분으로 나누어져 있다.:커널 영역과 유저 영역. 유저 영역은 가끔 userland라 불리며, 이것은 'Userland'를 위한 좋은 이름이기도 하다.

논리적 볼륨 관리를 포함하는 복구, 생성과 수정과 같은 것들은 유저 영역에서 행해 지며, 그리고 커널과 통신한다. 일단 볼륨 그룹과 논리적인 볼륨이 커널에 보고되면, '활성화'라 불린다. 어떤 변화들은 엔터티(entity)가 활성화될때만 이루어지며, 어떤 것들은 비 활성화되었을때 이루어진다.