mkswap, bir aygıt ya da dosya üzerinde Linux takas alanını oluşturur.
(Takas alanını oluşturduktan sonra swapon komutuyla etkinleştirmeniz gerekir. Takas alanları çoğunlukla /etc/fstab içinde listelenirler ve sistemin açılışı sırasında swapon -a komutunu çalıştıran betiklerle kullanıma hazır hale getirilirler.)
aygıt argümanı çoğunlukla bir disk bölümü (/dev/hda4, /dev/sdb7 gibi) olmakla birlikte bir dosya da olabilir. Linux çekirdeği disk bölümlerinin kimliklerine bakmaz ama çoğu kurulum betiği, onaltılık tabanda türü 82 (LINUX_SWAP) olan disk bölümünü Linux takas alanı olarak kabul eder. (Uyarı: Solaris de bu türü kullanır. Solaris disk bölümünüzü öldürürken dikkatli olun.)
boyut argümanı gereksiz olmakla birlikte geriye uyumluluk amacıyla korunmuştur. (İstenen takas alanı miktarını 1024 baytlık bloklar halinde belirtmek için kullanılır. Şayet bu argüman belirtilmemişse, mkswap bütün disk bölümünü veya dosyanın tamamını takas alanı olarak kabul eder. - olarak belirtmek pek akıllıca olmaz, diskinizin bozulmasına sebep olabilir.)
sayfa_boyu parametresi kullanılacak sayfa boyunu belirtmek içindir. Bu parametreyi belirtmek genellikle gereksizdir (hatta akılsızcadır) ama bazı libc sürümleri sayfa boyu hakkında yanlış bilgi verirler, bu nedenle mkswap'ın bu boyutu yanlış algılaması mümkündür. Sonradan ortaya çıkan, takas imzası bulunamadı şeklindeki, swapon hataları bunun belirtisi sayılabilir. Takas bölümüne özgü sayfa_boyu değerleri 4096 ve 8192 dir.
Linux iki tür takas alanı tanır: eski tür ve yeni tür. Takas alanının ilk sayfasının son 10 baytı bu ayrımı yapmak için kullanılır. Eski türün imzası ‘SWAP_SPACE’ iken yeni türün imzası ‘SWAPSPACE2’dir.
Eski türde, ilk sayfanın kalanı, takas alanının kullanılabilir her sayfası için 1 bit olmak üzere bir bit eşlemdi. İlk sayfa bu biteşlemi tuttuğundan ilk bit 0 idi. Ayrıca son 10 bayt imza için ayrılmıştır. Bu durumda, şayet sayfa boyu B ise, eski türte bir takas alanı en fazla 8*(B-10)-1 sayfalık takas alanı kullanabilir. i386’da olduğu gibi B=4096 ise, kullanılabilecek alan en fazla 133890048 bayt olabilir (takriben 128MiB). Bir Alpha veya Sparc64'de ise, B=8192 ve kullanılabilecek alan en fazla 535560992 bayt (takriben 512 MiB) olabilir
Eski türler, bu biteşlem sayfasının çoğunu boşa harcar. Çünkü sıfır bitleri bozuk blok alanları veya takas alanından sonraki bloklar olarak kabul edilir. Basit bir tamsayı, -şayet varsa- bozuk blokların listelenebilmesi için yeterli olmaktadır. Hiçkimse yüzlerce bozuk blok bulunan bir takas alanını kullanmak istemez (hatta ben içinde 1 tane bile bozuk blok bulunan bir takas alanı kullanmak istemem). Yeni türdeki takas alanlarında, bu olması gerektiği gibi yapılmıştır. Şimdi takas alanının kullanılabilecek azami boyutu mimariye bağlıdır. Kabaca: bir i386, PPC, m68k, ARM için 2GiB; mips’lerde 512 MiB; alpha’da 128GiB ve bir sparc64’de 3TiB’tır.
Not: Linux 2.1.117’den önce, çekirdek belleğinde her sayfa için bir bayt ayrılırdı, şimdi ise iki bayt ayrılmaktadır. Bu yüzden, 2GiB'lık bir takas alanı kullanımı, 2MiB'lık bir çekirdek belleği gerektirebilir.
Şu an, Linux 8 adet takas alanına izin vermektedir. Kullanımdaki takas alanlarını /proc/swaps dosyası içinde görebilirsiniz (Linux-2.1.25’den beri).
mkswap 10 sayfadan daha küçük alanları kabul etmez.
Şayet makinanızın kullandığı sayfa boyutunu bilmiyorsanız, cat /proc/cpuinfo komutu ile bunu öğrenebilirsiniz (veya öğrenemezsiniz. Bu dosyanın içeriği kullandığınız çekirdek sürümüne ve mimariye göre değişiklik gösterebilir).
Bir takas dosyası oluşturmak için, mkswap ile başlatmadan önce aşağıdakine benzer bir komutla önce bir dosya oluşturmalısınız:
# dd if=/dev/zero of=swapfile bs=1024 count=65536
Not: Bir takas dosyası kesintisiz, tek parça olmalıdır. Bu nedenle cp(1) komutu ile oluşturulmuş bir takas dosyası kabul edilmez.