Root/
1 | Using swap files with software suspend (swsusp) |
2 | (C) 2006 Rafael J. Wysocki <rjw@sisk.pl> |
3 | |
4 | The Linux kernel handles swap files almost in the same way as it handles swap |
5 | partitions and there are only two differences between these two types of swap |
6 | areas: |
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 |
9 | holds it. From the swsusp's point of view (1) is not a problem, because it is |
10 | already taken care of by the swap-handling code, but (2) has to be taken into |
11 | consideration. |
12 | |
13 | In principle the location of a swap file's header may be determined with the |
14 | help of appropriate filesystem driver. Unfortunately, however, it requires the |
15 | filesystem holding the swap file to be mounted, and if this filesystem is |
16 | journaled, it cannot be mounted during resume from disk. For this reason to |
17 | identify a swap file swsusp uses the name of the partition that holds the file |
18 | and the offset from the beginning of the partition at which the swap file's |
19 | header is located. For convenience, this offset is expressed in <PAGE_SIZE> |
20 | units. |
21 | |
22 | In order to use a swap file with swsusp, you need to: |
23 | |
24 | 1) 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 | |
30 | 2) Use an application that will bmap the swap file with the help of the |
31 | FIBMAP ioctl and determine the location of the file's swap header, as the |
32 | offset, in <PAGE_SIZE> units, from the beginning of the partition which |
33 | holds the swap file. |
34 | |
35 | 3) Add the following parameters to the kernel command line: |
36 | |
37 | resume=<swap_file_partition> resume_offset=<swap_file_offset> |
38 | |
39 | where <swap_file_partition> is the partition on which the swap file is located |
40 | and <swap_file_offset> is the offset of the swap header determined by the |
41 | application in 2) (of course, this step may be carried out automatically |
42 | by the same application that determines the swap file's header offset using the |
43 | FIBMAP ioctl) |
44 | |
45 | OR |
46 | |
47 | Use a userland suspend application that will set the partition and offset |
48 | with the help of the SNAPSHOT_SET_SWAP_AREA ioctl described in |
49 | Documentation/power/userland-swsusp.txt (this is the only method to suspend |
50 | to a swap file allowing the resume to be initiated from an initrd or initramfs |
51 | image). |
52 | |
53 | Now, swsusp will use the swap file in the same way in which it would use a swap |
54 | partition. 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 | |
57 | Note that if the swap file used for suspending is deleted and recreated, |
58 | the location of its header need not be the same as before. Thus every time |
59 | this happens the value of the "resume_offset=" kernel command line parameter |
60 | has to be updated. |
61 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9