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