swap “dosyası” kullanarak suspend to disk (a.k.a hibernation) yapmak
Bugüne kadar bir blog üzerinde rastlamadığım için (forumlarda ve dokümantasyon içerisinde bulunabilir ama derinlere inmek gerekiyor) bloguma bu yazıyı eklemek istedim. Yaklaşık iki senedir swap bölümü (partition) yerine swap “dosyası” (file) kullanıyorum.
Swap ya da Türkçesiyle takas alanı “suspend to disk” yaparken verinin o bölüme yazılmasını sağlar ve grub’da resume= seçeneği varsa, bir sonraki açılışta o veriyi tekrar yükleyerek kaldığınız yerden devam etmenizi mümkün kılar. Suspend to ram kullandığınızda ise anlık veri ram üzerine yazılır ve verinin kullanılabilir olması için ufak bir miktar güç kullanılır (suspend to ram yaptığınızda dizüstü bilgisayarınızın güç lambasının yanıp sönmesinin esprisi budur). Böylece bilgisayarınızı tekrar açtığınızda ram üzerindeki veri tekrar kullanılabilir duruma gelir. Eğer bu güç kullanılmaz ise suspend to ram anlamsız kalır; zira güç tamamen kapalı iken ram üzerinde veri saklamanın mümkünatı yoktur.
Takas alanı (swap) disk bölümü olarak kullanılırken herhangi bir ekstra işleme gerek yok haliyle; ancak takas alanı için dosya kullanıyorsanız, biraz detaya ihtiyaç var. Haydi başlayalım:
Ama başlamadan önce mevcut takas alanını devredışı bırakmakta fayda var:
swapoff -a
Öncelikle takas alanı için bir dosya oluşturalım. Çekirdek dokümantasyonundan edindiğim bilgiye göre suspend için ram = swap gibi bir değere gerek yok, çekirdek suspend ve resume için maksimum 512M veri işlemekte ve kullanmakta, bu yüzden 512M yeterli. Ben örnekte 512M’lik bir swap dosyası oluşturacağım:
dd if=/dev/zero of=/mnt/swapfile bs=1M count=512
Böylelikle /mnt/swapfile adı altında 512Mb’lık bir dosya oluşturduk. Bu dosyayı swap haline getirmek için:
mkswap /mnt/swapfile
swapon /mnt/swapfile
Böylece 3 komutta swap dosyası oluşturup, swap olarak tanıtıp, sisteme bağladık. Gelelim resume= için swap dosyasını nasıl kullanacağımıza. Takas alanından devam yani resume işlemi için grub’da kernel satırına resume= eklemek gerekir. Eğer takas alanı bir disk “bölümü” ise, resume=/dev/sdX eklemek yeterlidir. (X yerine bölüm ID’si yazacaksınız elbette
)
Ancak takas alanı bir “dosya” olduğunda sadece resume= yetmemektedir. O satır ile birlikte bir resume_offset= değeri girerek takas alanımızın bir “dosya” olduğunu belirtmemiz gerekir.
Başarıyla bir takas alanı oluşturduktan sonra bu takas alanını fstab’da tanımlamak, açılışta bu dosyanın takas alanı olarak tanıtılmasını sağlayacaktır. /etc/fstab dosyasına şu satırı ekleyebilirsiniz:
/mnt/swapfile none swap sw 0 0
Buraya kadarki işlemler swap dosyası nasıl oluşturulur sorusunu anlatmaya yönelikti. Şimdi ise bu swap dosyasının suspend to disk işlemi için nasıl kullanılacağını anlatayım. Bu işlemi gerçekleştirmek için bize resume_offset değeri gerekiyor. resume_offset’i öğrenmek çok kolay:
sudo filefrag -v /mnt/swapfile
komutunu vererek, dosya yapısını inceleyebilirsiniz. Çıktısı şuna benzer olacaktır:
Checking /mnt/swapfile
Filesystem type is: ef53
Filesystem cylinder groups is approximately 314
File is stored in extents format
Blocksize of file /mnt/swapfile is 4096
File size of /mnt/swapfile is 1598029824 (390144 blocks)
First block: 919552
Last block: 1381375
Discontinuity: Block 2048 is at 923648 (was 921599)
Discontinuity: Block 102400 is at 1026048 (was 1023999)
Discontinuity: Block 124928 is at 1116160 (was 1048575)
/mnt/swapfile: 4 extents found
Eğer yukarıdaki çıktıyı alamıyorsanız, e2fsprogs’un yeni sürümünden kaynaklanıyor, çıktı yapısı değişmiş vaziyette zira:
sudo filefrag -v /swap/dosyası
Örnek:
Filesystem type is: ef53
File size of /mnt/swapfile is 1598029824 (390144 blocks, blocksize 4096)
ext logical physical expected length flags
0 0 919552 2048
1 2048 923648 921599 32768
2 34816 956416 32768
3 67584 989184 32768
4 100352 1021952 2048
5 102400 1026048 1023999 22528
6 124928 1116160 1048575 32768
7 157696 1148928 32768
8 190464 1181696 32768
9 223232 1214464 32768
10 256000 1247232 32768
11 288768 1280000 32768
12 321536 1312768 32768
13 354304 1345536 32768
14 387072 1378304 3072 eof
/mnt/swapfile: 4 extents found
Örnekte de belirttiğim gibi, ilk satırdaki physical değerini almanız yeterlidir.
First block değerini özellikle koyu yazdım, çünkü resume_offset için kullanılacak değer First Block değeridir.
Örneğe göre, benim kullanmam gereken resume_offset değeri 919552. Ayrıca /mnt bölümüm de /dev/sda1 içerisinde. Takas dosyasını kök dizininin bağlı olduğu bölümden farklı bir disk bölümünde tutacaksanız, resume= için o disk bölümünü tanımlamayı unutmayın, resume_offset değişmeyecektir.
Sonuç olarak /boot/grub/menu.lst dosyam şöyle şekillendi:
# (0) Arch Linux
title Arch Linux [/boot/vmlinuz26]
root (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda1 ro quiet resume=/dev/sda1 resume_offset=919552
initrd /boot/kernel26.img
Bu swap dosyası kullananlar için bir örnek idi. Eğer siz swap için “bölüm” kullanıyorsanız ve farzedelim ki o bölüm /dev/sda4 ise, örnek bir menu.lst şöyledir:
# (0) Arch Linux
title Arch Linux [/boot/vmlinuz26]
root (hd0,0)
kernel /boot/vmlinuz26 root=/dev/sda1 ro quiet resume=/dev/sda4
initrd /boot/kernel26.img
Unutmayın, swap “dosyanız” hangi disk bölümünde ise, resume= için o bölümü kullanmalısınız. Bende swap dosyası sda1 altında olduğu için, resume=/dev/sda1 kullandım.
Güzeldi bu…
Dostum çok güzel izah etmişsin, Bir de swap’ın hdd olarak değil de dosya olarak tutma tercihindeki belirleyenleri anlatmanı rica edeceğim.
İyi çalışmalar
@orkun
swap için disk bölümü açmak istemiyorum, o yüzden
herhangi bir performans farkı yok, performans farkı 2.4 serisi çekirdeklerde oluyormuş.
Çalıştı, sağolasın =) Böylece resume=’nin ne ayak olduğunu öğrendik.
Nvidia kapalı kaynak kodlu sürücüleri sağolsun, tuxonice-sources kullanmadan hibernate bana hayal gibi duruyor.. Senin yazıdan gaza gelip uzun zaman sonra bir daha denedim 2.6.30-rc4-zen0 ile.. Cık.. Ekran kararıyor, mal mal bakışıyoruz sistemle halen..
Çok güzel izah etmişsin sağolasın kardeşim. En kısa zamada uygulayacağım ancak ecemi olduğum için bir hata yapmaktan korkuyorum
thanks for the nice tutorial ! it helped.
@Francois
Haha nice to hear that, the article is in Turkish btw.
ben lınuxta yenuıyım . bun u resımlı veya goruntulu olşarak anlatma ımkanı var mıdır ?
birde bazen live lınux kulalnıyoruz . Onlarada swap dosaysı yapma mkanı varmıdır , performans artırmak için
dd if=/dev/zero of=/mnt/swapfile bs=1M count=512
Böylelikle /mnt/swapfile adı altında 512Mb’lık bir dosya oluşturduk. Bu dosyayı swap haline getirmek için:
mkswap /mnt/swapfile
swapon /mnt/swapfile
Böylece 3 komutta swap dosyası oluşturup, swap olarak tanıtıp, sisteme bağladık.
MERHABA BU KOMUTLARI SIRASIYLA CONSOLDA MI VERIYORUZ . BU 3 ADIMI YAPTIGIMIZDA SWAP LANIMIZ KULLANIMA ACILABILIR Mİ?
@semn
Evet o üç komutu da konsolda vereceksin, verdikten sonra takas alanı oluştuğunu göreceksin (free komutu ile görebilirsin). Ayrıca resimli anlatım tamamen mantıksızlık olur, adı üzerinde suspend-to-disk
tesekkurler

windowsta pagefile kullanıyordum
linuxtada swapfile kullanmya basladım 512 Mb
Selam Samed..
Daha önce de okuduğum bri yazındı.. Yapmak bugün kısmet oldu kurarken swap dosyası oluşturmadığım için.. Benim bir sorum var.. 3 komutla swap’ı oluşturdum.. “free” komutu ile swap bölümü görünüyor ancak fstabda göremedim.. Bu oluşturduğumuz swap sistemi açtığımızda otomatik on oluyor mu ?
pwnography ~ cat /etc/fstab
#
# /etc/fstab: static file system information
#
#
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0
#/dev/cdrom /media/cd auto ro,user,noauto,unhide 0 0
#/dev/dvd /media/dvd auto ro,user,noauto,unhide 0 0
#/dev/fd0 /media/fl auto user,noauto 0 0
/dev/sda4 / ext4 defaults 0 1
/dev/sda1 /mnt/windows ntfs-3g defaults,locale=en_US.utf8 0 0
/dev/sdb1 /mnt/depo ntfs-3g defaults,locale=en_US.utf8 0 0
@Murat
, fstab’a yazılacakları orada belirttim çünkü 
Yazının başını tekrar gözden geçir bence
[...] [...]