[TR] Linux’ta Disk Yönetimi

[TR] Linux’ta Disk Yönetimi

Bir Linux sunucusunda en sevimsiz anlardan biri gece yarısı gelen “disk doldu” alarmıdır. Servisler log yazamaz, veritabanı hata kusmaya başlar, uygulama beklenmedik şekilde durur. O an telaşla df -h yazıp ekrana bakarsınız ama gördüğünüz rakamlar tek başına size pek bir şey anlatmaz. Çünkü disk yönetimi komut ezberlemekle değil sistemin diski nasıl gördüğünü anlamakla başlar.

Bu makalede tam da bunu hedefliyor Linux’ta diskin nasıl çalıştığını temelden kurmak, ardından partition oluşturmaktan LVM ile disk genişletmeye, swap yönetiminden gerçek hayattaki “disk dolu ama büyük dosya yok” gizemine kadar uzanan bir yolculuk. Her komutun ne yaptığını değil neden yaptığını anlatmaya çalışacağım.

Bir uyarıyla başlayalım Disk işlemleri şaka kaldırmaz. Yanlış diske partition yazarsanız sistem geri gelmez. Bu yüzden buradaki her şeyi production sunucuda değil, bir test sanal makinesinde deneyin. VMware, VirtualBox, Hyper-V ya da Proxmox; hangisi elinizin altındaysa.

Linux Diski Nasıl Görür?

Linux’un en zarif fikirlerinden biri “her şey dosyadır” yaklaşımıdır ve diskler de bu kuralın dışında değil. Sisteme takılı her disk /dev dizini altında bir dosya olarak temsil edilir. /dev/sda ilk diskinizdir /dev/sdb ikincisi, NVMe sürücüleriniz varsa /dev/nvme0n1 gibi isimlerle karşınıza çıkar.

Burada kafa karıştıran nokta şu: /dev/sda ile /dev/sda1 aynı şey değildir. /dev/sda bütün diski temsil eder fiziksel ya da sanal, koca bir depolama birimi. /dev/sda1 ise o diskin üzerinde tanımlanmış bir partition yani diskin mantıksal olarak bölünmüş bir parçası. Disk bir kitapsa, partition o kitabın bölümleridir.

Ama partition da tek başına işe yaramaz. Bir partition’a dosya yazabilmek için üzerine bir filesystem kurmanız gerekir. Filesystem ham depolama alanını “dosya” ve “klasör” kavramlarına çeviren katmandır. Son olarak bu filesystem’i Linux’un dizin ağacındaki bir noktaya bağlarsınız; buna mount denir.

Yani zincir şöyle işler:

Disk -> Partition -> Filesystem -> Mount Point

Yeni bir disk eklediğinizde tipik olarak izleyeceğiniz yol da budur disk sisteme tanıtılır üzerinde partition açılır, partition’a filesystem kurulur, filesystem bir dizine mount edilir ve gerekirse bu bağlantı kalıcı hale getirilir.

Bu mantığı bir kez içselleştirdiğinizde ileride karşılaşacağınız çoğu hata aslında bu zincirin bir halkasının eksik olmasından kaynaklandığını göreceksiniz.

Önce Bak, Sonra Dokun !!!

Disk yönetiminde iyi bir sistem yöneticisinin ilk refleksi komut yazmak değil mevcut durumu okumaktır. Sistemde hangi diskler var, hangileri mount edilmiş, hangisi boş duruyor, filesystem tipleri ne? Bunları görmeden atılan her adım risklidir.

İlk uğrak noktanız lsblk komutudur. Sistemdeki tüm block device’ları ağaç yapısında gösterir:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   49G  0 part /
sdb      8:16   0   20G  0 disk

Bu çıktı size hikâyenin tamamını anlatır. sda ana diskinizdir üzerinde iki partition var biri /boot diğeri kök dizin /. Aşağıdaki sdb ise 20 GB’lık bir disk ama hiçbir partition’ı yok hiçbir yere mount edilmemiş.

Yani sisteme takılı ama henüz kullanılmaya hazır değil. Filesystem tiplerini ve UUID’leri de görmek isterseniz lsblk -f komutu işinizi görür.

İkinci alışkanlığınız df -h olmalı. Bu komut mount edilmiş filesystem’lerin doluluk oranını gösterir. Ama burada çok önemli bir incelik var: df yalnızca mount edilmiş alanları gösterir. Az önceki sdb diski df çıktısında görünmez çünkü henüz mount edilmemiştir. Yeni eklediğiniz bir diski df ile arayıp bulamadığınızda paniğe kapılmayın; orada olması zaten beklenmez.

Diskin sisteme gerçekten tanınıp tanınmadığını anlamak içinse sudo fdisk -l daha doğru araçtır.

Yeni bir disk eklediğinizde “acaba sistem bunu gördü mü?” sorusunun cevabı buradadır. Son olarak sudo blkid komutu her partition’ın UUID’sini listeler. UUID’ler ileride kalıcı mount tanımları yaparken hayat kurtaracak o yüzden varlığını şimdiden aklınızda tutun.

Yeni Diske Partition Açmak

Diyelim ki sisteme yeni bir disk eklediniz ve lsblk çıktısında partition’sız bomboş duran bir /dev/sdb görüyorsunuz. Onu kullanılabilir hale getirmenin ilk adımı partition oluşturmak.

Burada birinci kural hangi diskle çalıştığınızdan kesinlikle emin olun. Partition işlemleri veri kaybına yol açar ve yanlışlıkla /dev/sda üzerinde işlem yapmak çalışan sisteminizi bir anda yok edebilir.

Klasik yöntem fdisk aracıdır;

sudo fdisk /dev/sdb

Açılan etkileşimli ekranda sırasıyla n (yeni partition), p (primary tipi), 1 (partition numarası) seçer başlangıç ve bitiş sektörlerini varsayılan bırakmak için iki kez Enter’a basar, son olarak w ile değişiklikleri diske yazarsınız. w yazana kadar hiçbir şey kalıcı değildir bir hata yaptığınızı düşünüyorsanız q ile hiçbir şeyi kaydetmeden çıkabilirsiniz. Bu güvenlik ağını unutmayın.

Modern sistemlerde ve özellikle büyük disklerde MBR yerine GPT partition tablosu tercih edilir. Bunun için parted daha uygun:

sudo parted /dev/sdb

Parted içinde mklabel gpt ile GPT tablosu oluşturur mkpart primary ext4 1MiB 100% ile diskin tamamını kaplayan bir partition tanımlarsınız.

İşlem bittiğinde lsblk ile kontrol ettiğinizde artık sdb altında bir sdb1 göreceksiniz.

Filesystem ile Ham Alanı Kullanılabilir Hale Getirmek

Partition açtınız ama henüz dosya yazamazsınız. Çünkü partition hâlâ ham bir alan üzerine bir filesystem kurulmadan içine hiçbir şey koyamazsınız.

Filesystem, depolama alanını organize eden, dosyaları ve klasörleri bir arada tutan yapıdır.

Linux dünyasında en yaygın tercih ext4‘tür. Stabil, olgun ve neredeyse her senaryoda iş gören bir filesystem. Büyük dosyalarla çalışan, yüksek performans isteyen sistemlerde ise XFS öne çıkar.

Snapshot gibi gelişmiş özelliklere ihtiyaç duyuyorsanız btrfs akla gelir EFI partition’ları içinse vfat kullanılır.

ext4 oluşturmak son derece basittir:

sudo mkfs.ext4 /dev/sdb1

XFS isterseniz mkfs.xfs komutunu kullanırsınız.

Ama burada production planlaması açısından kritik bir detay var XFS küçültülemez, yalnızca büyütülebilir. Eğer ileride disk alanını daraltma ihtimaliniz varsa bu kısıt karar verirken önemli olabilir.

İşlem sonrası lsblk -f çıktısında partition’ın artık bir filesystem tipi ve UUID’si olduğunu göreceksiniz.

Mount ve Kalıcılık: /etc/fstab’ın Önemi !!!

Filesystem’iniz hazır ama hâlâ kullanamıyorsunuz. Onu Linux’un dizin ağacında bir yere bağlamanız gerekiyor.

Önce bir mount noktası yani boş bir dizin oluşturursunuz.

sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

Bu andan itibaren /mnt/data dizinine yazdığınız her şey aslında sdb1 partition’ına gider.

Bir test dosyası oluşturup gerçekten yazılabildiğini doğrulamak iyi bir alışkanlıktır.

İşiniz bittiğinde sudo umount /mnt/data ile bağlantıyı kaldırabilirsiniz.

Burada sık karşılaşılan bir hata var: “target is busy”. Bu, dizini hâlâ kullanan bir process olduğu anlamına gelir. sudo lsof +D /mnt/data ya da fuser -vm /mnt/data komutlarıyla suçluyu bulabilirsiniz.

Şimdi en kritik kısım. Az önce yaptığınız mount geçicidir. Sistemi yeniden başlattığınızda kaybolur. Kalıcı hale getirmek için bu tanımı /etc/fstab dosyasına yazmalısınız.

İlk olarak partition’ın UUID’sini öğrenin (sudo blkid /dev/sdb1). Neden disk ismini değil de UUID’yi kullanıyoruz? Çünkü /dev/sdb1 gibi isimler kalıcı değildir bir disk eklendiğinde ya da çıkarıldığında sıralama değişebilir ve dünkü sdb bugün sdc olabilir. UUID ise filesystem’e özgüdür ve değişmez. Bu yüzden fstab’da daima UUID kullanın.

/etc/fstab dosyasına şuna benzer bir satır eklersiniz:

UUID=aaaa-bbbb /mnt/data ext4 defaults 0 2

Ve şimdi gelelim bu yazıdaki en önemli cümleye fstab’a satır ekledikten sonra reboot atmadan önce mutlaka sudo mount -a çalıştırın.

Bu komut fstab’daki tüm tanımları test eder. Eğer bir yazım hatası, yanlış UUID veya yanlış filesystem tipi varsa, hatayı güvenli bir ortamda görürsünüz. Bunu atlarsanız ve fstab’da hata varsa, sistem bir sonraki açılışta boot edemeyebilir ve kendinizi kurtarma moduyla uğraşırken bulabilirsiniz.

Kritik olmayan disklerde nofail seçeneğini eklemek de iyi bir güvenlik önlemidir. Böylece disk bir sebepten hazır değilse sistem yine de açılır.

Disk Doldu

Şimdi en sık yaşanan senaryoya, “disk dolu” alarmına geri dönelim. df -h çıktınızda kök dizinin %98 dolu olduğunu görüyorsunuz. Panik yapmadan, sistematik şekilde ilerleyelim.

İlk soru: hangi dizin bu kadar yer kaplıyor?

Cevabı du komutu verir:

sudo du -h --max-depth=1 / | sort -hr | head -20

Bu komut kök dizindeki her klasörün boyutunu çıkarır ve büyükten küçüğe sıralar.

Genellikle suçlu /var çıkar çünkü loglar orada birikir. Bir adım derine inip sudo du -h --max-depth=1 /var çalıştırdığınızda büyük ihtimalle /var/log dizinini şişmiş halde bulursunuz.

Tek tek büyük dosyaları aramak isterseniz find ile belirli boyutun üzerindeki dosyaları listeleyebilirsiniz. Ancak bazen daha sinsi bir durumla karşılaşırsınız disk dolu görünür ama hiçbir büyük dosya bulamazsınız. Bu noktada df -i komutunu çalıştırın.

Eğer IUse% değeri %100‘e yakınsa, sorun disk alanı değil inode tükenmesidir. Yani diskte yer var ama sistem yeni dosya kaydını tutacak inode’u kalmamış. Bu genellikle aşırı sayıda küçük dosya biriken sistemlerde olur ve farkında olmayan bir yöneticiyi saatlerce uğraştırabilir.

LVM: Disk Yönetiminde Esneklik

Buraya kadar anlattığım klasik yapının büyük bir dezavantajı var bir partition’ı sonradan büyütmek zor, hatta çoğu zaman imkânsızdır. İşte LVM (Logical Volume Manager) tam bu sorunu çözer.

LVM disk yönetimine bir soyutlama katmanı ekler.

Klasik zincir Disk → Partition → Filesystem iken, LVM ile zincir şöyle uzar:

Disk/Partition -> Physical Volume -> Volume Group -> Logical Volume -> Filesystem -> Mount

Üç kavramı tanımak yeterli.

  • Physical Volume (PV) LVM havuzuna dahil ettiğiniz fiziksel disk veya partition’dır.
  • Volume Group (VG), bir veya birden fazla PV’nin birleşiminden oluşan büyük bir depolama havuzudur; bunu içine disk attığınız bir kova gibi düşünün.
  • Logical Volume (LV) ise bu kovadan kestiğiniz üzerinde filesystem kurup mount edeceğiniz mantıksal disk parçasıdır.

Bu yapının güzelliği şu VG havuzunda boş alan olduğu sürece, bir LV’yi istediğiniz zaman, çoğu durumda sistemi durdurmadan büyütebilirsiniz. Kurulum sırası mantıkla aynıdır önce pvcreate ile partition’ı PV yaparsınız, vgcreate ile bir volume group oluşturursunuz, lvcreate ile o gruptan bir logical volume kesersiniz, ardından bu LV’ye normal bir partition gibi filesystem kurup mount edersiniz.

Çoğu dağıtımda lvm2 paketinin kurulu olması gerektiğini de unutmayın.

Gerçek Senaryo: LVM ile Disk Genişletme

LVM’in gerçek değeri alan dolduğunda ortaya çıkar.

Senaryo şöyle: /appdata dizininiz bir LVM logical volume üzerinde çalışıyor alan dolmak üzere, ama neyse ki volume group havuzunda hâlâ boş yer var.

Genişletme iki adımlı bir iştir ve bu ayrımı anlamak önemlidir. Önce logical volume’ü büyütürsünüz;

sudo lvextend -L +5G /dev/vg_data/lv_appdata

Havuzdaki tüm boş alanı vermek isterseniz -l +100%FREE ifadesini kullanırsınız.

Ama burada durmayın. LV’yi büyüttünüz, fakat üzerindeki filesystem hâlâ eski boyutunda. İçindeki konteyneri büyüttünüz ama filesystem bunu henüz bilmiyor.

İkinci adımda filesystem’i de büyütmeniz gerekir ext4 için resize2fs, XFS için xfs_growfs komutunu kullanırsınız.

Bu iki adımı tek seferde halletmenin pratik bir yolu da var lvextend komutuna -r parametresini eklerseniz, hem LV’yi hem de üzerindeki filesystem’i birlikte büyütür.

İşlem bittikten sonra df -h /appdata ile yeni boyutu doğrulamayı ihmal etmeyin.

Swap: Son Güvenlik Ağı

Swap, RAM yetersiz kaldığında diskin bir bölümünün geçici bellek gibi kullanılmasını sağlar. Hemen netleştirelim swap, RAM’in yerini tutmaz disk RAM’den kat kat yavaştır. Ama sistem belleği tamamen tükendiğinde swap devreye girerek tam bir çökmeyi önlemeye yardımcı olabilir. Bir nevi son güvenlik ağıdır.

Mevcut durumu swapon --show ve free -h ile görebilirsiniz.

Yeni bir swap alanı oluşturmanın en pratik yolu bir swap dosyası kullanmaktır fallocate ile belirli boyutta bir dosya ayırır izinlerini kısıtlar, mkswap ile swap olarak biçimlendirir ve swapon ile aktif edersiniz.

Tıpkı disk mount’ları gibi bu da geçicidir kalıcı olması için /etc/fstab dosyasına bir satır eklemeniz gerekir.

Disk Sağlığı ve Performans

Bir diskin ne zaman arızalanacağını önceden tahmin edebilmek paha biçilmezdir. Modern diskler SMART adı verilen bir kendi kendini izleme sistemi taşır. smartmontools paketini kurduktan sonra sudo smartctl -H /dev/sda ile diskin genel sağlık durumunu hızlıca öğrenebilir, -a parametresiyle tüm detayları görebilirsiniz. Diskin verdiği uyarı sinyallerini düzenli kontrol etmek bir arızayı veri kaybına dönüşmeden yakalama şansı verir.

Performans testi için fio aracı endüstri standardıdır rastgele okuma/yazma senaryolarını gerçekçi şekilde simüle eder.

dd ile de basit yazma testleri yapabilirsiniz ancak çok dikkatli olun dd komutunda of= parametresini yanlış bir diske yönlendirmek o diskin üzerine veri yazıp sistemi geri dönülmez şekilde bozabilir.

Sahadan Hikâyeler: Tipik Problemler

Teori burada bitiyor gerçek hayatta sizi bekleyen birkaç klasik problemle bitirelim.

“Sildim ama disk alanı geri gelmedi.” Bir uygulama dev bir log dosyası yazmış siz dosyayı sildiniz ama df -h hâlâ aynı dolu rakamı gösteriyor.

Sebep şu: dosyayı silseniz de eğer bir process onu hâlâ açık tutuyorsa alan serbest kalmaz. sudo lsof | grep deleted komutu bu hayalet dosyaları ortaya çıkarır.

Çözüm genellikle ilgili process’i yeniden başlatmaktır ancak o zaman alan iade edilir.

“Yeni disk eklendi ama Linux görmüyor.” Özellikle sanal makinelerde disk ekledikten sonra sistemin onu otomatik tanımaması sık görülür. dmesg | tail ile bir ipucu arayabilir SCSI host’larını yeniden taratarak diski sisteme tanıtabilirsiniz.

/var/log kontrolden çıktı.” systemd kullanan sistemlerde journal logları zamanla şişer.

journalctl --disk-usage ile ne kadar yer kapladığını görür,

sudo journalctl --vacuum-time=7d ile logları son 7 güne ya da --vacuum-size=1G ile belirli bir boyuta indirebilirsiniz.

Linux’ta disk yönetimi ilk bakışta korkutucu görünen ama mantığı kavrandığında oldukça öngörülebilir bir alandır. Her şey o basit zincire dayanır; disk, partition, filesystem, mount. Karşınıza çıkan neredeyse her sorun bu zincirin bir halkasındaki eksiklikten ya da yanlış anlaşılmadan doğar.

İyi bir sistem yöneticisini ayıran şey komutları ezbere bilmesi değil bir işlemden önce durup “bu komut sistemde tam olarak neyi değiştirecek?” diye sormasıdır. Bu alışkanlığı edinin işlemlerinizi her zaman önce bir test ortamında deneyin ve /etc/fstab gibi kritik dosyalara dokunduktan sonra mount -a testini asla atlamayın. Disk yönetiminde temkinli olmak korkaklık değil profesyonelliktir.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *