Linux'da Disk Genişletme İşlemi
- Murat Akpınar
- Linux
- 13 Kasım 2024
İçindekiler
Sanallaştırma katmanında diski büyütmek beş saniyelik iştir: sanal diske 100 GB eklersiniz ve iş bitmiş görünür. Ama sunucuya girip df -h yazdığınızda hiçbir şeyin değişmediğini görürsünüz — disk büyümüştür, bölüm büyümemiştir; bölüm büyüse bile dosya sistemi hâlâ eski boyuttadır. Alan ancak üç katmanın üçü de büyütüldüğünde kullanılabilir hâle gelir.
Bu yazıda KVM üstünde çalışan bir Ubuntu 22.04 sanal makinesinde bu üç katmanı iki farklı yöntemle büyüteceğiz. Hipervizör tarafındaki disk büyütme adımı sanallaştırma ortamınıza göre değişir; KVM için Tecmint’in rehberine bakabilirsiniz.
Aşağıdaki çıktılar bir test makinesine aittir; UUID’ler, boyutlar ve aygıt adları sizin sisteminizde farklı olacaktır. Komutlar gerçektir. Bölüm tablosuyla oynamadan önce yedek alın — bu adımların hiçbiri geri alınabilir değildir.
Disk Genişletmenin İki Yolu
1. Contiguous Allocation (Bitişik Alan Ayrımı)
Bu kavram, geleneksel disk bölümlerinin çalışma yapısını ifade eder. Contiguous Allocation’da, bir bölümü genişletmek istediğinizde bu bölümün arkasında yer alan alanın boş ve aynı zamanda bitişik olması gerekir. Bölümler fiziksel olarak diskin belli bölgelerinde sabit alanlara ayrıldığı için genişletilmek istenen bölüm, ancak bitişiğindeki alan boşsa genişletilebilir.
Örneğin:
- Diyelim ki
sda2bölümü disk üzerinde bir yerde başlıyor ve belli bir alanda sona eriyor. Eğersda2’nin hemen arkasındasda3başlıyorsa,sda2bölümü genişletilmek istendiğindesda3’e taşma yapar. Yanisda2ilesda3fiziksel olarak yan yana vesda3hemensda2’nin sınırını takip ediyor. - Bu durumda,
sda2genişletilemez çünkü disk yapısında bölümlerin sürekli (contiguous) olması zorunluluğu var. Bitişik bir boş alan yoksa, bölüm genişletme işlemi yapılamaz.
Contiguous Allocation, disk bölümlerinin fiziksel sınırlarına sıkı sıkıya bağlı kalır. Bu yüzden, büyük disk alanları veya esnek alan yönetimi gereken durumlarda yeterli esnekliği sunmaz.
2. LVM (Logical Volume Manager) ve Volume Group
LVM, disk yapısında bu fiziksel sınırlamaları aşmak için kullanılan bir yönetim sistemidir. Mantık olarak, birden fazla fiziksel disk bölümünü (örneğin, sda2 ve sda3) tek bir mantıksal hacim (volume) olarak birleştirir. Bu sayede disk bölümlerinin fiziksel olarak bitişik olup olmalarına bağlı kalmadan genişletilebilir bir yapı oluşturur.
LVM Nasıl Çalışır?
- Physical Volume (PV): Disk üzerinde LVM’ye dahil edilen fiziksel birimlerdir (örneğin,
sda2veyasda3). - Volume Group (VG): LVM’de birden fazla PV’nin birleşiminden oluşur ve LVM’nin temel çalışma alanıdır.
- Logical Volume (LV): Volume Group içindeki alanlardan istediğiniz gibi mantıksal hacimler yaratabilirsiniz. Bu mantıksal hacimler gerçek disk bölümlerinin bir araya getirilmiş, bir mantıksal bütün haline getirilmiş halidir.
LVM’nin en önemli avantajı, disk alanı eklemek veya mevcut alanı genişletmek istediğinizde fiziksel düzenlemelerle uğraşmadan mantıksal seviyede genişletme imkanı sağlamasıdır. Yani, sda2 ve sda3 arka arkaya olmak zorunda değil, LVM ile bir araya getirilip tek bir hacim gibi kullanılabilirler.
Yöntem 1: Yeni Bölüm Açıp Volume Group’a Eklemek
Bu yöntemde diskteki boş alandan yeni bir bölüm (vda4) oluşturur, onu fiziksel hacim yapar ve mevcut volume group’a ekleriz. vda3 ile vda4 fiziksel olarak yan yana olmak zorunda değildir — LVM’nin sağladığı esneklik tam olarak budur.
Başlangıç durumu: disk 120G, ama işletim sistemi yalnızca 18.2G’lik vda3 bölümünü kullanıyor. Kalan ~100G ayrılmamış durumda.
murat@ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 111.9M 1 loop /snap/lxd/24322
loop1 7:1 0 63.4M 1 loop /snap/core20/1974
loop2 7:2 0 53.3M 1 loop /snap/snapd/19457
loop3 7:3 0 38.8M 1 loop /snap/snapd/21759
loop4 7:4 0 63.7M 1 loop /snap/core20/2434
loop5 7:5 0 87M 1 loop /snap/lxd/29351
sr0 11:0 1 1024M 0 rom
vda 252:0 0 120G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1.8G 0 part /boot
└─vda3 252:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm /
Partition Table Güncelleme
Öncelikle, vda diskindeki boş alanı yeni bir bölüm olarak ayırmamız gerekiyor. Bunun için fdisk aracını kullanacağız:
sudo fdisk /dev/vda
fdisk açıldıktan sonra aşağıdaki adımları izleyin:
ptuşuna basarak mevcut bölümleri listeleyin.ntuşuna basarak yeni bir bölüm oluşturun.- Bölüm tipi olarak
primaryseçin (genellikle varsayılan). - Yeni alanı kullanarak bölümü tamamlayın.
wtuşuna basarak değişiklikleri yazdırın ve çıkın.
LVM’e Yeni Bölümü Eklemek
Yeni bölümü LVM yapısına dahil etmek için yeni partisyonu fiziksel hacim (PV) olarak ayarlamanız gerekecek.
sudo pvcreate /dev/vda4
sudo pvdisplay
--- NEW Physical volume ---
PV Name /dev/vda4
VG Name
PV Size <100.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID kgERpe-hsm9-MQd2-K3Zu-t8cA-SmM2-oVZqQs
VG Name alanının boş ve Allocatable değerinin NO olması normaldir: bölüm henüz bir volume group’a ait değildir, dolayısıyla ondan alan dağıtılamaz.
Yeni PV’yi VG’ye Eklemek
Yeni PV’yi mevcut volume group (VG) ubuntu-vg içerisine ekleyin:
sudo vgextend ubuntu-vg /dev/vda4
# Volume group "ubuntu-vg" successfully extended
sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size <118.22 GiB
PE Size 4.00 MiB
Total PE 30264
Alloc PE / Size 4665 / 18.22 GiB
Free PE / Size 25599 / <100.00 GiB
VG UUID UvV3Vf-dDCF-VvVb-Olof-4Vxu-fEGt-H1FjdL
Doğrulanacak iki satır var: Cur PV 1’den 2’ye çıkmış olmalı (VG artık iki bölümden besleniyor) ve Free PE / Size yeni eklenen alanı göstermeli. Cur PV hâlâ 1 ise vgextend çalışmamıştır, sonraki adımlar da boşa gider.
Logical Volume (LV) Boyutunu Artırma
Şimdi ubuntu-lv adlı logical volume’ün boyutunu artırabilirsiniz. Tüm kullanılabilir alanı eklemek için şu komutu kullanın:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from 18.22 GiB (4665 extents) to <118.22 GiB (30264 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
Dosya Sistemini Genişletme
Son olarak, ubuntu-lv üzerinde kullanılan dosya sistemini genişletmeniz gerekiyor. Bu adım atlanırsa df -h çıktısı hiç değişmez — LVM katmanı büyümüş, dosya sistemi eski boyutunda kalmıştır.
Dosya sisteminizin türünü önce doğrulayın, komut ona göre değişir:
df -T / # Type sütunu ext4 mü xfs mi?
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv # ext4 / ext3 / ext2 için
sudo xfs_growfs / # XFS için — aygıt değil, bağlama noktası verilir
XFS ayrımı önemlidir: RHEL, Rocky, AlmaLinux ve CentOS 7+ kurulumlarında kök dosya sistemi varsayılan olarak XFS’tir ve resize2fs orada Bad magic number in super-block hatası verir. Ayrıca XFS küçültülemez, yalnızca büyütülebilir.
Yöntem 2: Mevcut Bölümü Büyütmek (cfdisk + pvresize)
Bu yöntemde yeni bölüm açmayız; boş alan zaten vda3‘ün hemen arkasında olduğu için mevcut bölümün sınırını ileri taşırız. Bitişik boş alan varsa daha temiz sonuç verir — VG tek PV üzerinde kalır.
Disk alanını genişletme
Bölümü büyütmek için cfdisk aracını kullanacağız:
sudo cfdisk /dev/vda
cfdisk açıldıktan sonra aşağıdaki adımları izleyin:
/dev/vda3satırını seçip Resize seçeneğine gelin ve ENTER’a basın. Boş alanı doğrudan bölümün üstüne ekler.Writeseçeneğini seçin veyesyazarak ENTER’a basın.Quitile çıkın.
cfdisk‘in Resize seçeneğini kullanmanın sebebi şudur: bölümü silip yeniden oluşturarak da büyütebilirsiniz, ama bunu yaparken başlangıç sektörünü birebir aynı vermek zorundasınız. Bir sektör kayarsa üzerindeki LVM meta verisi bulunamaz ve bölüm okunamaz hâle gelir. Resize başlangıcı hiç ellemez.
Artık vda3 bölümü 118.2G oldu:
murat@ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 38.8M 1 loop /snap/snapd/21759
loop1 7:1 0 63.4M 1 loop /snap/core20/1974
loop2 7:2 0 87M 1 loop /snap/lxd/29351
loop3 7:3 0 63.7M 1 loop /snap/core20/2434
loop4 7:4 0 111.9M 1 loop /snap/lxd/24322
loop5 7:5 0 53.3M 1 loop /snap/snapd/19457
sr0 11:0 1 1024M 0 rom
vda 252:0 0 120G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 1.8G 0 part /boot
└─vda3 252:3 0 118.2G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 18.2G 0 lvm /
Dikkat edin: bölüm 118.2G’ye çıktı ama LVM hacmi hâlâ 18.2G. Bölümün büyümesi kendiliğinden LVM’ye yansımaz.
Bölüm Tablosunu ve LVM’yi Yeniden Tarayın
LVM’ye altındaki bölümün büyüdüğünü pvresize ile bildirmeniz gerekir:
sudo pvresize /dev/vda3
Komut Device /dev/vda3 not found ya da eski boyutu verirse, çekirdek yeni bölüm tablosunu henüz okumamış demektir. Bölüm bağlı olduğu için (kök dosya sistemi üzerinde) tablo çalışırken yeniden okunamayabilir; önce partprobe deneyin, olmazsa sistemi yeniden başlatın:
sudo partprobe /dev/vda
sudo pvresize /dev/vda3
vgdisplay ile baktığımızda boş alana 100 GB geldiğini göreceğiz; şimdi bu alanı hacme dahil etme işi kaldı.
murat@ubuntu:~$ sudo vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 118.22 GiB
PE Size 4.00 MiB
Total PE 30265
Alloc PE / Size 4665 / 18.22 GiB
Free PE / Size 25600 / 100.00 GiB
VG UUID 6fWVCi-MLdn-QYau-d5xk-CnET-0xZO-eJvl5N
Cur PV burada 1: yeni bölüm açmadığımız için VG hâlâ tek fiziksel hacim üzerinde duruyor, yalnızca o hacim büyüdü. Birinci yöntemde bu değer 2 idi — iki yöntem arasındaki fark tam olarak burada görünür.
Logical Volume’u Genişletme
Mevcut logical volume ubuntu-lv‘yi tüm boş alanı kullanacak şekilde genişletmek için şu komutu çalıştırın:
murat@ubuntu:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from 18.22 GiB (4665 extents) to 118.22 GiB (30265 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
murat@ubuntu:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 7
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 13106176 (4k) blocks long.
on-line resizing required satırı, dosya sisteminin bağlıyken büyütüldüğünü söyler; ext4 ve XFS bunu destekler, sistemi kapatmanız gerekmez.
Doğrulama
Üç katmanın üçünün de büyüdüğünü tek tek görün — yalnızca lsblk‘a bakmak yetmez, çünkü dosya sistemi büyümeden de bölüm ve LV büyük görünür:
lsblk # bölüm ve LV boyutu
sudo pvs; sudo vgs; sudo lvs # LVM katmanı
df -h / # asıl cevap: kullanılabilir alan gerçekten arttı mı?
df -h çıktısındaki Size değeri hâlâ eskiyse dosya sistemi genişletme adımı (resize2fs / xfs_growfs) çalışmamıştır.
Sonuç
- Disk genişletme tek işlem değil, üç katmanlı bir zincirdir: sanal disk → bölüm → LVM → dosya sistemi. Zincirin son halkası atlandığında
lsblkbüyük görünür amadf -hdeğişmez; en sık yapılan hata budur. - Bitişik boş alan varsa mevcut bölümü büyütmek daha temizdir (
cfdisk+pvresize); yoksa yeni bölüm açıpvgextendile VG’ye eklemek işi görür. LVM’nin sağladığı esneklik, bu ikinci yolun mümkün olmasıdır. - Dosya sistemi komutu türe göre değişir. ext4’te
resize2fs <aygıt>, XFS’texfs_growfs <bağlama noktası>. RHEL ailesinde varsayılan XFS’tir ve XFS küçültülemez — büyütmeden önce boyut kararını doğru verin.
Depolama tarafında devam etmek için: Veri merkezinde BT yedekliliği — ağ, depolama, küme.