Bağlama, Ayırma, Yeniden Bağlama
Önceki Dosya Sistemleri ile Çalışma Sonraki
Bağlama, Ayırma, Yeniden Bağlama
Bu bölümde dosya sistemlerinin bağlanması, ayrılması ve yeniden bağlanması ile ilgili işlevlerden bahsedilecektir.
Bir dosya sistemini sadece sistem yöneticisi bağlayabilir, ayırabilir veya yeniden bağlayabilir.
Bu işlevler fstab ve mtab dosyalarına erişmezler. Bunu ayrıca kendiniz sağlamalısınız. Bkz. Bağlama Bilgileri.
Bu bölümdeki semboller sys/mount.h dosyasında bildirilmiştir.
int mount
(const char       *özel_dosya,
 const char       *dizin,
 const char       *dstürü,
 unsigned long int seçenekler,
 const void       *veri)
işlev
mount işlevi bir dosya sistemini bağlamak ya da bağlı bir dosya sistemini yeniden bağlamak için kullanılır. İki işlem açıkça farklıdır ve doğal olmayan bir şekilde aynı işlevin içinde birbirine katıştırılmıştır. Aşağıda açıklanacağı gibi MS_REMOUNT seçeneği ile işlevin sıfırdan bağlama mı yoksa yeniden bağlama mı yapacağı saptanır.
İşlev dosya sistemini bağlamak amacıyla kullanıldığında, dosya sistemini içeren blok aygıtı özel_dosya isimli aygıt özel dosyası ile, bağlanacağı nokta ise dizin ile belirtilir. Bu durumda dizin dizinindeki herşey dosya sistemi sistemden ayrılana kadar erişilebilir olmayacak, onların yerine bağlanan dosya sisteminin kök dizininin içeriği erişilebilir olacaktır.
Bir olağandışılık olarak, eğer dosya sistemi türü bir aygıta ait değilse ("proc" gibi), mount dosya sistemini hemen görür ve özel_dosya'yı yoksayarak dizin dizinine onu bağlar.
İşlev dosya sistemini yeniden bağlamak amacıyla kullanıldığında, dizin dosya sisteminin bağlı olduğu yeri belirtir ve özel_dosya yoksayılır. Bir dosya sistemini yeniden bağlamanın amacı, evvelce bağlanırken kullanılan seçenekleri değiştirmektir. Bu işlem dosya sistemini önce ayırıp sonra tekrar bağlamak anlamında yapılmaz.
Sıfırdan bağlama amaçlı kullanımda dosya sisteminin türü dstürü argümanı ile belirtilir. Bu tür, çekirdeğin dosya sistemine erişirken kullanacağı dosya sistemi sürücüsünün ismi olarak belirtilir. Kabul edilen değerler sistemden sistem değişir. Linux çekirdekli ve proc dosya sistemli bir sistemde olası dosya sistemi türleri /proc/filesystems dosyasında listelenir (komut satırına cat /proc/filesystems yazarak bu listeyi görebilirsiniz). Linux çekirdeğinde mount ile bağlanabilen dosya sistemi türlerinin isimleri, çekirdeğin yapılandırılması sırasında yüklenebilir modül olarak belirtilen dosya sistemi sürücüsü olan modüllerin isimleridir. dstürü olarak belitilebilecek çok bilinen bir örnek ext2'dir.
Yeniden bağlama amaçlı kullanımda dstürü argümanı yoksayılır.
seçenekler ile dosya sistemi ayrılana ya da yeniden bağlanana kadar geçerli olacak çeşitli seçenekler belirtilir. Her seçenek dosya sistemine özgüdür, bazı seçenekleri birçok dosya sistemi kabul etse de bu hepsi için geçerli değildir. Bazı dosya sistemlerinde bu seçeneklerden bazıları (ama asla MS_RDONLY değil) ioctl ile dosya erişimi sırasında değiştirilebilir.
seçenekler bir bit dizgesidir. Bit alanları aşağıdaki maske ve maske değerli makrolar kullanılarak tanımlanmıştır:
MS_MGC_MASK
Bu çokbitli alan sihirli bir sayı içerir. Eğer MS_MGC_VAL değerini içermiyorsa, mount aşağıdaki tüm bitlerin sıfır olduğunu ve veri argümanının ise içerdiği değerlere bakılmaksızın bir boş dizge olduğunu varsayar.
MS_REMOUNT
Bu bit dosya sisteminin yeniden bağlanacağını belirtir. Yokluğu sıfırdan bağlama yapılacak anlamındadır.
MS_RDONLY
Bu bit bağlanan dosya sisteminde yazma işlemlerine izin verilmediğini belirtir ve ioctl tarafından bitin durumu değiştirilemez. Bu seçenek hemen tüm dosya sistemlerinde vardır.
S_IMMUTABLE
Bu bit bağlanan dosya sisteminde yazma işlemlerine izin verilmediğini belirtir. Fakat uygun olarak yetkilendirilmiş bir ioctl çağrısı bu bitin durumunu değiştirebilir. Bu seçenek görece diğerlerinden daha yeni olduğundan bir çok dosya sisteminde bulunmayabilir.
S_APPEND
Bu bit bağlanan dosya sisteminde yazma işlemlerine sadece dosyaların sonuna ekleme yapılacaksa izin verildiğini belirtir. Bazı dosya sistemlerinde uygun olarak yetkilendirilmiş bir ioctl çağrısı bu bitin durumunu değiştirebilir. Bu seçenek görece diğerlerinden daha yeni olduğundan bir çok dosya sisteminde bulunmayabilir.
MS_NOSUID
Bu bit bağlanan dosya sisteminde dosyaların Setuid and Setgid yetkilerinin yoksayılacağını belirtir.
MS_NOEXEC
Bu bit bağlanan dosya sisteminde dosyaların çalıştırılamayacağını belirtir.
MS_NODEV
Bu bit bağlanan dosya sisteminde aygıtlara özel dosyaların erişilebilir olmayacağını belirtir.
MS_SYNCHRONOUS
Bu bit bağlanan dosya sisteminde dosyalara yapılan tüm yazma işlemlerinin eşzamanlanacağını belirtir. Yani veri her yazma işleminde sonradan dosyaya yazılmak üzere bir tamponda saklanmaz doğrudan dosyaya yazılır.
MS_MANDLOCK
Bu bit bağlanan dosya sisteminde dosyalarda zorlayıcı kilitlere izin verildiğini belirtir.
MS_NOATIME
Bu bit bağlanan dosya sisteminde dosyaların erişim zamanlarının dosyalara erişildiğinde güncellenmeyeceğini belirtir.
MS_NODIRATIME
Bu bit bağlanan dosya sisteminde dizinlerin erişim zamanlarının dizinlere erişildiğinde güncellenmeyeceğini belirtir.
Yukarıdaki bit maskelerinin kapsamında olmayan bütün bitler sıfır olmalıdır; aksi takdirde sonuçları tanımsızdır.
veri'nin anlamlandırılması dosya sistemi türüne bağlıdır ve tamamen çekirdekteki dosya sistemi sürücüsü tarafından değerlendirilir.
Örnek:
#include <sys/mount.h>

mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");

mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, "");
mount işlevinin ilgili argümanları teamülen fstab tablosuna kaydedilir. Bkz. Bağlama Bilgileri.
İşlev başarılı olduğunda sıfırla döner. Aksi takdirde -1 döner ve errno değişkenine hata durumu atanır. errno değerleri dosya sistemine bağımlıdır, fakat burada ortak bir listeye yer verilmiştir:
EPERM
Süreç sistem yöneticisne ait değil
ENODEV
dstürü dosya sistemi türünü çekirdek bilmiyor
ENOTBLK
dev dosyası bir blok aygıtına özel dosya değil
EBUSY
  • Aygıt zaten bağlı
  • Bağlama noktası meşgul (Yani ya bu dizin bazı süreçlerin çalışma dizini ya da onun üzerinde de bir dosya sistemi hala bağlı)
  • Yeniden salt-okunur bağlama istendi ama yazma amacıyla açılmış dosyalar var
EINVAL
  • Yeniden bağlama istendi ama belirtilen bağlama noktasında bağlı bir dosya sistemi yok
  • Belirtilen dosya sistemi geçersiz süperblok içeriyor.
EACCES
  • Dosya sistemi kalıtsal olarak salt-okunur (aygıt üzerindeki donanımsal bir anahtar nedeniyle olabilir) ve süreç onu oku/yaz olarak bağlamaya çalıştı (MS_RDONLY biti sıfır olarak belirtilerek)
  • özel_dosya ya da dizin dosya erişim izinleri nedeniyle erişilebilir değil
  • özel_dosya erişilebilir değil, çünkü üzerinde bulunduğu dosya sistemi MS_NODEV seçeneği ile bağlı
EM_FILE
İsimsiz (dummy) aygıtlar tablosu dolu. mount, bir aygıtla bağlanamayacak bir dosya sistemini bağlamaya çalışırsa bir dummy aygıt oluşturmak ister.
int umount2
(const char *dosya,
 int         seçenekler)
işlev
umount2 bağlı bir dosya sistemini sistemden ayırır.
Ayrılacak dosya istemini dosya argümanında bir aygıta özel dosya olarak belirtebileceğiniz gibi bağlama noktası olarak da belirtebilirsiniz. Etkisi aynıdır.
seçenekler aşağıdaki maske makrosu ile tek bitlik bir alan olarak belirtilir:
MNT_FORCE
Bu bit bağlı dosya sisteminin meşgul olması durumnda bile ayrılacağını belirtir (önce meşgul değil durumuna getirilir). Bu bitin yokluğunda meşgul bir dosya sistemi ayrılmaz ve işlev errno = EBUSY ile başarısız olur. Bu bitin sağladığı zorlamayı bazı sistemler desteklemeyebilir, bazılarında ise meşgul olmama durumu olmayabilir. Yani bu bitin davranışı dosya sistemine bağlıdır.
seçenekler ile belirtilen diğer tüm bitler sıfır olmalıdır; aksi takdirde sonuçları tanımsızdır.
Örnek:
#include sys/mount.h

umount2("/mnt", MNT_FORCE);

umount2("/dev/hdd1", 0);

          
Dosya sistemi ayrıldıktan sonra bağlama noktası olan dizinin içeriğindeki dosyalara erişilebilir.
Dosya sisteminin ayrılması bağlamında umount2 dosya sistemin eşzamanlar. Yani açık dosyalara tamponlar boşaltılır.
Ayırma işlemi başarılı olmuşsa işlev sıfırla döner. Aksi takdirde -1 ile döner ve errno değişkenine hata durumu atanır:
EPERM
Süreç sistem yöneticisine ait değil
EBUSY
Dosya sistemi meğgul olduğundan ayrılamıyor. Yani dosya sistemindeki bir dizin ya bir sürecin çalışma dizini ya da süreçlerden biri bir dosya açmış. Bazı dosya sistemlerinde bu hata durumu MNT_FORCE seçeneği ile aşılabilir.
EINVAL
dosya aslında bir dosya ama ayrılmak istenen dosya sistemine ait ne bir bağlama noktası ne de aygıta özel bir dosya
Bu işlev dosya sistemlerinin tamamında kullanılabilir değildir.
int umount
(const char *dosya)
işlev
Bu işlev umount2 işlevinde seçenekler argümanının sıfır olması durumunda aynı işlevselliğe sahiptir. umount2'den daha geniş kullanım alanına sahip olmakla birlikte bir dosya sisteminin ne olursa olsun ayrılmasını sağlayan umount2'nin dosya sistemince desteklenmesi durumunda kullanılması önerilmemektedir.
Önceki Üst Ana Başlık Sonraki
mtab Başlangıç Sistem Parametreleri
Bir Linux Kitaplığı Sayfası