|
@@ -0,0 +1,54 @@
|
|
|
+Using swap files with software suspend (swsusp)
|
|
|
+ (C) 2006 Rafael J. Wysocki <rjw@sisk.pl>
|
|
|
+
|
|
|
+The Linux kernel handles swap files almost in the same way as it handles swap
|
|
|
+partitions and there are only two differences between these two types of swap
|
|
|
+areas:
|
|
|
+(1) swap files need not be contiguous,
|
|
|
+(2) the header of a swap file is not in the first block of the partition that
|
|
|
+holds it. From the swsusp's point of view (1) is not a problem, because it is
|
|
|
+already taken care of by the swap-handling code, but (2) has to be taken into
|
|
|
+consideration.
|
|
|
+
|
|
|
+In principle the location of a swap file's header may be determined with the
|
|
|
+help of appropriate filesystem driver. Unfortunately, however, it requires the
|
|
|
+filesystem holding the swap file to be mounted, and if this filesystem is
|
|
|
+journaled, it cannot be mounted during resume from disk. For this reason to
|
|
|
+identify a swap file swsusp uses the name of the partition that holds the file
|
|
|
+and the offset from the beginning of the partition at which the swap file's
|
|
|
+header is located. For convenience, this offset is expressed in <PAGE_SIZE>
|
|
|
+units.
|
|
|
+
|
|
|
+In order to use a swap file with swsusp, you need to:
|
|
|
+
|
|
|
+1) Create the swap file and make it active, eg.
|
|
|
+
|
|
|
+# dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k>
|
|
|
+# mkswap <swap_file_path>
|
|
|
+# swapon <swap_file_path>
|
|
|
+
|
|
|
+2) Use an application that will bmap the swap file with the help of the
|
|
|
+FIBMAP ioctl and determine the location of the file's swap header, as the
|
|
|
+offset, in <PAGE_SIZE> units, from the beginning of the partition which
|
|
|
+holds the swap file.
|
|
|
+
|
|
|
+3) Add the following parameters to the kernel command line:
|
|
|
+
|
|
|
+resume=<swap_file_partition> resume_offset=<swap_file_offset>
|
|
|
+
|
|
|
+where <swap_file_partition> is the partition on which the swap file is located
|
|
|
+and <swap_file_offset> is the offset of the swap header determined by the
|
|
|
+application in 2). [Of course, this step may be carried out automatically
|
|
|
+by the same application that determies the swap file's header offset using the
|
|
|
+FIBMAP ioctl.]
|
|
|
+
|
|
|
+Now, swsusp will use the swap file in the same way in which it would use a swap
|
|
|
+partition. [Of course this means that the resume from a swap file cannot be
|
|
|
+initiated from whithin an initrd of initramfs image.] In particular, the
|
|
|
+swap file has to be active (ie. be present in /proc/swaps) so that it can be
|
|
|
+used for suspending.
|
|
|
+
|
|
|
+Note that if the swap file used for suspending is deleted and recreated,
|
|
|
+the location of its header need not be the same as before. Thus every time
|
|
|
+this happens the value of the "resume_offset=" kernel command line parameter
|
|
|
+has to be updated.
|