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