Buyukweb
Linux'ta Disk ve Dosya Sistemi Yönetimi: fdisk, mount ve df Komutları

Linux'ta Disk ve Dosya Sistemi Yönetimi: fdisk, mount ve df Komutları

df, du, lsblk, mount, fstab, LVM extend, swap, NFS, SMART — sunucuda disk dolu anında ne yapacağınız, kalıcı mount, LVM ile büyütme ve günlük disk yönetimi pratikleri.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü27 dakika okuma

Linux'ta Disk ve Dosya Sistemi Yönetimi: fdisk, mount ve df Komutları

Linux sunucu yönetiminde sabah 03:14'te telefonunuzu uyandıran alarm çoğunlukla iki cümlelidir: "Disk %95 dolu" veya "MySQL: No space left on device". O anda bilmeniz gereken ilk şey fdisk çıktısının her satırı değildir; hangi komutla 30 saniyede sorunu daraltacağınızdır: df -h mı, df -i mi, du -sh /var/* mu, yoksa journalctl --vacuum-size mı. Bu rehber, Linux disk operasyonunu günlük iş gözünden işliyor: disk durumu hızlı tanı, doluluk acil müdahale 10 adım, yeni disk ekleme prosedürü, /etc/fstab anatomisi, LVM ile online büyütme, swap yönetimi, NFS/iSCSI mount, SMART sağlık kontrolü ve cron temizlik script'leri.

Buyukweb perspektifi: VDS sunucu paketlerimizde NVMe SSD ve root erişimi vardır; bu rehberdeki komutların tamamı KVM tam virtualizasyon altyapısında çalışır. Bursa Tier 3 veri merkezinde donanım RAID datacenter seviyesinde kurulu olduğu için müşteri tarafında ek RAID konfigürasyonu zorunlu değildir. cPanel paylaşımlı paketler'de root yoktur; bunun yerine cPanel "Disk Usage" arayüzü ve File Manager üzerinden disk tüketimini görebilir, eski yedek/log dosyalarını silebilirsiniz. Hat: 0850 302 60 70.

Disk anatomisi (MBR/GPT, ext4/xfs/btrfs detay teorisi, I/O scheduler iç işleyiş) için ayrı Linux Disk Yapılandırması rehberimizi okuyabilirsiniz. Bu yazı CRUD/operasyon odaklı tamamlayıcıdır.

Disk Durumu Hızlı Tanı: İlk 30 Saniyede Ne Bakacaksınız?

Bir disk alarmı geldiğinde ya da kurulum öncesi durumu görmek için bu komutları sırayla çalıştırmanız yeter:

# 1) Mount edilmiş tüm dosya sistemleri + doluluk yüzdesi (insan-okunabilir)
df -h

# 2) Dosya sistemi tipi de görünsün (ext4 mi xfs mi tmpfs mi?)
df -hT

# 3) İnode kullanımı — çok dosya var ama disk boş gibi görünüyor?
df -i

# 4) Belirli mount point'i hedefle
df -h /var

# 5) Hangi dizin disk yiyor? Sıralı liste
du -sh /var/*  | sort -h
du -sh /home/* | sort -h

# 6) En büyük 10 dizin (genel arama)
du -h / 2>/dev/null | sort -h | tail -n 10

# 7) Sparse vs gerçek boyut (VM image, sparse log)
du -sh --apparent-size /var/log/journal

# 8) Tüm blok aygıtlar + dosya sistemi etiketleri
lsblk -f

# 9) UUID + LABEL + TYPE (fstab yazarken kritik)
blkid

# 10) Mount tree görsel (kim hangi opsiyonlarla bağlı?)
findmnt

# 11) Belirli mount point'in detayı
findmnt /var

# 12) /proc/mounts ham çıktı (script'lerde parse için)
cat /proc/mounts

df -h Okuma Rehberi

Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           395M  1.2M  394M   1% /run
/dev/vda1        49G   35G   12G  75% /
/dev/vdb1       100G   88G   12G  88% /var/lib/mysql
tmpfs           1.9G     0  1.9G   0% /dev/shm

Bu çıktıdan birkaç şey öğrenirsiniz:

  • Root (/) %75 dolu — alarm değil, takipte tutulacak
  • /var/lib/mysql %88 dolu — kritik, eski binlog veya tablo şişmesi olabilir
  • tmpfs RAM'de tutulan geçici alan (gerçek disk değil)

df -i ile İnode Tuzağı

İnode, dosya sistemi metadata kaydıdır. Her dosya 1 inode tüketir. Eğer milyonlarca minik dosya (PHP session, kuyruk dosyası, cache fragmenti) varsa disk boş görünür ama yeni dosya yazılamaz:

Filesystem      Inodes  IUsed    IFree IUse% Mounted on
/dev/vda1      3276800 3276720       80  100% /

# touch test → "No space left on device" (gerçek alan boş ama inode dolu)

Bu durumun yaygın sebepleri:

  • PHP session dosyaları (/var/lib/php/sessions) — temizlenmemiş 1.5M dosya
  • Mail queue (/var/spool/mqueue, /var/spool/postfix)
  • Web cache (wp-content/cache, sf cache, vendor cache)
  • Eski cron çıktıları, log fragmentleri

İnodeleri çoğaltma seçenekleri kısıtlıdır (ext4 için tipik olarak yeniden formatlama gerekir; xfs'te dynamic inode allocation vardır). Çözüm temizliktir, fdisk değil.

du Pratik Varyantları

# Tek satırda tek dizin toplam
du -sh /var/log

# Alt dizinler için ayrı toplam
du -sh /var/log/*  | sort -h

# En büyük 20 dosya genel arama
find / -type f -size +100M 2>/dev/null \
  | xargs du -h 2>/dev/null \
  | sort -h | tail -n 20

# Belirli yaşa göre eski + büyük dosya
find /var/log -type f -mtime +30 -size +50M -printf '%s %p\n' \
  | sort -n | tail -n 20

# Sembolik linkleri takip etme (varsayılan davranış)
du -sh --exclude="*.gz" /var/log

ncdu — Interaktif TUI

Sıralı arama yerine interaktif görsel keşif için:

# Kurulum
apt install ncdu          # Debian/Ubuntu
dnf install ncdu          # RHEL/Rocky/AlmaLinux

# Kullanım
ncdu /var

# Klavye:
#   ok tuşları   — gez
#   d            — sil (dikkat, geri alınamaz)
#   r            — yenile
#   q            — çık

Sysadmin'in olmazsa olmaz araçlarındandır; uzak SSH üzerinden bile akıcı çalışır.

Disk Dolu — Acil Müdahale 10 Adımlı Liste

Üretim sunucunuzda df -h %95+ gösteriyor. Sırayla:

Adım 1 — En Büyük Dosyaları Bul

# Tüm sistemde 100MB+ dosyalar
find / -xdev -type f -size +100M 2>/dev/null | xargs -I{} du -h "{}" | sort -h

# Sadece bir mount point'te (xdev mount sınırını aşmaz)
find /var -xdev -type f -size +50M -printf '%s\t%p\n' | sort -rn | head -20

-xdev önemlidir: /proc, /sys, /run gibi virtual filesystemleri ve diğer mount'ları aşmaz. Hızlı + güvenli.

Adım 2 — systemd-journald Log Temizliği

systemd kullanan dağıtımlarda (Ubuntu 18+, Debian 10+, RHEL 7+, AlmaLinux 8+, Rocky 8+) journal'lar GB'lar tutabilir:

# Disk kullanımı
journalctl --disk-usage

# 7 günden eski logları temizle
journalctl --vacuum-time=7d

# 500 MB üstünü temizle
journalctl --vacuum-size=500M

# Kalıcı sınır — /etc/systemd/journald.conf
# [Journal]
# SystemMaxUse=500M
# SystemMaxFileSize=50M
# Sonra: systemctl restart systemd-journald

Adım 3 — /var/log Rotation Kontrolü

logrotate sağlıklı çalışıyor mu?

# Logrotate test (dry-run)
logrotate -d /etc/logrotate.conf

# Zorla çalıştır (compress + rotate)
logrotate -f /etc/logrotate.conf

# Eski .gz log'ları temizle
find /var/log -name "*.gz" -mtime +30 -delete
find /var/log -name "*.[0-9]"  -mtime +30 -delete

/etc/logrotate.d/ altındaki her servis dosyası kendi rotation kuralını tanımlar. nginx, apache, mysql tipik şüphelilerdir.

Adım 4 — Docker Temizliği

Docker kullanıyorsanız "dangling image" ve eski container'lar disk yer:

# Disk kullanım özeti
docker system df

# Detaylı
docker system df -v

# Tüm dangling image + durmuş container + kullanılmayan network sil
docker system prune -af

# Volume'ları da temizle (dikkat — data kaybı olabilir)
docker volume prune -f

# Sadece build cache
docker builder prune -af

docker system prune üretim sunucusunda mantıklı; düzenli (haftalık) cron ile otomatikleştirin.

Adım 5 — Paket Yöneticisi Cache

# Debian/Ubuntu
apt clean              # /var/cache/apt/archives/*.deb sil
apt autoclean          # sadece eski paketler
apt autoremove --purge # bağımlı kalmayan paketler

# RHEL/Rocky/AlmaLinux
dnf clean all
dnf autoremove

# yum (eski)
yum clean all

Adım 6 — Dev Araç Cache'leri

Geliştirme yapılan sunucularda:

# npm
npm cache clean --force      # ~/.npm

# yarn
yarn cache clean

# pip
pip cache purge              # ~/.cache/pip

# composer
composer clear-cache         # ~/.cache/composer

# go
go clean -modcache           # ~/go/pkg/mod

Adım 7 — /tmp Temizliği

systemd kullanıyorsanız systemd-tmpfiles otomatik temizler (/etc/tmpfiles.d/tmp.conf ayarı):

# Manuel temizlik (10 günden eski)
systemd-tmpfiles --clean

# Elle ve dikkatli
find /tmp -type f -atime +10 -delete 2>/dev/null
find /var/tmp -type f -atime +30 -delete 2>/dev/null

Adım 8 — Core Dump

Çökmüş process'ler core dump üretebilir:

coredumpctl list                   # listele
coredumpctl info <pid>             # detay
coredumpctl delete                 # hepsini sil

# Veya elle
find / -name "core" -size +10M -delete 2>/dev/null
find / -name "core.*" -size +10M -delete 2>/dev/null

Kalıcı çözüm: /etc/security/limits.conf içinde * hard core 0 ile core dump'ı kapatabilirsiniz.

Adım 9 — Eski Kernel Paketleri

Sürekli kernel güncelleyen bir sunucuda /boot doluluğu sık görülür:

# Aktif kernel
uname -r

# Yüklü tüm kernel paketleri
dpkg -l 'linux-image-*' | grep ^ii          # Debian/Ubuntu
rpm -qa | grep kernel-                       # RHEL/Rocky

# Eski kernel'leri sil — Debian/Ubuntu
apt autoremove --purge

# RHEL/Rocky — son 2 sürümü tut
dnf install dnf-utils
package-cleanup --oldkernels --count=2 -y

Adım 10 — Kullanıcı Dizinleri ve Cache

Multi-user sunucularda:

# Hangi kullanıcı en çok disk yiyor?
du -sh /home/* | sort -h

# Bir kullanıcının cache klasörleri
du -sh /home/uguro/.cache/*

# Browser thumbnail, recent files (desktop kullanım)
rm -rf ~/.cache/thumbnails/*
rm -rf ~/.local/share/Trash/*

Yeni Disk Ekleme: Standart Prosedür

Buyukweb VDS panelinden disk ekledikten sonra sunucu içinde adımlar:

1) Yeni Diski Tanı

# Yeni eklenmiş diski gör
lsblk

# Kernel mesajları (disk attach trace)
dmesg | tail -20

# Yeni cihaz tipik olarak /dev/vdb (KVM virtio) veya /dev/sdb (SATA)

2) Bölüm Tablosu Oluştur

GPT modern standart, MBR sadece 2 TB altı eski sistemler için:

# parted ile (önerilen — script'lenebilir)
parted /dev/vdb mklabel gpt
parted -a optimal /dev/vdb mkpart primary ext4 0% 100%

# veya fdisk ile interaktif
fdisk /dev/vdb
#   g  → yeni GPT tablosu
#   n  → yeni partition
#   w  → yaz ve çık

3) Dosya Sistemi Oluştur

# ext4 — genel amaçlı, en yaygın
mkfs.ext4 -L data /dev/vdb1

# xfs — büyük dosyalar, log/database (online büyütme destekli)
mkfs.xfs -L data /dev/vdb1

# btrfs — snapshot, subvolume ihtiyacı varsa
mkfs.btrfs -L data /dev/vdb1

-L label parametresi sonradan /etc/fstab yazarken işinize yarar.

4) Mount Et (Geçici, Test İçin)

mkdir -p /mnt/data
mount /dev/vdb1 /mnt/data

# Doğrula
df -hT | grep data
findmnt /mnt/data

# Test yazma
echo "ok" > /mnt/data/test && cat /mnt/data/test && rm /mnt/data/test

5) Kalıcı Mount — /etc/fstab Entry

Asla device yolunu (/dev/vdb1) doğrudan kullanmayın. Disk eklenme sırası sunucu yeniden başlatıldığında değişebilir; o zaman fstab yanlış diski mount eder. UUID kullanın.

# UUID öğren
blkid /dev/vdb1
# /dev/vdb1: LABEL="data" UUID="b3a8e9f1-7c4d-..." TYPE="ext4"

# /etc/fstab'a satır ekle
echo 'UUID=b3a8e9f1-7c4d-... /mnt/data ext4 defaults,nofail,noatime 0 2' >> /etc/fstab

# Test (--all + --verbose)
mount -a -v

# Reboot etmeden önce mutlaka mount -a test edin; aksi halde sunucu boot etmeyebilir

/etc/fstab Anatomisi

Her satırın 6 alanı vardır:

# <device>   <mount point>   <fstype>   <options>            <dump>   <pass>
UUID=b3a8... /mnt/data       ext4       defaults,noatime     0        2
UUID=a1c4... /               ext4       errors=remount-ro    0        1
UUID=f8e2... /boot           ext4       defaults             0        2
UUID=f8e2... /boot/efi       vfat       umask=0077           0        1
LABEL=swap   none            swap       sw                   0        0
tmpfs        /tmp            tmpfs      defaults,nosuid      0        0

Alan 1 — Device

Tercih sırası: UUID > LABEL > /dev/disk/by-id/... > /dev/sdX

UUID, dosya sistemi formatlandığında atanır ve sabit kalır. LABEL kullanışlı ama formatlamada değişebilir.

Alan 2 — Mount Point

Mount edilecek dizin. Önceden var olmalı (mkdir -p /mnt/data).

Alan 3 — Filesystem Type

ext4, xfs, btrfs, vfat, swap, tmpfs, nfs, cifs (SMB), auto (kernel tahmin etsin).

Alan 4 — Options (Kritik)

Opsiyon Açıklama
defaults rw, suid, dev, exec, auto, nouser, async (standart)
nofail Disk yoksa boot durmaz (eklenmiş disk için önemli)
noatime Dosya okunduğunda atime metadata güncellemez (NVMe için hızlı)
nodiratime Dizin okumada atime yazmaz (noatime alt-küme, modern kernel implicit)
relatime atime sadece mtime/ctime'dan eskiyse güncelle (modern varsayılan)
discard TRIM otomatik (NVMe/SSD için fstrim yerine; batch fstrim genelde tercih)
nosuid setuid biti devre dışı (güvenlik — /home mount için iyi)
nodev device file'ları onurlama (/home, /tmp için iyi)
noexec binary çalıştırılamaz (/tmp, /var/tmp için sıkı güvenlik)
ro salt okunur
x-systemd.automount systemd lazy mount (NFS için kullanışlı)

NVMe için pratik öneri:

UUID=... /var/lib/mysql ext4 defaults,noatime,nodiratime 0 2

discard opsiyonu her dosya silmede TRIM gönderir; bu modern NVMe'lerde gereksiz CPU iş yükü oluşturabilir. Yerine haftalık fstrim:

# Manuel
fstrim -av

# Otomatik (çoğu modern dağıtımda hazır)
systemctl enable --now fstrim.timer
systemctl status fstrim.timer

Alan 5 — Dump

dump yedekleme aracı için flag. Modern sunucuda her zaman 0 (kullanılmıyor).

Alan 6 — Pass

fsck kontrol sırası boot sırasında:

  • 0 — kontrol etme
  • 1 — root (/)
  • 2 — diğer dosya sistemleri (paralel kontrol)

Dosya Sistemi Karşılaştırma: Günlük Yönetim Komutları

Üç ana dosya sistemi için operasyon komutları:

ext4 — Reserved Block, Resize, Repair

# Dosya sistemi özelliklerini gör
tune2fs -l /dev/vdb1

# Reserved blocks — root için ayrılan disk yüzdesi (varsayılan 5%)
# 1 TB'lık veri diskinde 50 GB heba; data partition'da düşürün
tune2fs -m 1 /dev/vdb1            # %1'e indir

# Etiket değiştir
tune2fs -L yenilabel /dev/vdb1

# Journal modu (data=ordered varsayılan, data=journal en güvenli)
tune2fs -o journal_data_ordered /dev/vdb1

# Fsck (offline — mount'lu olmaz!)
umount /dev/vdb1
e2fsck -f /dev/vdb1

# Online resize2fs (LVM ile büyüttükten sonra)
resize2fs /dev/vdb1               # tüm boş alanı kullan
resize2fs /dev/vdb1 200G          # belirli boyuta

xfs — Online Büyütme, Repair, Quota

# Bilgi
xfs_info /mnt/data

# Online büyütme — mount'lu olmalı
xfs_growfs /mnt/data

# Offline repair
umount /mnt/data
xfs_repair /dev/vdb1

# Quota aktif et (mount options)
# fstab: ... xfs uquota,gquota 0 2
xfs_quota -x -c 'report -uh' /mnt/data

Önemli: xfs shrink yapılamaz. Küçültmek için backup + format + restore yolu gerekir. Bu yüzden büyüme planı kesin olduğunda xfs mantıklıdır.

btrfs — Subvolume, Snapshot, Balance

# Disk kullanımı (gerçek + ayrılmış)
btrfs filesystem usage /mnt/data

# Subvolume oluştur (LVM LV'sine alternatif)
btrfs subvolume create /mnt/data/www
btrfs subvolume list /mnt/data

# Snapshot (read-only — yedek için)
btrfs subvolume snapshot -r /mnt/data/www /mnt/data/snapshots/www-2026-05-11

# Snapshot'ı geri yükle
btrfs subvolume delete /mnt/data/www
btrfs subvolume snapshot /mnt/data/snapshots/www-2026-05-11 /mnt/data/www

# Balance (disk yeniden dağıt — fragmantasyon azalt)
btrfs balance start /mnt/data
btrfs balance status /mnt/data

# Online büyüt
btrfs filesystem resize max /mnt/data

btrfs en gelişmiş özellik setine sahip ama olgunluğu workload'a göre değişir; database (MySQL, PostgreSQL) altında ext4/xfs daha klasik tercih.

LVM ile Günlük Operasyonlar: Genişletme, Snapshot, Yönetim

LVM (Logical Volume Manager), birden fazla fiziksel diski tek bir esnek havuz olarak yönetmenizi sağlar. Buyukweb VDS müşterileri için online disk büyütme'nin en pratik yolu LVM'dir.

LVM Üç Katman

PV (Physical Volume)  — fiziksel disk/partition (/dev/vdb, /dev/vdb1)
        ↓
VG (Volume Group)     — bir veya birden fazla PV'nin havuzu (vg-data)
        ↓
LV (Logical Volume)   — VG'den parça (lv-www, lv-mysql, lv-backup)
        ↓
Filesystem            — ext4, xfs, btrfs (LV üzerine)

Standart LVM Kurulumu (Yeni Disk)

# Adım 1 — PV oluştur
pvcreate /dev/vdb

# Adım 2 — VG oluştur
vgcreate vg-data /dev/vdb

# Adım 3 — LV oluştur (50 GB)
lvcreate -L 50G -n lv-www vg-data

# Adım 4 — Filesystem
mkfs.ext4 /dev/vg-data/lv-www

# Adım 5 — Mount
mkdir -p /var/www
mount /dev/vg-data/lv-www /var/www

# Adım 6 — fstab kalıcı entry
echo '/dev/mapper/vg--data-lv--www /var/www ext4 defaults,noatime 0 2' >> /etc/fstab

# Doğrulama komutları
pvs   # PV listesi (kısa)
vgs   # VG listesi
lvs   # LV listesi
pvdisplay
vgdisplay
lvdisplay

Online LV Büyütme — Veri Kaybı YOK

VG'de boş alan varsa (vgs çıktısında VFree > 0):

# 20 GB ekle
lvextend -L +20G /dev/vg-data/lv-www

# Veya tüm boş alanı kullan
lvextend -l +100%FREE /dev/vg-data/lv-www

# Filesystem'i de büyüt — ext4
resize2fs /dev/vg-data/lv-www

# xfs için
xfs_growfs /var/www

# Tek komutla LV + FS birlikte (modern lvm2)
lvextend -L +20G -r /dev/vg-data/lv-www

-r flag'i LVM'in dosya sistemini de otomatik büyütmesini sağlar (ext4/xfs/btrfs destekli). Veri online, mount'lu, çalışan servis var — kesinti sıfır.

VG'ye Yeni Disk Ekleme

VG dolduğunda yeni disk eklemek hızlı:

# Yeni diski ekledikten sonra (Buyukweb VDS panel)
lsblk                              # /dev/vdc görünmeli

# PV yap
pvcreate /dev/vdc

# Mevcut VG'ye ekle
vgextend vg-data /dev/vdc

# Doğrula
vgs vg-data

# Şimdi LV'leri istediğiniz kadar büyütebilirsiniz
lvextend -L +100G -r /dev/vg-data/lv-mysql

LVM Snapshot — Tutarlı Yedek İçin Altın Anahtar

Üretim sunucusunda MySQL/PostgreSQL backup alırken tutarlı bir nokta lazım. LVM snapshot bu noktayı saniyeler içinde yakalar:

# 5 GB snapshot oluştur (delta tutar — gerçek boyut delta kadar)
lvcreate -L 5G -s -n snap-mysql /dev/vg-data/lv-mysql

# Snapshot'ı geçici bir noktada mount et
mkdir -p /mnt/snap-mysql
mount -o ro,nouuid /dev/vg-data/snap-mysql /mnt/snap-mysql

# Tutarlı backup al
rsync -a /mnt/snap-mysql/ /backups/mysql-2026-05-11/

# Snapshot'ı kaldır (kritik — büyüdükçe ana LV de yavaşlar)
umount /mnt/snap-mysql
lvremove -f /dev/vg-data/snap-mysql

Önemli: Snapshot delta tabanlıdır — orijinal LV'de değişen blok kadar yer tutar. Snapshot'ı uzun süre tutmayın; backup tamam olunca silin. Snapshot dolarsa invalid olur (kullanılamaz).

LV Küçültme — Tehlikeli, Dikkat

XFS'te shrink yapılamaz. ext4'te şudur:

# 1) Mount'tan ayır (offline işlem)
umount /mnt/data

# 2) Fsck zorunlu (önce kontrol)
e2fsck -f /dev/vg-data/lv-data

# 3) Filesystem küçült
resize2fs /dev/vg-data/lv-data 80G

# 4) LV küçült (filesystem'den biraz daha küçük tehlike — eşit yap)
lvreduce -L 80G /dev/vg-data/lv-data

# 5) Tekrar mount
mount /mnt/data

Risk: lvreduce, filesystem'den daha küçük olursa veri kaybı kesin. Mümkünse shrink yerine yeni LV oluştur + rsync ile taşı + eski sil yolunu tercih edin.

Swap Yönetimi

Swap (takas alanı), RAM dolduğunda kullanılan disk üzeri sanal bellektir. Veritabanı sunucusunda sınırlı, web sunucusunda makul tutulur.

Mevcut Swap Görüntüleme

# Swap durumu
swapon --show
swapon -s

# RAM + swap özet
free -h

# /proc/meminfo detayı
grep -E "MemTotal|SwapTotal|SwapFree" /proc/meminfo

Swap Dosyası vs Swap Partisyonu

Modern sunucularda swap dosyası tercih edilir; esneklik (boyut değiştirme kolay), partition tablosu temizdir.

# 2 GB swap dosyası oluştur
fallocate -l 2G /swapfile
# veya (yedek yol, fallocate desteklemeyen FS)
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

# İzinler kritik
chmod 600 /swapfile

# Swap olarak işaretle
mkswap /swapfile

# Aktif et
swapon /swapfile

# Doğrula
swapon --show
free -h

# Kalıcı yap
echo '/swapfile none swap sw 0 0' >> /etc/fstab

Swappiness — Ne Kadar Agresif?

vm.swappiness (0-100) çekirdeğin swap'ı ne kadar agresif kullanacağını belirler:

  • 0-10 — neredeyse hiç swap yapma, RAM doluncaya kadar bekle (database sunucusu)
  • 10-30 — web sunucusu için ideal (modern dağıtım için makul)
  • 60 — masaüstü/genel amaçlı varsayılan
  • 100 — agresif swap (artık nadiren mantıklı)
# Anlık değer
sysctl vm.swappiness

# Geçici değişiklik
sysctl -w vm.swappiness=10

# Kalıcı (reboot sonrası da)
echo 'vm.swappiness = 10' >> /etc/sysctl.d/99-swap.conf
sysctl -p /etc/sysctl.d/99-swap.conf

Önerilen başlangıç değerleri:

  • MySQL/PostgreSQL dedicated: 10
  • WordPress/Laravel web: 20-30
  • Karma uygulama sunucusu: 30-40

Swap'ı Devre Dışı / Yeniden Boyutlandırma

# Devre dışı bırak
swapoff /swapfile

# Yeniden boyutla (sil + yeni)
rm /swapfile
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

NFS Mount — Ağ Üzerinden Disk

NFS (Network File System), uzak Linux sunucudan dosya sistemini ağ üzerinden mount etmenizi sağlar. Buyukweb müşterilerinde tipik kullanım: backup sunucusu, ortak medya/upload depolama (multisite WordPress).

NFS Server (Hedef)

# Paket
apt install nfs-kernel-server         # Debian/Ubuntu
dnf install nfs-utils                 # RHEL/Rocky

# Paylaşılacak dizini hazırla
mkdir -p /srv/nfs-backups
chown nobody:nogroup /srv/nfs-backups

# /etc/exports
# /srv/nfs-backups  10.0.0.0/24(rw,sync,no_subtree_check,no_root_squash)

# Aktif et
exportfs -ra
systemctl enable --now nfs-server

NFS Client (Kaynak)

# Paket
apt install nfs-common                # Debian/Ubuntu
dnf install nfs-utils                 # RHEL/Rocky

# Manuel mount
mkdir -p /mnt/backups
mount -t nfs 10.0.0.5:/srv/nfs-backups /mnt/backups

# Kalıcı fstab entry
echo '10.0.0.5:/srv/nfs-backups /mnt/backups nfs defaults,_netdev,nofail,x-systemd.automount 0 0' >> /etc/fstab

_netdev ve x-systemd.automount — ağ olmadan boot bekletmez; lazy mount ilk erişimde gerçekleşir.

NFSv4 vs SMB

Boyut NFSv4 SMB/CIFS
Yerel ekosistem Linux/UNIX Windows ağırlıklı
Performans (Linux) Daha hızlı Orta
Kerberos güvenlik Yerel destek Var
ACL detay POSIX + NFSv4 ACL Windows ACL
Buyukweb senaryosu İki Linux VDS arası Linux ↔ Windows entegrasyon

İki Linux sunucu arasında NFSv4 standarttır.

autofs — On-Demand Mount

Sürekli mount tutmak yerine, dizine erişildiğinde otomatik mount, idle olunca unmount:

apt install autofs

# /etc/auto.master
# /mnt/auto  /etc/auto.nfs --timeout=60

# /etc/auto.nfs
# backups  -fstype=nfs,rw,soft  10.0.0.5:/srv/nfs-backups

systemctl restart autofs

# Test
ls /mnt/auto/backups

iSCSI — Block-Level Ağ Disk (Kavramsal)

NFS dosya seviyesi paylaşırken, iSCSI block seviye paylaşır — uzak disk yerel disk gibi görünür, üzerine LVM/dosya sistemi kurulur.

# Initiator (client)
apt install open-iscsi

# Hedef tarama
iscsiadm -m discovery -t st -p 10.0.0.10

# Bağlan
iscsiadm -m node --login

# Yeni disk olarak görür
lsblk                                  # /dev/sdc gibi yeni cihaz

# Üzerine LVM/FS kurabilirsiniz

Buyukweb ortamında iSCSI tipik kullanım nadirdir; çoğu senaryo doğrudan VDS'e ek disk eklemekle çözülür. SAN bütçeli kurumsal müşteri için uygun.

SMART — Disk Sağlık Takibi (Donanım)

SMART (Self-Monitoring, Analysis and Reporting Technology), diskin kendi raporladığı sağlık metriklerini verir.

# Kurulum
apt install smartmontools             # Debian/Ubuntu
dnf install smartmontools             # RHEL/Rocky

# Tüm detay (raw + decoded)
smartctl -a /dev/sda
smartctl -a /dev/nvme0n1              # NVMe için (farklı çıktı formatı)

# Kısa sağlık özeti (PASSED/FAILED)
smartctl -H /dev/sda

# Self-test başlat (short — birkaç dakika)
smartctl -t short /dev/sda

# Self-test sonucunu bekle, sonra
smartctl -l selftest /dev/sda

Kritik SMART Attribute'leri (SATA)

ID Adı Anlamı
5 Reallocated_Sector_Ct Kötü sektör sayısı (>0 alarm, hızla artarsa kritik)
187 Reported_Uncorrect Düzeltilemeyen okuma hatası
188 Command_Timeout Komut zaman aşımı (kontrolcü problemi)
197 Current_Pending_Sector Yeniden yazma bekleyen sektör
198 Offline_Uncorrectable Offline taramada düzeltilemeyen

Pratik kural: 5, 197, 198'in herhangi biri >0 ve artan ise diski değiştirin.

NVMe SMART

NVMe'de farklı attribute seti var:

smartctl -a /dev/nvme0n1

# Kritik alanlar:
#   Percentage Used        — wear seviyesi (0-100%)
#   Available Spare        — yedek hücre yüzdesi
#   Media and Data Errors  — okuma/yazma hata sayısı
#   Power On Hours         — toplam çalışma saati

Buyukweb gerçeği: VDS'lerimizde NVMe SSD kullanılır ve donanım sağlığı datacenter izleme sistemleriyle takip edilir. Müşteri tarafında smartctl çalışır — sanal disk altındaki fiziksel diskin durumunu hipervizör seviyesinde ekibimiz izler.

Otomatik Bildirim — smartd

# /etc/smartd.conf
# /dev/sda -a -m root@localhost -s (S/../.././02|L/../../6/03)

systemctl enable --now smartd

# Anlık e-posta için /usr/local/sbin/smartdnotify script yazılabilir

I/O Scheduler — NVMe ve SSD İçin Tuning

Linux 4.x+ multi-queue scheduler (mq-deadline, none, bfq, kyber) modeli kullanır:

# Mevcut scheduler
cat /sys/block/nvme0n1/queue/scheduler
# [none] mq-deadline kyber bfq

# Geçici değiştir
echo "mq-deadline" > /sys/block/nvme0n1/queue/scheduler

# Kalıcı — /etc/udev/rules.d/60-iosched.rules
# ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"

Pratik öneri:

  • NVMe — none (cihaz kendi sıralar, kernel araya girmesin)
  • SSD — mq-deadline veya none
  • HDD — mq-deadline veya bfq

Çoğu modern dağıtımda doğru varsayılan otomatik atanır.

Dosya Sistemi Şifreleme — LUKS / dm-crypt

KVKK uyumu, hassas veri (sağlık, finans), laptop çalınma riski olan ortamlarda disk şifreleme standart:

# LUKS başlat (cihaz wipe + şifreleme katmanı)
cryptsetup luksFormat /dev/vdb1

# Aç (mapper cihazı yaratır)
cryptsetup open /dev/vdb1 cryptdata

# Üzerine FS kur
mkfs.ext4 /dev/mapper/cryptdata

# Mount
mkdir -p /mnt/secure
mount /dev/mapper/cryptdata /mnt/secure

# Kapatma
umount /mnt/secure
cryptsetup close cryptdata

Boot sırasında otomatik açılması için /etc/crypttab + key file veya systemd-cryptenroll yapılandırması gerekir. Detay konfigürasyon ayrı bir rehber konusu.

eCryptfs alternatif — per-directory şifreleme, kullanıcı home klasörü için tipik (Ubuntu eski sürümlerde ~/.Private modeli).

Cron Temizlik Script'leri — Otomatik Disk Hijyeni

Disk doluluğu sorununu gerçekleşmeden önce önlemek için haftalık otomatik temizlik:

/etc/cron.weekly/disk-clean

#!/bin/bash
# Buyukweb VDS — haftalık disk temizlik
# /etc/cron.weekly/disk-clean (chmod 755)

set -euo pipefail

LOG=/var/log/disk-clean.log
exec >> "${LOG}" 2>&1
echo "=== $(date) disk-clean baslangic ==="

# 1) Eski journal'lar
journalctl --vacuum-time=14d || true

# 2) Eski logrotate gz'leri
find /var/log -name "*.gz"  -mtime +60 -delete 2>/dev/null || true
find /var/log -name "*.[0-9]" -mtime +60 -delete 2>/dev/null || true

# 3) Apt cache
apt-get -y autoremove --purge >/dev/null 2>&1 || true
apt-get -y clean              >/dev/null 2>&1 || true

# 4) Docker (varsa)
if command -v docker >/dev/null; then
  docker system prune -af --filter "until=168h" >/dev/null 2>&1 || true
fi

# 5) /tmp 14 gün
find /tmp     -type f -atime +14 -delete 2>/dev/null || true
find /var/tmp -type f -atime +30 -delete 2>/dev/null || true

# 6) Core dump
coredumpctl delete --all 2>/dev/null || true

# 7) Final df raporu
df -h
echo "=== $(date) disk-clean bitis ==="

MySQL Binlog Otomatik Rotasyon

# /etc/cron.weekly/mysql-binlog-rotate
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"

WordPress Upload Klasörü Ayrı LVM

Multisite WordPress için wp-content/uploads ayrı LV'ye konur:

# Yeni LV
lvcreate -L 100G -n lv-uploads vg-data
mkfs.ext4 /dev/vg-data/lv-uploads
mkdir -p /var/www/wp-uploads
mount /dev/vg-data/lv-uploads /var/www/wp-uploads

# Mevcut uploads taşı
rsync -a /var/www/html/wp-content/uploads/ /var/www/wp-uploads/
mv /var/www/html/wp-content/uploads /var/www/html/wp-content/uploads.old
ln -s /var/www/wp-uploads /var/www/html/wp-content/uploads

# fstab
echo '/dev/mapper/vg--data-lv--uploads /var/www/wp-uploads ext4 defaults,noatime 0 2' >> /etc/fstab

Upload klasörü bağımsız LV olduğunda online genişletilebilir (lvextend -L +50G -r), backup ve snapshot bağımsız yapılabilir.

Production Senaryolar — Sahadan Üç Vaka

Senaryo 1 — "MySQL diski doldu"

Belirti: ERROR 28 (HY000): No space left on device

Çözüm sırası:

# 1) Hangi mount
df -h /var/lib/mysql

# 2) /var/lib/mysql içinde en büyük tablo dosyaları
du -sh /var/lib/mysql/*  | sort -h | tail -20

# 3) Binlog rotasyonu
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY);"

# 4) Slow query log büyüdü mü?
ls -lh /var/log/mysql/*.log
truncate -s 0 /var/log/mysql/slow.log

# 5) InnoDB undo log
mysql -e "SHOW ENGINE INNODB STATUS\G" | grep -i undo

# 6) Eğer LVM üzerinde:
lvextend -L +50G -r /dev/vg-data/lv-mysql

Senaryo 2 — "Tek log dosyası 500 GB"

Belirti: /var/log/myapp.log tek dosya 500 GB, app silinmek istemiyor (FD açık).

# Dosyayı sıfırla (FD açık kalır, app yazmaya devam eder)
truncate -s 0 /var/log/myapp.log
# veya
: > /var/log/myapp.log

# YANLIŞ yol: rm /var/log/myapp.log → disk dolmaya devam eder
# (dosya kaldırılır ama process'in FD'si açık → kernel referans sayacı 0 değil → yer dönmez)
# İptal etmek için: app'i restart et veya
lsof /var/log/myapp.log
# açan PID'i bul, dosyayı recreate etmesini sağla

# Kalıcı çözüm — logrotate config
cat > /etc/logrotate.d/myapp <<EOF
/var/log/myapp.log {
  daily
  rotate 7
  compress
  delaycompress
  missingok
  notifempty
  copytruncate
}
EOF

copytruncate opsiyonu — app restart gerektirmeden rotation yapar (kopyala + truncate).

Senaryo 3 — "MySQL backup için tutarlı snapshot"

#!/bin/bash
# /usr/local/bin/mysql-snap-backup.sh

set -e
VG=vg-data
LV=lv-mysql
SNAP=snap-mysql-$(date +%Y%m%d-%H%M)
DEST=/backups/mysql-$(date +%Y%m%d-%H%M)

# 1) MySQL'i flush et + read lock (kısa süre)
mysql -e "FLUSH TABLES WITH READ LOCK; FLUSH LOGS;" &
MYSQLPID=$!
sleep 1

# 2) Snapshot oluştur (saniyeler içinde)
lvcreate -L 5G -s -n ${SNAP} /dev/${VG}/${LV}

# 3) Lock'u serbest bırak
kill ${MYSQLPID} 2>/dev/null || true
mysql -e "UNLOCK TABLES;" || true

# 4) Snapshot'tan rsync
mkdir -p /mnt/${SNAP} ${DEST}
mount -o ro,nouuid /dev/${VG}/${SNAP} /mnt/${SNAP}
rsync -a /mnt/${SNAP}/ ${DEST}/
umount /mnt/${SNAP}
rmdir /mnt/${SNAP}

# 5) Snapshot'ı sil
lvremove -f /dev/${VG}/${SNAP}

echo "Backup tamam: ${DEST}"

InnoDB için bu yeterli; MyISAM tabloları kullanıyorsanız FLUSH WITH READ LOCK süresi daha kritik. Modern setup'ta InnoDB tercih edilir, MyISAM sadece eski uygulamalarda.

RAID — Kavramsal Özet

Buyukweb VDS donanım altyapımızda donanım RAID datacenter seviyesinde kuruludur. Müşteri tarafında ek yazılım RAID gerekli değildir. Bilgi amaçlı:

mdadm (Yazılım RAID)

# RAID1 (mirror) iki disk
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

# RAID5 üç disk
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# RAID10 dört disk
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd{b,c,d,e}

# Sağlık
cat /proc/mdstat
mdadm --detail /dev/md0

# Disk değiştirme
mdadm --manage /dev/md0 --fail /dev/sdc
mdadm --manage /dev/md0 --remove /dev/sdc
# yeni disk takıldıktan sonra
mdadm --manage /dev/md0 --add /dev/sdc
RAID Disk Min Yedek Performans
0 (stripe) 2 YOK (data riski) En hızlı, tek disk arızası tam veri kaybı
1 (mirror) 2 %50 (n/2) Okuma hızlı, yazma normal
5 (parity) 3 %33-50 Okuma hızlı, yazma yavaş
10 (mirror+stripe) 4 %50 Hem hızlı hem dayanıklı

Web/uygulama sunucuları için RAID10, dosya sunucusu için RAID5/6 tipik.

Sık Sorulan Sorular (SSS)

"Diskim doldu, nereden başlayayım?"

Sıra: (1) df -h ile hangi mount dolu gör, (2) df -i ile inode mu dosya mı bak, (3) du -sh /var/* /home/* /tmp/* ile suçluyu daralt, (4) journalctl --vacuum-size=500M ve apt clean hızlı temizlik, (5) Docker varsa docker system prune -af, (6) find / -size +1G -xdev 2>/dev/null ile dev binlog/dump dosyaları. Tipik olarak 5 dakikada %10-20 yer açılır. Kalıcı çözüm: LVM ile genişletme + haftalık cron temizlik script'i.

"LVM kullanmıyorum, diski nasıl genişletirim?"

İki yol var. (1) Yeni disk + symlink/bind mount — VDS panelinden yeni disk ekleyin, /var/lib/mysql gibi büyüyen dizini yeni diske taşıyın (rsync -a → mv → symlink veya bind mount). (2) Mevcut diski büyüt + partition + FS resize — Buyukweb VDS panelinden mevcut diski büyütürsünüz; sunucu içinde growpart /dev/vda 1 (cloud-utils) ve sonra resize2fs /dev/vda1 veya xfs_growfs /. İkinci yol kesintisiz çalışırsa pratiktir; aksi takdirde yeni disk + LVM'e geçiş orta vade yatırım olur.

"noatime gerçekten hız artırır mı?"

Evet, kısmen. Her dosya okumasında atime metadata güncellemesi disk yazma demektir. NVMe'de etki ölçülebilir ama dramatik değildir; HDD'de daha belirgin. Modern Linux varsayılanı relatime (atime sadece mtime/ctime daha yeniyse güncellenir) zaten çoğu durumda yeterli optimize. noatime her durumda atime yazımını kapatır — read-heavy DB veya log sunucusunda 5-15% IO azalma beklenebilir. Veritabanı LV'lerinde noatime,nodiratime her zaman makul tercih.

"cPanel paylaşımlı diskimi nasıl arttırırım?"

cPanel paketlerinde root yetkisi olmadığı için fdisk/mount/lvextend komutları kullanılamaz. Disk kotanız paket planınızla sınırlıdır. İki seçenek: (1) Paket yükseltme — Buyukweb müşteri panelinden mevcut paketinizi daha yüksek diskli (örn. 5 GB → Limitsiz) paketle değiştirin; mail + web verisi otomatik taşınır. (2) VDS'e geçiş — disk sınırı ihtiyacınız aşıyorsa NVMe SSD'li VDS planlarımıza geçebilirsiniz; root erişim + LVM ile ileride genişletme esnekliği elinizde olur. Geçiş için 0850 302 60 70 destek hattımız üzerinden yardım alabilirsiniz.

"Snapshot ne kadar yer tutar?"

LVM snapshot deltadır — orijinal LV üzerinde snapshot alındıktan sonra değişen blok kadar yer tutar. Hareketsiz/sadece okunan veride çok küçük (MB'lar). Yoğun yazılan DB'de hızlı büyür. Snapshot size olarak ayırdığınız kadar yer ön ayrılır; o kadarı yazılırsa snapshot invalid olur. Pratik öneri: ana LV'nin %10-20'si kadar snapshot alanı, ve backup biter bitmez snapshot'ı silin.

"XFS shrink yapamıyor muyum, ne yapayım?"

Doğru — XFS shrink desteklemez. Üç seçenek: (1) Veriyi yeni bir küçük LV/disk'e rsync ile taşı, eski LV'yi sil, yeni LV'yi mount et. (2) ext4'e dönüştür — backup + format + restore (planlı bakım penceresi gerekir). (3) Yer ihtiyacı geçici ise XFS'i olduğu gibi bırak, başka LV küçült. XFS seçimi yapmadan önce büyüme planını netleştirmek bu yüzden kritik.

"Disk yedekli mi (RAID), kontrol nasıl?"

Buyukweb VDS altyapımızda donanım RAID datacenter seviyesinde kuruludur — müşteri içinde RAID görünmez (hipervizör sunduğu sanal disk altında çalışır). Yazılım RAID kullanıyorsanız cat /proc/mdstat ile durumu görürsünüz; mdadm --detail /dev/md0 daha ayrıntılı. SMART durumu için smartctl -a /dev/sda. Buyukweb destek hattından sunucunuzun fiziksel disk yedekliliği hakkında bilgi alabilirsiniz.

"swap dosyası mı, swap partisyonu mu daha iyi?"

Modern sunucularda swap dosyası tercih edilir — esneklik (boyut değiştirme tek komut), partisyon tablosu temiz, snapshot/backup kolay. Performans farkı modern kernel + NVMe'de ihmal edilebilir. Sadece hibernation ihtiyacı olan masaüstü/laptop'larda swap partition mantıklıdır (sunucuda hibernation nadiren kullanılır). 2-4 GB swap dosyası tipik sunucu için yeterlidir.

Sonuç ve Sonraki Adımlar

Linux disk yönetimi günlük olarak iki şeye odaklanır: mevcut alanı doğru tanımlamak (df, du, lsblk, findmnt) ve doluluk gelmeden müdahale etmek (cron temizlik script, LVM ile esnek büyütme, /etc/fstab doğru kalıcı mount, swap ve I/O scheduler tuning). Bu rehberdeki komutların hepsi Buyukweb VDS sunucu ortamında çalışır; root erişiminiz vardır ve KVM tam virtualizasyon altyapısı disk ekleme, LVM, snapshot dahil tüm operasyonları destekler.

Pratik özet:

  1. Günlük tanıdf -hT, df -i, du -sh /var/* /home/*, lsblk -f, findmnt
  2. Disk dolu acil 10 adım → en büyük dosya, journal vacuum, log rotate, Docker prune, apt clean, dev cache, /tmp, core dump, eski kernel, kullanıcı cache
  3. Yeni disk eklemeparted mklabel gpt + mkpartmkfs.ext4mount/etc/fstab UUID entry → mount -a test
  4. LVM operasyonupvcreate → vgcreate → lvcreate, online büyütme lvextend -L +X -r, snapshot ile tutarlı backup
  5. Swap → 2-4 GB swap dosyası, swappiness 10-30 web/30+ genel
  6. Mount opsiyonları → noatime, nofail, nosuid + nodev + noexec (güvenlik), x-systemd.automount (NFS)
  7. Disk sağlığısmartctl -a, smartd, NVMe wear seviyesi takibi
  8. Otomasyon/etc/cron.weekly/disk-clean haftalık temizlik script

ID/operasyon anatomisi (MBR/GPT bölüm tablo seçimi, dosya sistemi tasarımı detay, I/O scheduler iç işleyiş) için ayrı Linux Disk Yapılandırması rehberimize bakabilirsiniz.


İlgili Büyükweb Hizmetleri

Disk doluluk acil müdahalesi, LVM kurulum/genişletme, yeni disk ekleme veya migration için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz. Bursa Tier 3 veri merkezimizden NVMe SSD altyapı ve root erişimli VDS planları ile çalışıyoruz.

Linux & Komut Satırı İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#disk yönetimi#linux#komut satırı#terminal#sunucu yönetimi

Bu yazıyı paylaş