Linux Disk Yönetimi: Bölümlendirme ve LVM Rehberi

fdisk, parted ve LVM komutlarıyla disk bölümleme, /etc/fstab yapılandırması ve sistemi kapatmadan alan büyütmeyi gerçek terminal örnekleriyle öğrenin.

Linux
Linux Disk Yönetimi: Bölümlendirme ve LVM Rehberi

Bir sunucuda disk dolduğunda ya da yeni bir depolama alanı eklemeniz gerektiğinde iki yöntem var: klasik bölümlendirme ve LVM. İkisi de aynı işi görür, ama LVM sistemi kapatmadan alan büyütmeye izin verir; klasik bölümlendirme ise daha basit ve öngörülebilir kalır. Bir veritabanı sunucusunda disk kullanımı %90'ı geçtiğinde panikle yeni disk eklemekle, önceden LVM kurulmuş bir sistemde tek komutla alan büyütmek arasındaki fark, gece yarısı acil müdahaleyle planlı bakım arasındaki farka benzer.

Bu yazıda ikisini de gerçek komutlarla ele alıyorum; örnekler hem yeni bir disk ekleme senaryosunu hem de mevcut bir bölümü büyütme senaryosunu kapsıyor.

Diskleri ve Bölümleri Görmek

Sisteme bağlı diskleri ve mevcut bölümleri listelemenin en hızlı yolu lsblk komutudur:

lsblk
lsblk -f

-f bayrağı dosya sistemi türünü ve UUID'yi de gösterir; bir bölümün ext4 mü yoksa xfs mi olduğunu, ya da hiç biçimlendirilmemiş olduğunu buradan görürsünüz. lsblk çıktısındaki ağaç yapısı, hangi bölümün hangi diske ait olduğunu ve varsa hangi LVM hacim grubuna bağlı olduğunu tek bakışta gösterir. sda, sda1, sda2 gibi girintili satırlar fiziksel diski ve üzerindeki bölümleri temsil eder.

Daha ayrıntılı bölüm tablosu bilgisi için fdisk ya da GPT diskler için parted kullanılır:

sudo fdisk -l /dev/sda
sudo parted /dev/sda print

MBR bölümleme dört birincil bölümle sınırlıdır, GPT ise bu sınırı kaldırır ve 2 TB üzeri diskleri destekler; yeni kurulan sistemlerin çoğu artık GPT kullanır. fdisk -l çıktısı diskin toplam sektör sayısını, sektör boyutunu ve mevcut bölüm tablosunu (Device, Boot, Start, End, Sectors, Size, Type sütunları) listeler. Bir bölümün nereden nereye uzandığını byte cinsinden görmek istediğinizde bu çıktı gerekir.

Disk kullanım oranını dosya sistemi düzeyinde görmek için:

df -h

df -h bağlı (mounted) her dosya sisteminin toplam, kullanılan ve boş alanını insan tarafından okunabilir birimde gösterir. df boş görünse bile disk doluyorsa sorun genelde inode tükenmesidir; bunu kontrol etmek için df -i kullanılır. Milyonlarca küçük dosya (örneğin bir mail sunucusunda biriken spam ya da bir önbellek dizini) inode limitini df -h'ın gösterdiğinden çok daha önce tüketebilir. Bu durumda diskte boş alan görünse bile yeni dosya oluşturma "No space left on device" hatasıyla başarısız olur.

Yeni Bir Diski Bölümlere Ayırmak

Yeni takılan boş bir diski (örneğin /dev/sdb) kullanılabilir hale getirmenin ilk adımı bölümlendirmedir. parted ile komut satırından tek seferde bölüm oluşturmak mümkündür:

Terminal ekranında fdisk ve mkfs komutlarıyla yeni diskin bölümlenip biçimlendirilmesi
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%

İlk komut GPT bölüm tablosu oluşturur, ikinci komut diskin tamamını kaplayan tek bir birincil bölüm açar. 0% 100% ifadesi diskin başından sonuna kadar tüm alanı kullanır; belirli bir boyut ayırmak isterseniz 0% 50GB gibi somut değerler de verebilirsiniz. Etkileşimli çalışmayı tercih edenler için fdisk daha tanıdık bir arayüz sunar:

sudo fdisk /dev/sdb

Bu komut sizi n (yeni bölüm), p (birincil), bölüm numarası ve boyut soran bir menüye sokar. w ile değişiklikleri diske yazarsınız, q ise kaydetmeden çıkar. Boyutu belirtirken +20G gibi göreli bir değer de girebilirsiniz; bu, diskin başından itibaren tam 20 GB'lık bir bölüm ayırır. Boş bırakırsanız fdisk kalan tüm alanı kullanır. w komutunu çalıştırmadan önce p (print) yazıp bölüm tablosunu bir kez daha gözden geçirmek, yanlış diskte işlem yapmadığınızı doğrulamanın basit bir yoludur.

Bölüm oluşturulduktan sonra dosya sistemiyle biçimlendirmeniz gerekir, aksi halde bölüm kullanılamaz:

sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1

ext4 genel amaçlı kullanımda öntanımlı tercihtir; xfs ise büyük dosyalar ve yüksek G/Ç yükü olan sunucularda (veritabanı, medya depolama) daha iyi performans gösterir. mkfs.ext4 çalıştırıldığında terminal size dosya sistemi bloğu boyutunu, inode sayısını ve journal ayarlarını gösteren birkaç satır çıktı verir; bu işlem disk boyutuna bağlı olarak birkaç saniyeden birkaç dakikaya kadar sürer.

Biçimlendirilen bölümü kullanmak için bir dizine bağlamanız (mount) gerekir:

sudo mkdir /mnt/veri
sudo mount /dev/sdb1 /mnt/veri

Bu bağlama geçicidir, yeniden başlatınca kaybolur; kalıcı hale getirmek için /etc/fstab dosyasına satır eklenir. Bağlama işleminden hemen sonra df -h /mnt/veri çalıştırıp bölümün beklediğiniz boyutta göründüğünü doğrulamak, ilerideki bir yanlış anlaşılmayı önler.

Kalıcı Bağlama: /etc/fstab

/etc/fstab, sistem açılışında hangi bölümün nereye bağlanacağını tanımlayan dosyadır. Elle düzenlemeden önce bölümün UUID'sini almak daha güvenlidir, çünkü aygıt adları (/dev/sdb1) donanım değişikliğinde kayabilir. Bir disk çıkarılıp takıldığında ya da yeni bir disk eklendiğinde /dev/sdb bir sonraki açılışta /dev/sdc olarak görünebilir, ama UUID hep aynı kalır:

LVM'in üç katmanını gösteren şema: fiziksel birim, hacim grubu, mantıksal birim
sudo blkid /dev/sdb1

Çıktıdaki UUID'yi /etc/fstab'a şu formatta eklersiniz:

UUID=1a2b3c4d-5e6f-7890-abcd-ef1234567890  /mnt/veri  ext4  defaults  0  2

Sütunlar sırasıyla aygıtı, bağlama noktasını, dosya sistemi türünü, bağlama seçeneklerini, dump yedekleme bayrağını ve fsck tarama sırasını belirtir. Bağlama seçenekleri alanına defaults yerine noatime eklemek, her dosya okumasında erişim zaman damgasını güncellemeyi kapatır ve yoğun G/Ç yapan sunucularda küçük bir performans kazancı sağlar. Son sütundaki 2 değeri, kök dosya sistemi dışındaki bölümlerin açılışta ikinci sırada denetleneceğini belirtir.

/etc/fstab'da hata yaparsanız sistem açılışta kurtarma moduna düşebilir. Bu yüzden değişiklikten sonra yeniden başlatmadan önce test etmek kritiktir:

sudo mount -a

Bu komut fstab'daki tüm girişleri hemen dener ve hata varsa yeniden başlatmadan önce terminalde gösterir; sessizce geçerse dosya doğru yazılmış demektir. Hatalı bir UUID ya da yazım hatası varsa mount -a "mount point does not exist" ya da "wrong fs type" gibi net bir hata mesajı verir. Bu, reboot sonrası kurtarma moduyla uğraşmaktan çok daha az stresli bir yoldur.

LVM Nedir ve Neden Kullanılır?

Klasik bölümlendirmenin en büyük kısıtı, bir bölümü sonradan büyütmenin zor olmasıdır; disk dolduğunda genelde yeni bir disk eklemek ya da veriyi taşımak gerekir. LVM (Logical Volume Manager) bu sorunu bir soyutlama katmanıyla çözer: fiziksel diskler mantıksal birimlere dönüştürülür ve bu birimler ihtiyaç oldukça büyütülüp küçültülebilir.

LVM üç katmandan oluşur:

  • Physical Volume (PV): LVM'e dahil edilen fiziksel disk ya da bölümdür.
  • Volume Group (VG): Birden fazla PV'nin birleştirildiği ortak havuzdur.
  • Logical Volume (LV): VG'den ayrılan ve gerçek dosya sisteminin üzerine kurulduğu esnek birimdir.

Bu katmanlı yapı sayesinde, bir VG'ye yeni bir disk eklediğinizde o alanı mevcut bir LV'ye anında ekleyebilirsiniz; klasik bölümlendirmede bu işlem diski yeniden bölümlendirmeyi gerektirirdi. Sunucularda kök dosya sistemini büyütme ihtiyacı sık karşılaşılan bir durum olduğu için, birçok dağıtımın kurulum sihirbazı artık öntanımlı olarak LVM önerir; Ubuntu Server kurulumunda "Use LVM" seçeneği varsayılan olarak işaretli gelir.

Birden fazla fiziksel diski tek bir VG altında birleştirmek de mümkündür; örneğin iki adet 1 TB disk, tek bir 2 TB'lık mantıksal birim olarak kullanılabilir. Bu esneklik, klasik bölümlendirmede RAID gibi ayrı bir katman kurmadan elde edilemeyecek bir avantaj sağlar.

LVM Kurulumu: PV, VG, LV Oluşturmak

Yeni bir diski LVM'e dahil etmenin ilk adımı onu fiziksel birim olarak işaretlemektir:

Terminal ekranında lvextend ve resize2fs komutlarıyla mantıksal birimin canlı büyütülmesi
sudo pvcreate /dev/sdc
sudo pvdisplay

Ardından bu PV'yi bir hacim grubuna eklersiniz; grup henüz yoksa oluşturulur:

sudo vgcreate veri_grubu /dev/sdc
sudo vgdisplay

Hacim grubundan istediğiniz boyutta bir mantıksal birim ayırırsınız:

sudo lvcreate -L 50G -n veri_lv veri_grubu
sudo mkfs.ext4 /dev/veri_grubu/veri_lv
sudo mount /dev/veri_grubu/veri_lv /mnt/veri

-L 50G birimin boyutunu belirler; grubun tüm alanını kullanmak isterseniz -l 100%FREE bayrağı da mevcuttur. Komutların baş harfleri katman katman ilerler: pv* fiziksel birim, vg* hacim grubu, lv* mantıksal birim komutlarıdır. Bu düzeni bilmek hangi komutu ne zaman kullanacağınızı hatırlamayı kolaylaştırır. vgdisplay çıktısındaki "Free PE / Size" satırı, o hacim grubunda henüz hiçbir LV'ye ayrılmamış ne kadar alan kaldığını gösterir; yeni bir LV oluşturmadan önce bu değere bakmak, -l 100%FREE kullanırken sürpriz yaşamamanızı sağlar.

LVM'in Asıl Gücü: Canlı Genişletme

LVM'in klasik bölümlendirmeye üstünlüğü asıl burada ortaya çıkar: disk dolmaya başladığında sistemi durdurmadan mantıksal birimi büyütebilirsiniz. Önce hacim grubuna yeni bir fiziksel disk eklenir:

sudo pvcreate /dev/sdd
sudo vgextend veri_grubu /dev/sdd

Ardından mantıksal birim büyütülür ve dosya sistemi bu yeni boyuta genişletilir:

sudo lvextend -L +20G /dev/veri_grubu/veri_lv
sudo resize2fs /dev/veri_grubu/veri_lv

lvextend yalnızca LVM katmanındaki boyutu büyütür. Dosya sisteminin bunu fark etmesi için resize2fs (ext4 için) ya da xfs_growfs (xfs için) çalıştırmanız gerekir; aksi halde ekstra alan görünür ama kullanılamaz. Bu adımı atlayan biri, lvextend sonrası df -h çalıştırıp bölümün hâlâ eski boyutta göründüğünü görünce komutun çalışmadığını düşünüp gereksiz yere tekrar dener; oysa sorun yalnızca dosya sistemi büyütmesinin unutulmuş olmasıdır.

Bu iki komutu tek satırda birleştirmek de mümkündür:

sudo lvextend -L +20G -r /dev/veri_grubu/veri_lv

-r bayrağı resize2fs'i otomatik tetikler ve ayrı komut çalıştırmayı gereksiz kılar; günlük kullanımda önerilen yöntem budur, çünkü iki ayrı komutu unutma riskini ortadan kaldırır. Küçültme işlemi (lvreduce) çok daha risklidir. ext4'te önce dosya sistemi küçültülmeli, sonra mantıksal birim küçültülmelidir; sıra ters çevrilirse veri kaybı olur.

xfs dosya sistemleri küçültmeyi desteklemez, bu yüzden xfs kullanan bir LV'yi yalnızca büyütebilirsiniz. Bir xfs bölümünü küçültmeniz gerekiyorsa tek yol, yeni ve daha küçük bir LV oluşturup veriyi rsync ile taşımaktır; xfs kullanmayı planlıyorsanız başlangıç boyutunu temkinli seçmek ileride zaman kazandırır.

LVM anlık görüntü (snapshot) özelliği de sunar; büyük bir güncelleme öncesi lvcreate -s ile geri dönülebilir bir kontrol noktası almak, yedekleme stratejisinin ucuz ve hızlı bir tamamlayıcısıdır. Resmî belgeler için Red Hat'in LVM yönetim kılavuzu ve man lvm sayfası ayrıntılı komut referansı sağlar.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

Bilgisayar mühendisiyim; 25 yılı aşkın süredir bilgi işlem sektörünün içindeyim. Bu blogu 2020'de, işimde her gün karşılaştığım sorunların çözümlerini bir yere yazmak için açtım: Linux, güvenlik, tarayıcılar, yapay zeka araçları. Yazdığım her rehberi önce kendi bilgisayarımda ya da sunucumda deniyorum; çalıştığını görmediğim adımı yayınlamam. Hatalı ya da eskimiş bir şey görürsen iletişim sayfasından yaz — düzeltirim.

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar

jekcms 61602b0e6293b42004a1