Linux’ta Disk Bölümlendirme: fdisk ve parted Kullanımı

Disk bölümlendirme, her sistem yöneticisinin er ya da geç karşılaşacağı temel görevlerden biridir. Yeni bir sunucu kuruyorsun, ek disk takıyorsun ya da mevcut bir diski yeniden düzenliyorsun; bu işlerin hepsinde doğru araçları bilmek hem zamandan tasarruf ettirir hem de felaketten kurtarır. Linux dünyasında iki araç bu işin merkezinde yer alır: fdisk ve parted. Bu yazıda her ikisini de gerçek senaryolar üzerinden, elleri kirletecek şekilde anlatacağım.

Disk Bölümlendirmeye Neden İhtiyaç Duyarız?

Teorik kısmı kısa tutayım çünkü blog okuyorsun, ders kitabı değil. Ama şunu bilmek gerekiyor: Bir diski doğrudan kullanmak yerine bölümlere ayırmak birkaç kritik avantaj sağlar.

  • İzolasyon: /var dolduğunda sistemi çökertemez çünkü kendi bölümünde yaşıyor
  • Farklı dosya sistemleri: Aynı diskte hem ext4 hem XFS kullanabilirsin
  • Yedekleme kolaylığı: Bölüm bazlı snapshot almak çok daha yönetilebilir
  • Performans optimizasyonu: Farklı I/O profillerine sahip uygulamaları ayrı bölümlere taşıyabilirsin
  • MBR/GPT uyumluluğu: Eski sistemlerde MBR, yenilerde GPT şarttır

Şimdi işin pratik kısmına geçelim.

Önce Sistemi Tanı: Mevcut Durumu Görme

Herhangi bir şey yapmadan önce mevcut disk durumunu anlamak şarttır. Yanlış diske yazdığın anda geri dönüş yoktur.

# Tüm blok cihazlarını listele
lsblk

# Daha detaylı çıktı için
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE,UUID

# Disk ve bölüm bilgilerini göster
fdisk -l

# Sadece belirli bir diski incele
fdisk -l /dev/sdb

# Disk kullanım durumunu göster
df -hT

lsblk çıktısı genellikle şuna benzer bir şey verir:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    4G  0 part [SWAP]
└─sda3   8:3    0   45G  0 part /
sdb      8:16   0  200G  0 disk

Burada sdbnin boş ve bölümsüz olduğunu görüyoruz. Bu diski bölümlendireceğiz.

fdisk: Klasik Ama Güçlü

fdisk yıllardır Linux sistemlerinde standart araç olarak kullanılıyor. 2TB altındaki diskler ve MBR partition table için ideal. 2TB üzerini GPT ile yönetmek gerekiyor ki orada parted veya gdisk devreye giriyor.

fdisk ile Yeni Bölüm Oluşturma

Senaryo: 200GB’lık /dev/sdb diskini üç bölüme ayıracağız. Birinci bölüm veritabanı için 100GB, ikincisi log dosyaları için 50GB, üçüncüsü yedekleme için kalan alan.

# fdisk'i interaktif modda başlat
fdisk /dev/sdb

fdisk açıldıktan sonra bir komut istemi çıkar. İşte sık kullandığın komutlar:

  • m: Yardım menüsünü gösterir
  • p: Mevcut partition tablosunu yazdırır
  • n: Yeni bölüm oluşturur
  • d: Bölüm siler
  • t: Bölüm tipini değiştirir
  • w: Değişiklikleri yazar ve çıkar
  • q: Kaydetmeden çıkar
  • l: Bilinen partition tiplerini listeler

İlk bölümü oluşturmak için sırasıyla şunları yapıyoruz:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-419430399, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-419430399, default 419430399): +100G

Created a new partition 1 of type 'Linux' and of size 100 GiB.

Aynı şekilde ikinci ve üçüncü bölümleri oluştur, sonra w ile yaz:

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Bölüm Tipini Değiştirme

Swap bölümü oluşturuyorsan tipini değiştirmen gerekiyor:

# fdisk içinde
Command (m for help): t
Partition number (1-3, default 3): 2
Hex code or alias (type L to list all): 82
# 82 = Linux swap

Non-İnteraktif fdisk Kullanımı

Otomasyon scriptlerinde interaktif mod kullanmak istemezsin. sfdisk ile bunu çözebilirsin:

# sfdisk ile script tabanlı bölümlendirme
cat << EOF | sfdisk /dev/sdb
label: dos
device: /dev/sdb
unit: sectors

/dev/sdb1 : start=2048, size=209715200, type=83
/dev/sdb2 : start=209717248, size=104857600, type=83
/dev/sdb3 : start=314574848, type=83
EOF

Bu yöntem özellikle Ansible playbook veya bash scriptleri içinde çok işe yarıyor.

parted: Modern ve GPT Dostu

parted hem MBR hem GPT destekler ve özellikle 2TB üzerindeki diskler için tercih edilmesi gereken araçtır. Ayrıca scriptleme için çok daha temiz bir arayüz sunar.

GPT Disk Hazırlama

Senaryo: Yeni bir 4TB disk /dev/sdc geliyor, bunu GPT ile hazırlayacağız.

# parted'ı başlat
parted /dev/sdc

# GPT partition table oluştur
(parted) mklabel gpt

# Birinci bölüm: 1TB, veri için
(parted) mkpart primary ext4 0% 25%

# İkinci bölüm: 1TB, log için
(parted) mkpart primary xfs 25% 50%

# Üçüncü bölüm: 2TB, yedekleme için
(parted) mkpart primary ext4 50% 100%

# Bölümleri gör
(parted) print

# Çık
(parted) quit

parted ile Non-İnteraktif Kullanım

Production ortamında scriptleme şart:

# Tek satırda GPT oluştur ve bölümle
parted -s /dev/sdc 
    mklabel gpt 
    mkpart primary ext4 0% 25% 
    mkpart primary xfs 25% 50% 
    mkpart primary ext4 50% 100%

# Sonucu kontrol et
parted -s /dev/sdc print

-s: Script modunda çalıştırır, onay sormaz

Bu çıktı şuna benzer:

Model: ATA SAMSUNG (scsi)
Disk /dev/sdc: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1001GB  1000GB  ext4         primary
 2      1001GB  2001GB  1000GB  xfs          primary
 3      2001GB  4001GB  2000GB  ext4         primary

Alignment Ayarı

Modern diskler ve SSD’ler için hizalama kritiktir. Yanlış hizalama ciddi performans kaybına yol açar:

# Optimal hizalama ile bölüm oluştur
parted -s /dev/sdc 
    mklabel gpt 
    mkpart primary 1MiB 100GiB 
    mkpart primary 100GiB 200GiB 
    align-check optimal 1 
    align-check optimal 2

parted yüzde kullandığında hizalamayı otomatik ayarlar. Manuel sektor değeri giriyorsan 1MiB‘dan başlamak en güvenlisi.

Dosya Sistemi Oluşturma

Bölüm oluşturdun, ama henüz kullanılabilir değil. Dosya sistemi oluşturman gerekiyor:

# ext4 dosya sistemi oluştur
mkfs.ext4 /dev/sdb1

# XFS dosya sistemi (büyük dosyalar için ideal)
mkfs.xfs /dev/sdc2

# Etiket ile birlikte oluştur (fstab için kullanışlı)
mkfs.ext4 -L veritabani /dev/sdb1
mkfs.xfs -L loglar /dev/sdc2

# Swap bölümü hazırla
mkswap /dev/sdb2
swapon /dev/sdb2

# Swap durumunu kontrol et
swapon --show

Kalıcı Mount Yapılandırması

Bölümleri /etc/fstab‘a eklemezsen yeniden başlatmada kaybolur.

# UUID'leri öğren
blkid /dev/sdb1
blkid /dev/sdc2

# Çıktı örneği
# /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" LABEL="veritabani"

# fstab'a ekle
echo "UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /var/lib/mysql ext4 defaults,noatime 0 2" >> /etc/fstab

# Mount noktasını oluştur
mkdir -p /var/lib/mysql

# fstab'ı test et (makinayı yeniden başlatmadan)
mount -a

# Başarılı mount'u kontrol et
df -hT | grep sdb1

Label kullanmak UUID yerine daha okunabilir ama UUID daha güvenli çünkü disk sırası değişse bile doğru diski bulur.

Gerçek Dünya Senaryosu: Veritabanı Sunucusu Disk Yapılandırması

Bir PostgreSQL sunucusu için disk yapılandırması yapacaksın. Gereksinimler:

  • /dev/sdb 500GB: Veri dosyaları için
  • /dev/sdc 200GB: WAL (Write-Ahead Log) için
  • /dev/sdd 1TB: Yedekleme için
#!/bin/bash
# postgresql-disk-setup.sh

set -e

echo "=== PostgreSQL Disk Yapılandırması ==="

# Mevcut durumu kaydet
lsblk > /tmp/disk-oncesi.txt

# Veri diski - GPT ile bölümlendir
echo "Veri diski hazırlanıyor: /dev/sdb"
parted -s /dev/sdb 
    mklabel gpt 
    mkpart primary xfs 1MiB 100%

# WAL diski
echo "WAL diski hazırlanıyor: /dev/sdc"
parted -s /dev/sdc 
    mklabel gpt 
    mkpart primary xfs 1MiB 100%

# Yedekleme diski
echo "Yedekleme diski hazırlanıyor: /dev/sdd"
parted -s /dev/sdd 
    mklabel gpt 
    mkpart primary ext4 1MiB 100%

# Kernel'ın yeni partition table'ı okuması için
partprobe /dev/sdb
partprobe /dev/sdc
partprobe /dev/sdd

sleep 2

# Dosya sistemleri oluştur
echo "Dosya sistemleri oluşturuluyor..."
mkfs.xfs -L pg_data /dev/sdb1
mkfs.xfs -L pg_wal /dev/sdc1
mkfs.ext4 -L pg_backup /dev/sdd1

# Mount noktaları
mkdir -p /var/lib/postgresql/data
mkdir -p /var/lib/postgresql/wal
mkdir -p /var/lib/postgresql/backup

# fstab girişleri
DATA_UUID=$(blkid -s UUID -o value /dev/sdb1)
WAL_UUID=$(blkid -s UUID -o value /dev/sdc1)
BACKUP_UUID=$(blkid -s UUID -o value /dev/sdd1)

cat >> /etc/fstab << EOF
UUID=$DATA_UUID /var/lib/postgresql/data xfs defaults,noatime,nodiratime 0 2
UUID=$WAL_UUID /var/lib/postgresql/wal xfs defaults,noatime,nodiratime 0 2
UUID=$BACKUP_UUID /var/lib/postgresql/backup ext4 defaults,noatime 0 2
EOF

# Bağla
mount -a

# Yetkileri ayarla
chown -R postgres:postgres /var/lib/postgresql/

echo "=== Yapılandırma Tamamlandı ==="
df -hT | grep -E "pg_|postgresql"

Bu scripti bir değişkene atıp çalıştırmadan önce mutlaka test ortamında dene.

Disk Boyutu Genişletme

Bulut ortamında disk büyütme çok yaygın. VMware’de veya AWS’de diski büyüttün, şimdi Linux’ta tanıman lazım:

# Yeni disk boyutunu kernel'a tanıt
echo 1 > /sys/class/block/sdb/device/rescan

# ya da
partprobe /dev/sdb

# Durumu kontrol et
lsblk
fdisk -l /dev/sdb

# parted ile son bölümü genişlet
parted /dev/sdb
(parted) resizepart 3 100%
(parted) quit

# Dosya sistemini de genişlet
# ext4 için:
resize2fs /dev/sdb3

# XFS için (sadece büyütme desteklenir, küçültme yok):
xfs_growfs /mount/noktasi

LVM ile Entegrasyon

fdisk ve parted ile oluşturduğun bölümleri LVM’e de verebilirsin. Bu çok yaygın bir senaryo:

# fdisk ile LVM tipi bölüm oluştur
# fdisk içinde t ile tip değiştir, 8e seç (Linux LVM)

# Physical Volume oluştur
pvcreate /dev/sdb1

# Volume Group oluştur
vgcreate vg_data /dev/sdb1

# Logical Volume oluştur
lvcreate -L 80G -n lv_mysql vg_data
lvcreate -l 100%FREE -n lv_logs vg_data

# Dosya sistemi ve mount
mkfs.ext4 /dev/vg_data/lv_mysql
mount /dev/vg_data/lv_mysql /var/lib/mysql

Sık Yapılan Hatalar ve Çözümleri

Sorun: fdisk -l diski göstermiyor

# Kernel'ı yeniden tara
echo "- - -" > /sys/class/scsi_host/host0/scan
# veya
udevadm trigger
udevadm settle

Sorun: Bölüm oluşturduktan sonra dosya sistemi oluşturulamıyor

# Bölüm tablosunu kernel'a yeniden oku
partprobe /dev/sdb
# veya sistemi kısaca beklet
sleep 3
ls /dev/sdb*

Sorun: Device or resource busy hatası

# Hangi process diski kullanıyor
fuser -vm /dev/sdb
lsof /dev/sdb

# Mount noktasını kontrol et
umount /dev/sdb1
# sonra işlemini yap

Sorun: GPT diskini MBR’a çevirmek gerekiyor

# DİKKAT: Tüm veri silinir!
# Önce yedek al
dd if=/dev/sdb of=/backup/sdb-backup.img bs=4M status=progress

# Sonra dönüştür
parted -s /dev/sdb mklabel msdos

fdisk mi, parted mi? Hangisini Kullanmalıyım?

İkisi de güçlü araçlar ama kullanım senaryolarına göre tercih değişiyor:

  • fdisk kullan: 2TB altı diskler, MBR diskleri yönetirken, interaktif iş yaparken, legacy sistemlerde
  • parted kullan: 2TB üzeri diskler, GPT gereken yerler, otomasyon scriptlerinde, modern sistemlerde
  • gdisk kullan: Sadece GPT üzerinde çalışmak istiyorsan ve fdisk’e alışkınsan, gdisk benzer arayüz sunar

Canlı sistemlerde her iki araç da mevcut disk içeriğini silmeden yeni bölümler ekleyebilir. Ama var olan bölümleri küçültmek veya silmek veri kaybı riski taşır; önce mutlaka yedek al.

Hızlı Referans Komutları

Günlük işlerde sürekli kullandığım, not defterime aldığım komutlar:

# Tüm diskleri ve bölümleri göster
lsblk -f

# Disk UUID ve dosya sistemi bilgisi
blkid

# Bölüm tablosunu ekrana yazdır
parted /dev/sdb print

# fdisk ile özet
fdisk -l /dev/sdb

# Dosya sistemi sağlık kontrolü (unmount edilmeli)
fsck -n /dev/sdb1

# XFS sağlık kontrolü
xfs_repair -n /dev/sdc1

# Disk I/O durumu
iostat -x 1 5

# Bölüm boyutunu öğren
blockdev --getsize64 /dev/sdb1

Sonuç

Disk bölümlendirme, sysadmin’in en temel becerilerinden biri. fdisk onlarca yıllık geçmişiyle hala geçerli ve güvenilir; MBR diskler ve 2TB altı senaryolarda rahatça kullanılabilir. parted ise özellikle GPT ve büyük diskler için modern tercihtir, scripting için de çok daha uygun bir arayüz sunar.

Bu araçları öğrenmenin en iyi yolu bir VM veya test diski üzerinde defalarca pratik yapmak. Vagrant ile hızlıca bir test ortamı kurabilir, sanal disk ekleyip bu komutları deneyebilirsin. Üretim ortamında bu işleri yapmadan önce her zaman:

  • Mevcut disk durumunu kaydet (lsblk ve fdisk -l çıktısını sakla)
  • Kritik verileri yedekle
  • Değişikliği önce test ortamında uygula
  • w tuşuna basana kadar fdisk ve parted‘da hiçbir şey kalıcı olmaz; bu seni korur

Disk yönetimi konusunda soru ve yorumlarını aşağıya bırakabilirsin. Özellikle LVM entegrasyonu, RAID yapılandırması veya bulut ortamlarında disk yönetimi hakkında ayrı yazılar gelecek.

Yorum yapın