mount Komutu: Linux’ta Disk ve Dosya Sistemi Bağlama Rehberi
Bir sistemde disk bağlamayı bilmek, sıradan bir kullanıcıyı gerçek bir sysadmin’e ayıran temel becerilerden biridir. mount komutu ilk bakışta basit görünse de altında ciddi bir derinlik barındırıyor. Yeni bir disk eklediğinizde, NFS paylaşımı kurduğunuzda ya da bir ISO dosyasını açmanız gerektiğinde hep bu komutla yüz yüze geliyorsunuz. Bu yazıda mount komutunu hem teorik hem de pratik açıdan ele alacağız.
mount Komutu Nedir ve Neden Önemlidir?
Linux’ta her şey bir dosya sistemi hiyerarşisinde yaşar. Windows’taki gibi C:, D:, E: gibi ayrı sürücü harfleri yoktur. Bunun yerine tüm depolama birimleri, / kök dizinine bağlanır. İşte mount komutu, fiziksel ya da sanal bir depolama birimini bu hiyerarşiye dahil etmenizi sağlar.
Bir diski sisteme bağladığınızda, o diskin içindeki dosya sistemini belirli bir dizin üzerinden erişilebilir hale getirirsiniz. Bu dizine bağlama noktası (mount point) denir. Diski çıkarmak istediğinizde de umount komutu devreye girer.
Günlük hayatta mount komutunu şu senaryolarda kullanırsınız:
- Sunucuya yeni bir disk eklediğinizde
- USB sürücü veya harici disk bağladığınızda
- NFS, CIFS/Samba paylaşımlarını sisteme eklerken
- ISO dosyalarını mount etmek istediğinizde
- Bozuk bir sistemi kurtarmaya çalışırken farklı bir diskten önyükleme yapıp o sistemi mount ettiğinizde
- tmpfs veya ramfs gibi bellek tabanlı dosya sistemleri oluştururken
Temel Kullanım
mount komutunun en basit sözdizimi şu şekildedir:
mount [seçenekler] <kaynak> <hedef>
Örneğin /dev/sdb1 bölümünü /mnt/data dizinine bağlamak için:
mount /dev/sdb1 /mnt/data
Bu kadar. Ama tabii işler her zaman bu kadar basit gitmiyor. Önce bağlama noktasının mevcut olması gerekiyor:
mkdir -p /mnt/data
mount /dev/sdb1 /mnt/data
Mevcut mount edilmiş dosya sistemlerini görmek için de mount komutunu argümansız çalıştırabilirsiniz:
mount
Ama bu çıktı oldukça kalabalık olur. Daha temiz bir görünüm için findmnt komutunu öneririm:
findmnt
Ya da sadece belirli bir noktaya bakmak istiyorsanız:
findmnt /mnt/data
Önemli Parametreler
-t: Dosya sistemi tipini belirtir. ext4, xfs, ntfs, vfat, nfs gibi değerler alır.
-o: Mount seçeneklerini belirtir. ro, rw, noexec, nosuid, nodev gibi değerleri virgülle ayırarak kullanabilirsiniz.
-a: /etc/fstab dosyasındaki tüm girişleri mount eder.
-r: Salt okunur (read-only) olarak mount eder. -o ro ile aynı işlevi görür.
-w: Yazılabilir (read-write) olarak mount eder. Varsayılan davranış budur.
-n: Mount işlemini /etc/mtab dosyasına kaydetmez. Genellikle kurtarma senaryolarında kullanılır.
-v: Ayrıntılı çıktı verir.
-l: Mount noktalarını etiketleriyle birlikte listeler.
–bind: Bir dizini başka bir yere bind-mount eder.
–rbind: Bind-mount işlemini alt dizinlere de uygular.
-L: Disk etiketi ile mount eder.
-U: UUID ile mount eder.
Dosya Sistemi Tipini Belirtmek
Çoğu durumda mount komutu dosya sistemini otomatik algılar. Ama bazen elle belirtmeniz gerekebilir:
# ext4 dosya sistemini mount etmek
mount -t ext4 /dev/sdb1 /mnt/data
# NTFS diski mount etmek (Windows diskler için)
mount -t ntfs-3g /dev/sdc1 /mnt/windows
# FAT32 USB sürücü mount etmek
mount -t vfat /dev/sdd1 /mnt/usb
NTFS diskleri için ntfs-3g paketinin kurulu olması gerekir. Ubuntu/Debian üzerinde:
apt install ntfs-3g
Mount Seçenekleri ile Güvenlik ve Performans
-o parametresiyle çeşitli seçenekleri birleştirebilirsiniz. Bu seçenekler hem güvenlik hem de performans açısından kritik öneme sahiptir.
Güvenlik seçenekleri:
- ro: Salt okunur bağlar, disk üzerinde değişiklik yapılamaz
- noexec: Bu bölümdeki dosyalar çalıştırılamaz, web sunucusu dizinleri için ideal
- nosuid: SUID/SGID bit’leri yok sayılır
- nodev: Özel aygıt dosyaları işleme alınmaz
- noatime: Erişim zamanı (access time) güncellenmez, disk I/O azalır
Performans seçenekleri:
- async: Yazma işlemleri asenkron yapılır, daha hızlı ama daha az güvenli
- sync: Tüm yazma işlemleri eşzamanlı gerçekleşir, yavaş ama güvenli
- relatime: Erişim zamanını yalnızca değiştirilme zamanından eski olduğunda günceller
- lazytime: Zaman damgası güncellemelerini erteleyerek önbellekte tutar
Örnek olarak, bir web sunucusunda kullanıcı tarafından yüklenen dosyaların bulunduğu bir bölümü güvenli şekilde mount etmek isteyelim:
mount -o noexec,nosuid,nodev /dev/sdb1 /var/www/uploads
Bu sayede birisi zararlı bir betik yüklese bile çalıştıramaz.
ISO Dosyalarını Mount Etmek
ISO dosyaları, CD/DVD imajlarıdır ve loop aygıtı aracılığıyla mount edilirler. Bir ISO’yu fiziksel medya gerekmeksizin doğrudan sisteme bağlayabilirsiniz:
mount -o loop /home/admin/ubuntu-22.04.iso /mnt/iso
Ya da açıkça belirterek:
mount -t iso9660 -o loop /home/admin/ubuntu-22.04.iso /mnt/iso
Bu özellikle paket deposu olarak yerel bir ISO kullanmak istediğinizde çok işe yarar. Sunucunun internete erişimi olmadığı kapalı ağ ortamlarında (air-gapped systems) bu yöntemi sıklıkla kullanıyoruz.
NFS Paylaşımlarını Mount Etmek
Ağ üzerindeki NFS paylaşımlarını mount etmek, özellikle çok sunuculu ortamlarda çok yaygın bir işlemdir:
# NFS istemci paketlerini kur
apt install nfs-common # Debian/Ubuntu
yum install nfs-utils # RHEL/CentOS
# NFS paylaşımını mount et
mount -t nfs 192.168.1.100:/srv/shared /mnt/nfs
# Performans seçenekleriyle
mount -t nfs -o rw,hard,intr,timeo=14,rsize=32768,wsize=32768 192.168.1.100:/srv/shared /mnt/nfs
hard: Sunucu yanıt vermezse istemci süresiz bekler, üretim ortamları için önerilir.
intr: Kullanıcının Ctrl+C ile bekleyen işlemi kesebilmesine izin verir.
timeo: Yeniden deneme öncesi bekleme süresi (0.1 saniye cinsinden).
rsize/wsize: Okuma ve yazma bloğu boyutları.
/etc/fstab ile Kalıcı Mount
mount komutunun yaptığı bağlamalar geçicidir. Sistem yeniden başlatıldığında kaybolur. Kalıcı hale getirmek için /etc/fstab dosyasına girdi eklemeniz gerekir.
fstab dosyasının formatı şu şekildedir:
<kaynak> <bağlama-noktası> <dosya-sistemi-tipi> <seçenekler> <dump> <fsck-sırası>
Örnek bir fstab girişi:
# /etc/fstab dosyasını düzenle
nano /etc/fstab
# Yerel ext4 disk
/dev/sdb1 /mnt/data ext4 defaults,noatime 0 2
# UUID ile (önerilen yöntem)
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data ext4 defaults,noatime 0 2
# NFS paylaşımı
192.168.1.100:/srv/shared /mnt/nfs nfs rw,hard,intr 0 0
# ISO dosyası
/opt/repos/centos8.iso /mnt/iso iso9660 loop,ro 0 0
# tmpfs (RAM disk)
tmpfs /tmp tmpfs defaults,size=2G,noatime 0 0
dump değeri genellikle 0 olur. Yedekleme aracına dump’ın bu dosya sistemini yedekleyip yedeklemeyeceğini söyler.
fsck sırası: Sistem açılışında fsck kontrolünün sırası. Kök dosya sistemi için 1, diğerleri için 2, kontrol edilmemesi için 0.
Disk UUID’sini öğrenmek için:
blkid /dev/sdb1
# veya
lsblk -f
fstab’ı düzenledikten sonra test etmek için:
# Belirli bir noktayı test et
mount /mnt/data
# Tüm fstab girişlerini test et (sistemi yeniden başlatmadan)
mount -a
Eğer fstab’da hata varsa mount -a size hemen söyler. Sistemi yeniden başlatmadan önce bu testi yapmayı alışkanlık haline getirin. Yanlış bir fstab girişi yüzünden sistemin açılmaması ve bunun sonucunda konsoldan ya da rescue moddan sisteme girip düzeltmek zorunda kalmak oldukça sinir bozucu bir durumdur.
Bind Mount Kullanımı
Bind mount, bir dizini başka bir konuma “yansıtmanıza” yarar. Sanal ortam izolasyonu, chroot kafesleri ve container’larda sıklıkla kullanılır:
# /var/log dizinini /mnt/chroot/var/log olarak bind-mount et
mount --bind /var/log /mnt/chroot/var/log
# Alt dizinleri de dahil et
mount --rbind /proc /mnt/chroot/proc
Gerçek bir senaryo: Bir sistemi chroot ile kurtarırken:
# Kurtarma modunda bozuk sistemi mount et
mount /dev/sda1 /mnt/recover
# Gerekli sanal dosya sistemlerini bind-mount et
mount --bind /dev /mnt/recover/dev
mount --bind /proc /mnt/recover/proc
mount --bind /sys /mnt/recover/sys
# Artık chroot yapabilirsiniz
chroot /mnt/recover
tmpfs ile RAM Disk Oluşturmak
tmpfs, verilerini RAM’de tutan özel bir dosya sistemidir. Geçici veriler, önbellekler ya da hızlı I/O gerektiren işlemler için idealdir:
# 1 GB boyutunda tmpfs oluştur
mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk
# Derleyici çıktıları için geçici alan (derleme hızını ciddi artırır)
mount -t tmpfs -o size=4G,uid=1000,gid=1000,mode=755 tmpfs /home/developer/build
Büyük yazılım projelerinde derleme (build) dizinini tmpfs’e taşımak, derleme süresini önemli ölçüde kısaltır. Özellikle SSD olmayan sunucularda bunu göz önünde bulundurun.
Disk Dolu Olduğunda ve Sorun Giderme
Meşgul Bir Diski Unmount Edememe
umount /mnt/data
# umount: /mnt/data: target is busy
Bu hata, o dizini kullanan bir süreç olduğunda çıkar. Kim kullanıyor?
fuser -m /mnt/data
# veya daha ayrıntılı
lsof /mnt/data
Süreçleri öldürüp tekrar deneyin ya da zorla unmount edin (dikkatli olun):
umount -l /mnt/data # lazy unmount, referanslar bitince bağı kopar
umount -f /mnt/data # zorla unmount (NFS için)
Salt Okunur Olarak Yeniden Mount
Disk hatası ya da bakım sırasında bir dosya sistemini yeniden başlatmadan salt okunur moda almak:
mount -o remount,ro /mnt/data
Tekrar yazılabilir yapmak için:
mount -o remount,rw /mnt/data
Bu teknik, veritabanı yedekleme öncesi tutarlı snapshot almak için de kullanılabilir.
Mount Durumunu Kontrol Etmek
# Tüm mount noktaları
cat /proc/mounts
# Disk kullanımı ile birlikte
df -hT
# Daha ayrıntılı görünüm
findmnt --df
Systemd ile Mount Yönetimi
Modern Linux dağıtımlarında systemd, mount işlemlerini de yönetebilir. fstab yerine .mount unit dosyaları kullanabilirsiniz. Bu özellikle otomatik mount (automount) senaryolarında işe yarar:
# /etc/systemd/system/mnt-data.mount dosyasını oluştur
cat > /etc/systemd/system/mnt-data.mount << 'EOF'
[Unit]
Description=Data Disk Mount
After=network.target
[Mount]
What=/dev/sdb1
Where=/mnt/data
Type=ext4
Options=defaults,noatime
[Install]
WantedBy=multi-user.target
EOF
# Servisi etkinleştir ve başlat
systemctl daemon-reload
systemctl enable mnt-data.mount
systemctl start mnt-data.mount
systemctl status mnt-data.mount
Automount ile birleştirirseniz, dizine ilk erişildiğinde disk otomatik olarak bağlanır ve belirli bir süre kullanılmazsa otomatik olarak bağlantısı kesilir. Güç tasarrufu açısından harici diskler için çok kullanışlıdır.
Gerçek Dünya: Yeni Disk Ekleme Senaryosu
Diyelim ki bir sunucuya yeni bir veri diski eklediniz ve bunu /var/lib/mysql için kullanmak istiyorsunuz. İşte adım adım süreç:
# 1. Yeni diski tespit et
lsblk
# sdb olarak göründüğünü varsayalım
# 2. Diski biçimlendir
fdisk /dev/sdb
# n -> p -> 1 -> Enter -> Enter -> w
# 3. Dosya sistemi oluştur
mkfs.ext4 /dev/sdb1
# 4. UUID'yi al
blkid /dev/sdb1
# 5. Bağlama noktası oluştur
mkdir -p /mnt/mysql_new
# 6. Geçici olarak mount et ve test et
mount /dev/sdb1 /mnt/mysql_new
df -h /mnt/mysql_new
# 7. MySQL'i durdur, verileri taşı
systemctl stop mysql
rsync -av /var/lib/mysql/ /mnt/mysql_new/
# 8. fstab'a ekle
echo "UUID=<yukarıdan-aldığınız-uuid> /var/lib/mysql ext4 defaults,noatime 0 2" >> /etc/fstab
# 9. Eski dizini kaldır, yeni mount noktasını yerleştir
umount /mnt/mysql_new
mount /dev/sdb1 /var/lib/mysql
# 10. İzinleri düzelt
chown -R mysql:mysql /var/lib/mysql
# 11. MySQL'i başlat
systemctl start mysql
Sonuç
mount komutu, Linux sistem yönetiminin temel taşlarından biridir. Basit bir disk bağlama işleminden NFS paylaşımlarına, ISO mount etmekten bind-mount ile chroot ortamı kurmaya kadar pek çok senaryoda karşınıza çıkacak. Bu yazıda ele aldığımız konuları özetlersek:
- Temel mount/umount işlemleri ve parametreler
- Farklı dosya sistemi türleri için mount yöntemleri
/etc/fstabile kalıcı mount yapılandırması- Güvenlik ve performans seçenekleri
- Bind mount ve tmpfs kullanımı
- Systemd mount unit dosyaları
- Sorun giderme teknikleri
Pratikte en çok hata yapılan nokta, fstab’ı test etmeden sistemi yeniden başlatmaktır. Her zaman mount -a ile test edin. Ayrıca UUID kullanmayı alışkanlık haline getirin; disk adları (/dev/sdb gibi) yeniden başlatmadan sonra değişebilir ama UUID her zaman sabittir.
Mount komutunu gerçekten özümsemek için en iyi yol, bir sanal makine üzerinde bolca pratik yapmaktır. Sanal diskleri ekleyip çıkarmak, farklı senaryolar denemek, kasıtlı olarak hatalı fstab girişi yazıp kurtarmak, bu komutla aranızı güçlü tutar. Ve güçlü bir sysadmin olmak da tam olarak bu tür pratik deneyimlerden geçiyor.
