Kadir Hanoğlu

LVM Disk Genişletme

CentOS kurulu bir sistemde disk boyutunu değiştirebilmek için lvm ( Logical Volume Manager ) kullanılmaktadır. Bu özellik ile diskler üzerinde bölüm oluşturabilir, bölebilir ve birleştirebilirsiniz.

Mevcut sisteme bağlı diskleri ve partition kısımlarını görmek için aşağıdaki komutu yazarak disk genişletme çalışmamız için ilk adımı atıyoruz.

fdisk -l



Kontrolü yaptıktan sonra aşağıdaki çıktı geliyor. Çıktıda sda1 ve sda2 olmak üzere iki adet partition görünüyor. Biz burada sda1 partition' a map edilmiş olan lv-root kısmı için genişletme yapacağız. Ancak kullanılabilir ekstra bir alan görünmüyor. sda1 kısmında görünen alanın lv-root için tamamen kullanıldığını görüyoruz. Bu sebepten öncelikle sanallaştırma için kullandığımız uygulamadan ihtiyaç olan alanı sanal sunucumuz için atıyoruz.

[root@test ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 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: 0x000e22b5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        3917    30944256   8e  Linux LVM

Disk /dev/mapper/vg_test-lv_root: 28.5 GB, 28462546944 bytes
255 heads, 63 sectors/track, 3460 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/mapper/vg_test-lv_swap: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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@test ~]#



Alan atamasını yaptıktan sonra tekrar kontrol ettiğimizde çıktımız aşağıdaki gibi olacaktır. Alan tanımlamasını yaptıktan sonra disk boyutunu görebilmek için aşağıdaki komutu kullanabilirsiniz ancak komut sonrası yine aynı sonuçlar çıkarsa sunucuyu reboot etmenizi öneririm.

Disk boyutunu görebilmek için aşağıdaki komutu kullanarak diskleri tekrar tarata bilirsiniz.

echo 1 > /sys/block/sda/device/rescan


[root@test ~]# fdisk -l

Disk /dev/sda: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 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: 0x000e22b5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        3917    30944256   8e  Linux LVM

Disk /dev/mapper/vg_test-lv_root: 28.5 GB, 28462546944 bytes
255 heads, 63 sectors/track, 3460 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/mapper/vg_test-lv_swap: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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@test ~]#


Kontrol ettikten sonra sda boyutumuz 64.4 GB olarak yükselmiş. Burada sda1 partition için kullanılan alan dışında sda kısmında 30 gb civarında bir alan boş görünüyor. Tanımladığımız ve kullanılmayan bu alanı yeni bir partition oluşturarak kullanacağız. Daha sonrasında bu partition kısmını sda1 e dahil edeceğiz.

Öncelikle kullanacağımız alan için bir partition oluşturalım. Bu partition oluşumu için sda olarak görünen kısımdaki kullanılmayan yani boş olan alanı kullanacağız.

Başlayalım ;)

fdisk /dev/sda


Komut sonrası aşağıdaki gibi bir çıktı gelecektir.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):


Burada n tuşuna basıp enter diyoruz. Yani yeni partition oluşturmak istediğimizi belirtiyoruz.

Daha sonrasında sırasıyla aşağıdaki komutları uyguluyoruz.

n ( Yeni Partition )
p ( Primary Parttiion )
3 ( sda1 ve sda2 sistem tarafından ilk kurulumda oluşturulduğundan biz 1-4 arasında 3 numarasını kullandık )
enter ( Kullanılmayan tüm alanı kullanacağımız için burada bir değer girmiyoruz enter diyerek iki adımı geçiyoruz. )
enter
t ( Oluşturulan partition formatını değiştireceğimizi belirtiyoruz )
3 ( Formatını değiştireceğimiz yani oluşturduğumuz partition numarasını giriyoruz )
8e ( 8e hex kodu ile formatın lvm olacağını belirtiyoruz )
p ( Partition oluştu ancak yinede görmek isterseniz girebilirsiniz. )
w ( Oluşturulan partition kısmını yazarak işlemi bitiriyoruz )

Tüm komutların ve çıktılarının görüntüsü aşağıdaki gibi olacaktır.
[root@test ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (3917-7832, default 3917):
Using default value 3917
Last cylinder, +cylinders or +size{K,M,G} (3917-7832, default 7832):
Using default value 7832

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

Command (m for help): p

Disk /dev/sda: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors/track, 7832 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: 0x000e22b5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        3917    30944256   8e  Linux LVM
/dev/sda3            3917        7832    31453260   8e  Linux LVM

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.
[root@test ~]#


Artık üçüncü partition hazır. Kullanmak için sunucuyu reboot edebilirsiniz ya da aşağıdaki komutu kullanarak oluşturduğunuz partition' ı kullanılabilir bir hale getirebilirsiniz.
partx -v -a /dev/sda


Komutu kullandıktan sonra çıktı aşağıdaki gibi olacaktır.
[root@test ~]# partx -v -a /dev/sda
device /dev/sda: start 0 size 125829120
gpt: 0 slices
dos: 4 slices
# 1:      2048-  1026047 (  1024000 sectors,    524 MB)
# 2:   1026048- 62914559 ( 61888512 sectors,  31686 MB)
# 3:  62914560-125821079 ( 62906520 sectors,  32208 MB)
# 4:         0-       -1 (        0 sectors,      0 MB)
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
added partition 3
[root@test ~]#


Oluşturulan ve kullanılabilir olarak tanımladığımız sda3 partition'ı artık physical volume olarak oluşturmaya sıra geldi.
pvcreate /dev/sda3


Komut sonrası çıktı aşağıdaki gibi olmalıdır. Çıktıda hata ile karşılaşabilirsiniz ancak hata durumuna göre önemi olmayacaktır. Genellikle hata durumu
[root@test ~]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created
[root@test ~]#


sda3 partition'ı physical volume olarak oluşturduk. Mevcut olan sda1 diski ile birlikte kullanabilmek için sda3 partition'ı volume group 'a eklememiz gerekiyor. Aşağıdaki komutla volume group' a ekleyerek merge işlemine geçeceğiz.

Burada volume group adını öğrenmek için aşağıdaki komutu kullanabilirsiniz.
vgdisplay


Çıktısı aşağıdaki gibi olacaktır.
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_test
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               29.51 GiB
  PE Size               4.00 MiB
  Total PE              7554
  Alloc PE / Size       7554 / 29.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               Y7Mwd9-b9M4-Lnc3-d6WT-3M83-q6Nw-uibVVO
[root@test ~]#



Volume group adını öğrendiğimize göre artık eklemeye geçebiliriz.
vgextend vg_test /dev/sda3


Komut sonrası aşağıdaki gibi bir çıktı gelecektir.
[root@test ~]# vgextend vg_test /dev/sda3
  Volume group "vg_test" successfully extended
[root@test ~]#


Bir önceki vgdisplay komutunun çıktısında "Free PE / Size 0 / 0" kısmına dikkat ettiyseniz, gruba sda3 dahil ettikten sonra tekrar vgdisplay ile kontrol ettiğimizde bu kısma kullanılabilir alanın dahil olduğunu göreceğiz.
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_test
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               59.50 GiB
  PE Size               4.00 MiB
  Total PE              15232
  Alloc PE / Size       7554 / 29.51 GiB
  Free  PE / Size       7678 / 29.99 GiB
  VG UUID               Y7Mwd9-b9M4-Lnc3-d6WT-3M83-q6Nw-uibVVO

[root@test ~]#



Evet çıktımızda da gördüğümüz üzere "Free PE / Size 7678 / 29.99 GiB" kısmına kullanacağımız partition eklenmiş.

Artık lvextend ile görünen bu alanı vg-test grubuna dahil yani map edeceğiz. Ancak öncesinde disklerin son halini görelim.

df -h


Çıktımız aşağıdaki gibi
[root@test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_test-lv_root
                       26G  2.1G   23G   9% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   41M  411M  10% /boot
[root@test ~]#


Evet, artık map işlemine geçebiliriz. Aşağıdaki komut ile bu alanın tümünü vg-test grubuna dahil ediyoruz.
lvextend -l +100%FREE /dev/mapper/vg_test-lv_root


Komut sonrası çıktımız aşağıdaki gibi olacaktır.

[root@test ~]# lvextend -l +100%FREE /dev/mapper/vg_test-lv_root
  Size of logical volume vg_test/lv_root changed from 26.51 GiB (6786 extents) to 56.50 GiB (14464 extents).
  Logical volume lv_root successfully resized
[root@test ~]#


Sonrasında grup bilgileri ve disk bilgilerimizi kontrol edelim.
[root@test ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_test
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               59.50 GiB
  PE Size               4.00 MiB
  Total PE              15232
  Alloc PE / Size       15232 / 59.50 GiB
  Free  PE / Size       0 / 0
  VG UUID               Y7Mwd9-b9M4-Lnc3-d6WT-3M83-q6Nw-uibVVO

[root@test ~]#


Gruba map ettiğimiz alan görünüyor ancak diskte görünmemesi gerekiyor. Kontrol ediyoruz.
[root@test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_test-lv_root
                       26G  2.1G   23G   9% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   41M  411M  10% /boot
[root@test ~]#


Evet diskimiz normal olarak görünüyor. Şimdi sıra aynı gruba dahil ( map ) ettiğimiz sda3 partition 'ı sda1 e dahil ediyoruz. Bunun için diski tekrar boyutlandırıyoruz. Bu sayede vg-root bölümü genişlemiş olacaktır. Bu işlem sırasında bir veri kaybı ya da silinmesi olmaz.

Aşağıdaki komutumuzu uygulayarak son adımı atalım.
resize2fs -p /dev/mapper/vg_test-lv_root


Çıktımız aşağıdaki gibi olacaktır.
[root@test ~]# resize2fs -p /dev/mapper/vg_test-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg_test-lv_root is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 4
Performing an on-line resize of /dev/mapper/vg_test-lv_root to 14811136 (4k) blocks.
The filesystem on /dev/mapper/vg_test-lv_root is now 14811136 blocks long.

[root@test ~]#



Artık son olarak disklerimizi kontrol ediyoruz.

[root@test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_test-lv_root
                       56G  2.1G   51G   4% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/sda1             477M   41M  411M  10% /boot
[root@test ~]#


Evet çıktı sonrası diskimizin genişlediğini görüyoruz.

    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent