Linux交换区简介
Swap partition
Swap file

Linux交换区简介

Linux交换区相当与Windows的虚拟内存,大小通常要大于等于内存的大小。
交换空间可用于两个目的,弥补物理内存(RAM)过小的问题;以及PC睡眠的支持。
https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate

  • suspend (suspend to RAM)挂起到RAM方法会削减除RAM之外的大多数机器的电源,这是恢复机器状态所必需的。由于节省了大量电力,建议笔记本电脑在电池运行且盖子关闭(或用户处于非活动状态一段时间)时自动进入此模式。
  • hibernate (Suspend to disk)挂起到磁盘方法将机器的状态保存到swap交换空间并完全关闭计算机。打开机器电源后,状态将恢复。在此之前,功耗为零。
  • hybrid suspend 挂起到两种方法都会将机器的状态保存到swap交换空间,但不会关闭机器电源。相反,它调用通常挂起到RAM。因此,如果电池没有耗尽,系统可以从RAM恢复。如果电池电量耗尽,系统可以从磁盘恢复,这比从RAM恢复要慢得多,但机器的状态并没有丢失。

Linux交换区:可以使用独立的分区,也可以使用一个文件。
查看现有交换分区的几种方式:
$ swapon
NAME TYPESIZE USED PRIO
/dev/sda12 partition 8G 0B -2
$ swapon -show
Filename Type Size Used Priority
/dev/sda12partition 8386556 0 -2
$ free -h
totalusedfreesharedbuff/cache available
Mem:7.8Gi 2.3Gi 3.6Gi 280Mi 1.9Gi 4.9Gi
Swap: 8.0Gi0B 8.0Gi


Swap partition

查看/etc/fstab文件。
# /dev/sdb6
UUID=77727c05-e82e-426f-b1b2-9062be75ad62 /ext4 rw,relatime 0 1
# /dev/sdb7 LABEL=Shome
UUID=3591c8cd-47f7-4bf6-a417-e62b685f9144 /homeext4 rw,relatime 0 2
# /dev/sdb9
UUID=13802d9f-8485-4d1f-a08c-583abe64961f none swap defaults 0 0

$ lsblk -f
NAMEFSTYPE LABELUUID FSAVAIL FSUSE% MOUNTPOINT
sdb
├─sdb6ext4 Sarch77727c05-e82e-426f-b1b2-9062be75ad62 14.1G48% /
├─sdb7ext4 Shome3591c8cd-47f7-4bf6-a417-e62b685f9144 13G55% /home
└─sdb9swap13802d9f-8485-4d1f-a08c-583abe64961f[SWAP]

再增加一个交换区
$ sudo mkswap /dev/sda12
Setting up swapspace version 1, size = 8 GiB (8587833344 bytes)
no label, UUID=08aba37c-1b94-4d14-af39-cd416e0ecf57
$ sudo swapon /dev/sda12
$ swapon
NAME TYPESIZE USED PRIO
/dev/sdb9partition 8G 0B -2
/dev/sda12 partition 8G 0B -3

编辑/etc/fstab文件,添加sda12作为交换分区。
# /dev/sda12
UUID=08aba37c-1b94-4d14-af39-cd416e0ecf57 none swap defaults 0 0

删除一个交换分区,确保未被使用,可以重启后执行。
$ sudo swapoff /dev/sdb9
$ swapon
NAME TYPESIZE USED PRIO
/dev/sda12 partition 8G 0B -2
注:别忘了编辑/etc/fstab文件,删除掉/dev/sdb9交换区的信息行。


Swap file

https://wiki.archlinux.org/index.php/Swap#Swap_file
使用fallocate创建一个交换文件,单位可以使用(M = Mebibytes,G = Gibibytes)。
# fallocate -l 512M /swapfile
# fallocate -l 1G /swap
注意: fallocate可能会导致某些文件系统(例如F2FS)出现问题。[1]作为替代方案,使用dd更可靠,但速度更慢:
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress

# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

将交换文件添加到/etc/fstab文件
/swapfile none swap defaults 0 0

Remove swap file
# swapoff /swapfile
# rm -f /swapfile