1Using swap files with software suspend (swsusp) 2 (C) 2006 Rafael J. Wysocki <rjw@sisk.pl> 3 4The Linux kernel handles swap files almost in the same way as it handles swap 5partitions and there are only two differences between these two types of swap 6areas: 7(1) swap files need not be contiguous, 8(2) the header of a swap file is not in the first block of the partition that 9holds it. From the swsusp's point of view (1) is not a problem, because it is 10already taken care of by the swap-handling code, but (2) has to be taken into 11consideration. 12 13In principle the location of a swap file's header may be determined with the 14help of appropriate filesystem driver. Unfortunately, however, it requires the 15filesystem holding the swap file to be mounted, and if this filesystem is 16journaled, it cannot be mounted during resume from disk. For this reason to 17identify a swap file swsusp uses the name of the partition that holds the file 18and the offset from the beginning of the partition at which the swap file's 19header is located. For convenience, this offset is expressed in <PAGE_SIZE> 20units. 21 22In order to use a swap file with swsusp, you need to: 23 241) Create the swap file and make it active, eg. 25 26# dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k> 27# mkswap <swap_file_path> 28# swapon <swap_file_path> 29 302) Use an application that will bmap the swap file with the help of the 31FIBMAP ioctl and determine the location of the file's swap header, as the 32offset, in <PAGE_SIZE> units, from the beginning of the partition which 33holds the swap file. 34 353) Add the following parameters to the kernel command line: 36 37resume=<swap_file_partition> resume_offset=<swap_file_offset> 38 39where <swap_file_partition> is the partition on which the swap file is located 40and <swap_file_offset> is the offset of the swap header determined by the 41application in 2) (of course, this step may be carried out automatically 42by the same application that determines the swap file's header offset using the 43FIBMAP ioctl) 44 45OR 46 47Use a userland suspend application that will set the partition and offset 48with the help of the SNAPSHOT_SET_SWAP_AREA ioctl described in 49Documentation/power/userland-swsusp.txt (this is the only method to suspend 50to a swap file allowing the resume to be initiated from an initrd or initramfs 51image). 52 53Now, swsusp will use the swap file in the same way in which it would use a swap 54partition. In particular, the swap file has to be active (ie. be present in 55/proc/swaps) so that it can be used for suspending. 56 57Note that if the swap file used for suspending is deleted and recreated, 58the location of its header need not be the same as before. Thus every time 59this happens the value of the "resume_offset=" kernel command line parameter 60has to be updated. 61