Yeni yazı: Kümenin Kapağını Açalım: Kubernetes Bileşenleri Birbirini Neden Hiç Aramaz?
Linux'da Disk Genişletme İşlemi

Linux'da Disk Genişletme İşlemi

İç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 sda2 bölümü disk üzerinde bir yerde başlıyor ve belli bir alanda sona eriyor. Eğer sda2’nin hemen arkasında sda3 başlıyorsa, sda2 bölümü genişletilmek istendiğinde sda3’e taşma yapar. Yani sda2 ile sda3 fiziksel olarak yan yana ve sda3 hemen sda2’nin sınırını takip ediyor.
  • Bu durumda, sda2 geniş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, sda2 veya sda3).
  • 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:

  • p tuşuna basarak mevcut bölümleri listeleyin.
  • n tuşuna basarak yeni bir bölüm oluşturun.
  • Bölüm tipi olarak primary seçin (genellikle varsayılan).
  • Yeni alanı kullanarak bölümü tamamlayın.
  • w tuş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/vda3 satı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.
  • Write seçeneğini seçin ve yes yazarak ENTER’a basın.
  • Quit ile çı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 lsblk büyük görünür ama df -h değ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çıp vgextend ile 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’te xfs_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.

Paylaş :

İlgili Yazılar

Mutlak Yol ve Bağıl Yol Kavramları

Mutlak Yol ve Bağıl Yol Kavramları

Bir işletim sistemi olan GNU/Linux’un temel taşlarından biri dosya ve dizin yapısıdır. Dosyalar, verileri saklamak için kullanılan birimlerdir, dizinler ise dosyaların düzenli bir şekilde saklandığı yerlerdir. Dosya ve dizinlerin yönetimi ve erişimi, Linux öğrenme yolculuğunuzun vazgeçilmez bir parçasıdır. Bu yazıda, dosya ve dizin yapısının temelini oluşturan Mutlak Yol (Absolute Path) ve Bağıl Yol (Relative Path) kavramlarına yakından bakacağız.

Linux'da Kullanıcı Hesapları ve Yetkileri: Sudo ve Su Komutları

Linux'da Kullanıcı Hesapları ve Yetkileri: Sudo ve Su Komutları

Linux işletim sistemi, güçlü bir çok kullanıcılı ve çok görevli bir yapıya sahiptir. Bu çoklu kullanıcı ortamında, her kullanıcının kendi hesabına ve yetkilerine sahip olması önemlidir. Linux’ta kullanıcı hesapları ve yetkileri, güvenlik ve sistem yönetimi açısından kritik bir rol oynar. Bu yazıda, Linux’ta kullanıcı hesaplarını yönetmek ve yetkileri kontrol etmek için kullanılan sudo ve su komutlarına odaklanacağız.

Kabukta İlk Adımlar: Komutlar ve Temel Seçenekler

Kabukta İlk Adımlar: Komutlar ve Temel Seçenekler

GNU/Linux işletim sisteminde kabuk (shell) kullanarak temel komutları ve komutlarda kullanılan temel seçenekleri öğrenmeye başlayacağız. Kabuk, kullanıcıların işletim sistemiyle etkileşim kurmasını sağlayan arayüzdür ve komut satırını kullanarak birçok işlemi gerçekleştirebiliriz. Haydi, kabukta ilk adımlarımıza başlayalım ve komutların temel seçeneklerini öğrenelim. Diğer konuları ‘GNU/Linux Öğrenme Yolculuğu’ bu adresten ulaşabilirsiniz.