LVM (Logical Volume Manager)

Share

Bugünkü yazımda LVM (Logical Volume Manager) – Mantıksal Hacim Yöneticisi konusu üzerinde durmayı planlamaktayım. LVM hakkında özet bilgi paylaştıktan sonra uygulamalı olarak LVM konularını detaylandırmayı düşünüyorum.

LVM (Logical Volume Manager) genel olarak tüm Linux ve bazı Unix dağıtımları ile gelen Linux çekirdeği için bir Mantıksal Hacim Yöneticisi’dir.

LVM kullanarak depolama alanınızı soyut hale getirebilir, düzenlemesi daha kolay olan “sanal disk bölümleri” oluşturabilirsiniz.

LVM birden fazla diski tek bir disk bölümü olarak kullanmamıza olanak sağlayan ve disk yönetimi işlemlerinde büyük fayda sağlayan bir yönetim yapısıdır.

LVM dinamik olarak ilk oluşturulurken ve daha sonra ihtiyaç doğrultusunda disk yapısında değişiklikliklere imkan sağlamaktadır. LVM, CLI (komut satırı) ve GUI (grafik arayüz) olarak kullanılabilmektedir.

Özellikler;

– LVM’in en önemli özelliği online (on-the-fly) disk üzerinde işlem yapmamıza olanak sağlamaktadır.
– Bir birinden bağımsız kaynaklar (diskler den tek bir Volume oluşturabilmektedir.
LVM Storage Yapısı;

Physical Volumes: (i.e. /dev/sdb1, /dev/sdc1, /dev/cciss/c0d0 vb.)
Fiziksel Disk, Partation gibi block devicelerin tanımlandığı katmandır.
Dikkat edilmesi gereken konu, oluşturulan partation (bölme) nin Linux LVM (8e) olarak tanımlanmış olması gerekmektedir!
Partation yapısını fdisk veya parted disk yönetim araçları ile ilerleyen bolümde nasıl yapılacağı anlatılacaktır.

Logical Volume:
Filesystem (Dosya işletim sistemleri) nin yapılandırıldığı katman olarak adlandırılabilir. Genel olarak Linux ext3, ext4 filesystem kullanmakta, Uygulamanız için gerekli filesystem buraya mount (bağlanmak) yapılmaktadır.

Volume Groups:
Bir veya birden fazla fiziksel volume’un eklendiği katman olarak tanımlanabilir.
LVM storage oluşturmaya başlamadan önce, mevcut disk yapısını kontrol etmemizde fayda olabilir;

Phisical Volume(s): pvs veya pvstatus
Volume Group(s): vgs veya vgstatus
Logical Volume(s): lvs veya lvstatus

[root@earth ~]# pvs
[root@earth ~]# vgs No volume groups found
[root@earth ~]# lvs No volume groups found

Komutları ile mevcut yapınızda LVM disk yapısını kontrol edebiliriz.

Daha once de belirtmiş olduğum gibi LVM disk yapısını farklı yollardan oluşturmamız mümkun, yeni baslayanlar için CLI  zor olabileceğini düşündüğümden onlar genelde default kurulu gelmeyen; system-config-lvm toolunu kullanabilirler.

system-config-lvm’i kurmak için yum kullanılabilir;

[root@earth]# yum repolist
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id repo name status
RHEL6 Redhat Linux 6.5 x86_64 Local DVD - ISO 3,690
repolist: 3,690

[root@earth data]# yum search lvm
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
=============================== N/S Matched: lvm ===============================
lvm2-libs.i686 : Shared libraries for lvm2
lvm2-libs.x86_64 : Shared libraries for lvm2
mesa-private-llvm.i686 : llvm engine for Mesa
mesa-private-llvm.x86_64 : llvm engine for Mesa
lvm2.x86_64 : Userland logical volume management tools
system-config-lvm.noarch : A utility for graphically configuring Logical Volumes

Name and summary matches only, use “search all” for everything.

[root@earth]# yum install -y system-config-lvm
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package system-config-lvm.noarch 0:1.1.12-16.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
system-config-lvm noarch 1.1.12-16.el6 RHEL6 469 k

Transaction Summary
================================================================================
Install 1 Package(s)

Total download size: 469 k
Installed size: 3.1 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : system-config-lvm-1.1.12-16.el6.noarch 1/1
Verifying : system-config-lvm-1.1.12-16.el6.noarch 1/1

Installed:
system-config-lvm.noarch 0:1.1.12-16.el6

Complete!

Anlatım CLI üzerinde planlandiği için GUI yöentimine değinilmeyecektir.

Anlatımı aşağıdaki Use Case dikkate alınarak LVM konusu incelenecektir;

  •  Sunucu çalışır durumda iken 2 x 36GB disk eklenecek.
  •  Yeni eklenen disklerin her ikisinde 10GB lik partation oluşturulup.
  • LVM üzerinden 20GB lik Logical (Yapısal) Volume oluşturup ProdData olarak mount edilecektir.
  • File system olarak ext3 yapılması planlanmaktadır. 

NOT: Normal şartlarda Linux Isletim sistemine Disk ilavesi yapıldığında Linux kernel diski gormez gorebilmesi için restart gerekmektedir.

[root@earth ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00066145

Device Boot Start End Blocks Id System
/dev/sda1 * 1 39 307200 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 39 2350 18566144 83 Linux
/dev/sda3 2350 2611 2097152 82 Linux swap / Solaris
[root@earth ~]#

NOT: Sunucu uzerinde kritik uygulamanın calıstıgını duşunecek olursak sunucuyu restart edilmeden disk eklemek için aşaıdakı yontem kullanilabilir;

[root@earth ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@earth ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@earth ~]# echo "- - -" > /sys/class/scsi_host/host2/scan

[root@earth ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00066145

Device Boot Start End Blocks Id System
/dev/sda1 * 1 39 307200 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 39 2350 18566144 83 Linux
/dev/sda3 2350 2611 2097152 82 Linux swap / Solaris

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

[root@earth ~]#

Online disklerimiz kernel’a tanıtıktan sonra ilk once Use Case de belirtmis oldugumuz partation olusturma işlemini yapmamız gerekmektedir. Olusturulacak partationların tipinin Linux LVM (8e) olarak tanımlamayı utummammız gerekiyor. Aksi taktirde LVM disk yapılandılması yapamayız.

Disk yonetimi için daha once belirtmis oldugum fdisk veya parted aracları kullanılabilir.

fdisk cıktısında goruldugu gibi yeni eklenen disklerimiz;

/dev/sdb ve /dev/sdc

[root@earth ~]# fdisk -cu /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc305e531.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 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 identifier: 0xc305e531

Device Boot Start End Blocks Id System

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-83886079, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +10GB

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): l

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 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 identifier: 0xc305e531

Device Boot Start End Blocks Id System
/dev/sdb1 2048 19533297 9765625 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@earth ~]#

Olusturmus oldugumuz 10GB lik Linux LVM partation linki /dev/sdb1 olarak olusturuldu, aynı adımları tekrarlayarak /dev/sdc1 partation olusturmak için;

[root@earth ~]# fdisk -cu /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x18e0d666.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-83886079, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +10G

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdc: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders, total 83886080 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 identifier: 0x18e0d666

Device Boot Start End Blocks Id System
/dev/sdc1 2048 20973567 10485760 8e Linux LVM

Command (m for help):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@earth ~]#

NOT: parted tool kullanılarak yapmak isteyenler için;

# parted /dev/sdb
# mkpart primary start end
# set partition_num lvm on
# reboot

komutları kullanılabilir.

LVM disk yapıldırmamız için gerekli partationlar tamamlandıgına gore artık LVM disk yapılandırmasına gecebiliriz;

1 – Usecase de belirtilen 10GB lik iki partation’ı fiziksel volume (Phyisical Volume) olarak olusturmak için;

[root@earth ~]# pvcreate /dev/sdb1 /dev/sdc1
dev_is_mpath: failed to get device for 8:17
Physical volume "/dev/sdb1" successfully created
dev_is_mpath: failed to get device for 8:33
Physical volume "/dev/sdc1" successfully created

2 – Olusturulan fiziksel volumları vgProdData Volume Group ile ilişkilendirmek için;

[root@earth ~]# vgcreate vgProdData /dev/sdb1 /dev/sdc1
Volume group "vgProdData" successfully created
[root@earth ~]#

NOT: Default Physical Extend size 4MiB olarak gelmektedir. Farklı olarak set etmek isterseniz -s parametresi ile baska değer set edilebilir.

3 – LVM disk yapısında İşletim sisteminin anlayabilecgı ve erişebilecgi en ust katman Logical (sanal) volume olusturmak için usecase de belirtilen 20GB lik kapasite aşaıdakı gibi tamamlayabiliriz;

[root@earth ~]# lvcreate -L 19G -n lvProdData vgProdData
Logical volume "lvProdData" created
[root@earth ~]#

NOT: Burada parametre olarak -L kapasite olarak islem yapacaımızı belirtmektedir, eğer işlemi tamamlamak için PE physical extend kullanarak yapmak isterseniz, -l parametresi kullanilabilir.

[root@earth ~]# vgdisplay vgProdData
--- Volume group ---
VG Name vgProdData
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.30 GiB
PE Size 4.00 MiB
Total PE 4942
Alloc PE / Size 0 / 0
Free PE / Size 4942 / 19.30 GiB
VG UUID FWiGe5-527H-DQAx-hfvp-MLNF-DcF3-YTp8vZ

[root@earth ~]#

yukarıda görüldüğü gibi oluşturmuş oldugumuz 20GB lik disk kapasitesi aslında 19.30GB veya 4942 PE den olusmakta. Tum PE leri kullanmak istersek -l 4942 yazarak da işlemi tamamlayabilirdik.

4 – Yeni olusturulan Logical (Sanal) volume’un formatlanması işlemi geldi, UseCase’imize gore EXT3 olarak planladık;

[root@earth ~]# mkfs.ext3 /dev/vgProdData/lvProdData
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1245184 inodes, 4980736 blocks
249036 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
152 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

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

This filesystem will be automatically checked every 27 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@earth ~]#

NOT: Baska bir Filesystem olarak biçimlendirmek isterseniz bu aşamada mkfs.<filesystemtype> komutu kullanabilrsiniz.

5 – Son işlem olan Format (Bicimlenen) volume ‘in mount işlemi için;

[root@earth ~]# mkdir /ProdData
[root@earth ~]# mount -t ext3 /dev/vgProdData/lvProdData /ProdData/
[root@earth ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 18274628 6359132 10987192 37% /
tmpfs 957244 72 957172 1% /dev/shm
/dev/sda1 297485 39143 242982 14% /boot
/ISO/rhel-server-6.5-x86_64-dvd.iso 3762278 3762278 0 100% /RHEL6-Repo
/dev/mapper/vgProdData-lvProdData 19610300 176196 18437960 1% /ProdData
[root@earth ~]#

6 – Mount’un kalıcı olması için ‘/etc/fstab’ dosyası güncellenmesi gerekmektedir.

NOT:  /etc/fstab dosyası Linux için çok önemli olduğundan, Güncelleme yapılırken dikkatli çalışılması gerekmektedir. Sistemi restart etmeden CLI ‘da mount ‘a komutu ile kontrol edilmesi gerekmektedir.

7 – Guncel /etc/fstab dosyası aşağıdaki gibi olmalıdır;

[root@earth ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Oct 23 10:29:18 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7ca48487-3aaa-48d6-9f58-30e643d8665a / ext4 defaults 1 1
UUID=5bed258d-c1f9-4dd9-9fd9-63565779f057 /boot ext4 defaults 1 2
UUID=c1641527-99d8-4116-9311-1a174bda2710 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/ISO/rhel-server-6.5-x86_64-dvd.iso /RHEL6-Repo iso9660 loop,ro 0 0
/dev/vgProdData/lvProdData /ProdData ext3 defaults 0 0
[root@earth ~]#

Mount işleminin düzgün olduğunu kontrol etmek için;

[root@earth ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 6.1G 11G 37% /
tmpfs 935M 72K 935M 1% /dev/shm
/dev/sda1 291M 39M 238M 14% /boot
/ISO/rhel-server-6.5-x86_64-dvd.iso 3.6G 3.6G 0 100% /RHEL6-Repo
/dev/mapper/vgProdData-lvProdData 19G 173M 18G 1% /ProdData
[root@earth ~]#

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.