Rehber

Linux'ta disk bağlama: lsblk, bölümleme, mkfs, mount ve fstab

Güncellendi: · Skillaria.Top

Linux'ta disk bağlamak, bir bölümün dosya sistemini dizin ağacındaki bir klasöre (örneğin /data) eklemek demektir. Yeni disk lsblk ile bulunur, fdisk veya parted ile bölümlenir, mkfs.ext4 ile biçimlendirilir, mount /dev/sdb1 /data ile bağlanır; yeniden başlatmadan sonra da bağlı kalması için bölümün UUID'si /etc/fstab dosyasına yazılır ve mount -a ile denetlenir.

Linux'ta sürücü harfleri yoktur: tüm depolama aygıtları / ile başlayan tek bir dizin ağacına eklenir. Linux'ta disk bağlamak, bir bölümün dosya sistemini boş bir dizine, yani bağlama noktasına “asmak” işlemidir. Yeni bir diskin yolu her zaman aynıdır: aygıtı bulmak (lsblk), bölümlemek (fdisk veya parted), dosya sistemi oluşturmak (mkfs), bağlamak (mount) ve /etc/fstab içine yazarak kalıcı hale getirmek. Her adımı anlatıyor, yerin nereye gittiğini df ve du ile nasıl bulacağınızı da gösteriyoruz.

Diskler ve bölümler Linux'ta nasıl çalışır

Çekirdek her diski /dev altında bir aygıt dosyası olarak temsil eder. Adlar bağlantı türüne göre değişir:

AdNeBölümler
/dev/sda, /dev/sdbSATA/SAS/USB diskler, birçok sanal disk/dev/sda1, /dev/sda2
/dev/vdaKVM sanal makinelerindeki virtio diskler/dev/vda1
/dev/nvme0n1NVMe SSD/dev/nvme0n1p1
/dev/mapper/...LVM mantıksal birimleri, şifreli birimler—

Disk bölümlere ayrılır, bölümde bir dosya sistemi (ext4, xfs, btrfs) oluşturulur ve bu dosya sistemi bir dizine bağlanır. Bölüm bağlanmadıkça dosyaları erişilemez, disk fiziksel olarak takılı olsa bile.

Diskleri görme: lsblk ve blkid

Disklerle çalışırken ilk komut lsblk'tir. Aygıt ağacını, boyutları ve bağlama noktalarını gösterir:

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   40G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   39G  0 part /
sdb      8:16   0  100G  0 disk

Burada sdb, hiç bölümü ve bağlama noktası olmayan 100 GB'lık yeni bir disktir. Faydalı seçenekler:

  • lsblk -f — her bölümün dosya sistemi türünü, etiketini ve UUID'sini gösterir.
  • lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL — yalnızca ihtiyacınız olan sütunlar.
  • sudo blkid — tüm bölümler için UUID ve dosya sistemi türü.
  • sudo fdisk -l — tüm disklerin bölüm tabloları ve sektörleriyle.

Disk sanal makineye sıcak eklendi ama lsblk onu görmüyorsa, çekirdekten veri yolunu yeniden taramasını isteyin: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.

Disk bölümlendirme: fdisk ve parted

Bölümlendirmeden önce doğru aygıtı seçtiğinizden emin olun: sistem diskine bölüm tablosu yazmak verileri yok eder. lsblk çıktısında boyuta ve bağlama noktasının olmamasına bakın.

GPT mi MBR mi

Yeni diskler için GPT kullanın: 2 TB'tan büyük diskleri ve 128'e kadar bölümü destekler. MBR (dos) yalnızca BIOS ile önyükleme yapan eski sistemlerde, önyükleyici gerektirdiğinde kullanılır.

fdisk ile bölümlendirme

Modern fdisk hem GPT hem MBR'yi destekler. Çalışma etkileşimli modda yapılır:

$ sudo fdisk /dev/sdb
Command (m for help): g        # boş bir GPT tablosu oluştur
Command (m for help): n        # yeni bölüm
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter   # tüm disk
Command (m for help): w        # değişiklikleri yaz ve çık

w tuşuna basana kadar diske hiçbir şey yazılmaz; bu yüzden değişiklik yapmadan çıkmak için q kullanabilirsiniz.

parted ile tek satırda bölümlendirme

Betiklerde diyalog gerektirmeyen parted daha kullanışlıdır:

$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0  100G  0 disk
└─sdb1   8:17   0  100G  0 part

Yüzde ile verilen sınırlar bölümün doğru hizalanmasını sağlar. Yeni bölüm görünmezse, çekirdeğin tabloyu yeniden okuması için sudo partprobe /dev/sdb çalıştırın.

Dosya sistemi oluşturma: mkfs

Bölüm, yalnızca bir blok aralığıdır. Dosya saklayabilmesi için üzerinde bir dosya sistemi oluşturulmalıdır:

$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done

-L anahtarı etiket verir; bölümü daha sonra bu etiketle kolayca tanıyabilirsiniz. Hangisini seçmeli:

Dosya sistemiKomutNe zaman uygun
ext4mkfs.ext4varsayılan ve evrensel seçim, küçültülebilir
XFSmkfs.xfsbüyük dosyalar ve birimler, RHEL'in standardı; yalnızca büyütülebilir
Btrfsmkfs.btrfsanlık görüntüler, sıkıştırma, alt birimler
vfat/exFATmkfs.vfat, mkfs.exfatWindows ve macOS ile veri paylaşımı için bellekler

mkfs, bölümde ne varsa siler. Boş bölümde komut onay istemez; bu yüzden aygıt adını bir kez daha kontrol edin.

Linux'ta mount ile disk bağlama

Bir dizin — bağlama noktası — oluşturun ve bölümü buraya bağlayın:

$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        98G   24K   93G   1% /data

Dosya sistemi türünü mount kendisi algılar, ama mount -t xfs gibi açıkça da belirtebilirsiniz. /data dizininde bağlamadan önce dosyalar varsa, bağlama sonrası silinmezler; yalnızca yeni dosya sisteminin altında kalıp görünmez olurlar ve bağlama kaldırılınca geri gelirler.

Bağlama seçenekleri

Seçenekler -o ile virgülle ayrılarak verilir:

  • ro / rw — yalnızca okuma veya okuma ve yazma.
  • noatime — her okumada erişim zamanını güncelleme; gereksiz yazmalar azalır.
  • noexec — bu bölümden program çalıştırmayı yasaklar (/tmp ve indirme dizinleri için faydalıdır).
  • nosuid, nodev — SUID bitlerini ve aygıt dosyalarını yok sayar.
  • remount — bağlamayı kaldırmadan seçenekleri değiştirir: sudo mount -o remount,ro /data.

Neyin hangi seçeneklerle bağlı olduğunu findmnt ile görmek kolaydır: findmnt /data veya findmnt -t ext4.

Bağlanan disk için izinler

Yeni ext4'ün kökü root'a aittir, bu yüzden normal kullanıcı oraya yazamaz. Bağlamadan sonra dizini ilgili kullanıcıya verin: sudo chown alice:alice /data. vfat ve exFAT'ta Unix izinleri yoktur; sahip, bağlarken uid=, gid= ve umask= seçenekleriyle belirlenir.

Diski ayırma: umount ve target is busy hatası

Bağlamayı kaldırmak için umount komutunu (sonunda n harfi olmadan) aygıt veya dizin adıyla kullanın:

$ sudo umount /data
umount: /data: target is busy.

Bu hata, bu dosya sistemindeki dosyaları bir sürecin tuttuğu ya da bu dosya sisteminde bir sürecin geçerli dizin olduğu anlamına gelir — çoğu zaman cd /data yaptığınız terminal. Suçluyu bulmak için:

$ sudo lsof +f -- /data
$ sudo fuser -vm /data

Süreci durdurun veya dizinden çıkıp tekrar deneyin. Son çare umount -l (lazy) seçeneğidir: dosya sistemi ağaçtan hemen ayrılır, ama gerçekten serbest kalması süreçler dosyaları kapatana kadar sürer.

Açılışta otomatik bağlama: /etc/fstab

mount komutu yeniden başlatmaya kadar geçerlidir. Diskin otomatik bağlanması için /etc/fstab dosyasına satır eklemeniz gerekir. Bölümü /dev/sdb1 adıyla değil UUID ile belirtin: diskler eklendikçe aygıt adları yer değiştirebilir, UUID ise sabittir.

$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."

Satırın biçimi altı alandan oluşur:

# <aygıt>                                 <bağlama>  <tür>  <seçenekler>       <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77  /data    ext4   defaults,noatime  0      2
AlanAnlamı
aygıtUUID=..., LABEL=... veya bir yol
bağlamabağlanacak dizin (mevcut olmalı)
türext4, xfs, swap, nfs vb.
seçeneklerdefaults ve gerekli diğerleri, örneğin noatime, nofail
dumpneredeyse her zaman 0
fsckdenetim sırası: kök için 1, diğerleri için 2, 0 — denetleme

fstab'ı yeniden başlatmadan önce mutlaka denetleyin

/etc/fstab içindeki bir hata sunucuyu açılışta kurtarma moduna sokabilir; konsolu olmayan bulut makinesinde bu çok can sıkıcıdır. Düzenlemeden hemen sonra çalıştırın:

$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data

mount -a, fstab'daki henüz bağlanmamış her şeyi bağlar ve hatayı hemen gösterir. Çıkarılabilir ve ağ diskleri için nofail seçeneğini ekleyin: aygıt yoksa açılış onsuz devam eder. systemd'de fstab'daki her satır bir .mount birimine dönüşür — örneğin data.mount; durumu systemctl status data.mount ile görürsünüz.

Boş alanı görme: df

df bağlı dosya sistemlerinin doluluk oranını gösterir:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        39G   37G  1.1G  98% /
/dev/sda1       974M  180M  727M  20% /boot
/dev/sdb1        98G   24K   93G   1% /data
  • -h — boyutları okunabilir birimlerde gösterir.
  • -T — dosya sistemi türü sütunu ekler.
  • -i — inode'ları gösterir: çok sayıda küçük dosya yüzünden boş gigabaytlar varken disk “bitebilir”.
  • -x tmpfs -x devtmpfs — sanal dosya sistemlerini gizler.

Size neden Used + Avail'e eşit değil: ext4, sistemin dolu diskte de çalışabilmesi için yaklaşık %5 alanı root için ayırır. Veri diskinde bu rezervi azaltabilirsiniz: sudo tune2fs -m 1 /dev/sdb1.

Yer nereye gitti: du

df diskin dolu olduğunu söyler, ama neyin dolu olduğunu söylemez. Bunun için dizinlerdeki dosya boyutlarını toplayan du vardır:

$ sudo du -sh /var/log
4.2G    /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G     /
21G     /var
9.8G    /home
3.1G    /usr
  • -s — yalnızca dizinin toplamı, -a — her dosya ayrı.
  • --max-depth=1 (veya -d 1) — yalnızca bir iç seviye; en büyük dizinin içine daha derine inin.
  • -x — başka dosya sistemlerine geçmez; aksi halde /data, /proc ve ağ diskleri de toplama girer.
  • sort -rh — insan tarafından okunabilir boyutlara göre sıralama, en büyük en üstte.

Tek tek büyük dosyaları bulmak için find daha uygundur: sudo find / -xdev -type f -size +1G -exec ls -lh {} +.

df dolu gösterirken du göstermiyor

Klasik durum: çok büyük bir log silindi ama yer boşalmadı. Dosya dizinden silindi, ama bir süreç (örneğin web sunucusu) onu hâlâ açık tutuyor ve bloklar serbest kalmıyor. Bu tür dosyaları bulun:

$ sudo lsof +L1
COMMAND  PID USER   FD   TYPE DEVICE   SIZE/OFF NLINK  NODE NAME
nginx    812 www    5w   REG    8,2 8589934592     0 13054 /var/log/nginx/access.log (deleted)

Süreci yeniden başlatın veya logları yeniden açmasını isteyin — yer geri gelir. Gelecekte aktif bir logu silmeden temizlemek için: sudo truncate -s 0 /var/log/nginx/access.log. Farkın ikinci nedeni, bağlama noktasının altında kalan dosyalardır: root bölümünde yer kaplarlar, ama dosya sistemi üstüne bağlıyken du onları göremez.

Sık görülen hatalar ve çözümleri

MesajNedenNe yapmalı
mount point /data does not existdizin yoksudo mkdir -p /data
wrong fs type, bad option, bad superblockbölümde dosya sistemi yok, tür yanlış veya sürücü kurulu değillsblk -f ile kontrol edin; exFAT/NTFS için exfatprogs, ntfs-3g paketlerini kurun
only root can do thatsudo olmadan bağlamasudo ile çalıştırın veya fstab'a user seçeneği ekleyin
target is busydizini bir süreç kullanıyorlsof/fuser, dizinden çıkın
açılış acil durum modundafstab hatası veya disk yokroot olarak girin, fstab'ı düzeltin, nofail ekleyin

Adım adım senaryo: veri için yeni disk

  1. lsblk — yeni diski bulun, örneğin /dev/sdb.
  2. sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100% — bölümlendirin.
  3. sudo mkfs.ext4 -L data /dev/sdb1 — dosya sistemini oluşturun.
  4. sudo mkdir -p /data — bağlama noktasını oluşturun.
  5. sudo blkid /dev/sdb1 — UUID'yi öğrenin ve /etc/fstab'a satır ekleyin.
  6. sudo mount -a && df -h /data — bağlayın ve kontrol edin.
  7. sudo chown kullanıcı: /data — izinleri verin.

Hizmeti durdurmadan yer genişletmeniz veya birden fazla diski birleştirmeniz gerekirse, sıradan bölüm yerine LVM kullanılır: disk fiziksel birim olur, ondan mantıksal birimler kesilir ve bunlar lvextend -r ile büyütülür.

Özet

Linux'ta disk bağlama lsblk → bölümlendirme → mkfs → mount → /etc/fstab zincirinden oluşur. Bölümleri UUID ile belirtin, fstab'ı yeniden başlatmadan önce mount -a ile denetleyin ve isteğe bağlı diskler için nofail kullanın. Yer bittiğinde df -h hangi bölümün dolu olduğunu, du -xh --max-depth=1 | sort -rh ve lsof +L1 ise neyin yer kapladığını gösterir. Diskler, bölümler, SWAP, LVM ve RAID kursta uygulamalı olarak ele alınmaktadır.

Sık sorulan sorular

Linux'ta flash bellek nasıl bağlanır?

Önce lsblk ile bulun (genellikle /dev/sdb1), bir dizin oluşturun ve sudo mount /dev/sdb1 /mnt/usb komutunu çalıştırın. Masaüstü ortamlarında bellekler genellikle otomatik olarak /media/kullanıcı_adı veya /run/media altına bağlanır.

ISO imajı nasıl bağlanır?

sudo mount -o loop,ro image.iso /mnt/iso komutuyla: loop seçeneği dosyayı bir blok aygıtı gibi bağlar. Ayırmak için normal umount kullanılır.

Ağ paylaşımı fstab ile nasıl bağlanır?

NFS için satır şöyledir: server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0; SMB için //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. _netdev seçeneği ağın açılmasını bekler.

UUID ile PARTUUID arasındaki fark nedir?

UUID dosya sistemine aittir ve yeniden mkfs yapıldığında değişir; PARTUUID GPT tablosundaki bölüme aittir ve yeniden biçimlendirmede korunur. fstab için genellikle UUID kullanılır.

Dosya sistemi hatalara karşı nasıl denetlenir?

Bölümü ayırın ve ext4 için sudo fsck -f /dev/sdb1, XFS için sudo xfs_repair /dev/sdb1 çalıştırın. Bağlı bir dosya sistemini yazma yetkisiyle denetlemek verileri bozabilir.

Bu konuyu videoyla öğrenin

Bu konu “Linux: с нуля до уверенного администрирования” kursunda uygulamalı olarak ayrıntılı işleniyor.

Kursa git