
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.
Neden İki Yol Var: Bitişik Alan Kuralı ve LVM
Bölüm büyütmenin tek bir yolu olmamasının sebebi, klasik bölüm tablosunun katı bir kuralı olmasıdır: bir bölüm ancak hemen arkasındaki alan boşsa büyüyebilir. Buna contiguous allocation denir. vda3‘ün arkasında vda4 başlıyorsa vda3 büyütülemez — diskin başka bir yerinde 100 GB boş alan olması hiçbir şeyi değiştirmez, çünkü bir bölüm diskte tek parça hâlinde durmak zorundadır.
LVM bu kuralı ortadan kaldırmaz, üstüne bir katman koyar. Üç kavramı vardır:
- Physical Volume (PV) — LVM’ye verilen bir bölüm ya da disk (
/dev/vda3,/dev/vda4). - Volume Group (VG) — bir veya daha fazla PV’nin oluşturduğu havuz.
- Logical Volume (LV) — havuzdan kesilen, üzerine dosya sistemi kurduğunuz mantıksal bölüm.
Havuz birden fazla PV’den beslenebildiği için, diskin neresinde olursa olsun yeni bir bölüm açıp VG’ye eklemek yeterlidir; vda3 ile vda4‘ün yan yana olması gerekmez. Yazının iki yöntemi tam olarak bu iki durumdan doğar: bitişik boş alan yoksa yeni PV eklersiniz (Yöntem 1), varsa mevcut bölümün sınırını ileri taşırsınız (Yöntem 2).
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.


