Linux Swap 交换分区

交换分区是内核直接访问的硬盘空间,在内存不足时系统将部分内存置于交换分区,由于是硬盘访问速度会比物理内存慢。下图是推荐的物理内存和 swap 比例。


供参考

swappiness
系统有个 swappiness 值设置,决定内核向 swap 移动内存的大小和频率,默认值为 60. 可设置范围是 0-100 值越大使用 swap 越多。

# 查看设置
$ cat /proc/sys/vm/swappiness
60

下面命令修改 swappiness 值,其中 x 为 0-100 数值。

sudo sysctl vm.swappiness=x

释放 swap 空间
如果 swap 空间比较小,容易物理内存使用很少但是 swap 却满了,造成系统卡顿。这时候先关闭 swap 等待一段时间再打开,能手动释放 swap 空间。因为关闭 swap 时系统会将 swap 数据转移到物理内存。

# 关闭
$ sudo swapoff -a

# 然后等待一段时间

# 再打开
$ sudo swapon -a

添加 swap 分区
swap 空间太小系统容易卡顿,增加 swap 空间的好方法是买个新硬盘,并在新硬盘划一个分区用于 swap. 此外,LVM 逻辑卷和 swap file 也能用于增加 swap 空间。

下面将用未分区的 "/dev/sdb" 硬盘,示范添加 swap 分区步骤。

# 未分区硬盘
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
Disk model: ST12000NM009G   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

# 已分区硬盘
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
Disk model: ST12000NM0158   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: DA8570AB-053A-44D8-B034-5653F8BE1D03

Device        Start         End     Sectors  Size Type
/dev/sda1      2048    20000767    19998720  9.5G EFI System
/dev/sda2  20000768 22961715199 22941714432 10.7T Linux filesystem

用 fdisk 命令进行硬盘分区操作,需要有 sudo 权限,先查看命令的帮助。

$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
The size of this disk is 10.7 TiB (11756399230976 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

Created a new DOS disklabel with disk identifier 0x8f39e4ad.

Command (m for help): 

运行 fdisk 命令进入交互模式,按 m 命令并回车显示帮助。可见 n 命令添加新的分区,t 命令修改分区类型。

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

用 n 命令添加新分区,分区类型选择 p(主分区);分区第一个磁道用默认的 2048,结束磁道使用 "+32G" 表示设置分区大小为 32Gb。因为是用来做 swap 的,用 t 命令将分区类型修改为 82.最后 w 命令保存修改。

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4294967295, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4294967295, default 4294967295): +32G

Created a new partition 1 of type 'Linux' and of size 32 GiB.

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

此时查看硬盘,新添加的分区已自动命名为 "/dev/sdb1".

$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
Disk model: ST12000NM009G   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x8f39e4ad

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 67110911 67108864  32G 82 Linux swap / Solaris

用 mkswap 命令将其变为 swap 空间。其中 -L 设置标签。

$ sudo mkswap -L swapA /dev/sdb1
Setting up swapspace version 1, size = 32 GiB (34359734272 bytes)
LABEL=swapA, UUID=cad6ddce-6dcf-4abb-9cca-3854e7b880d0

修改 /etc/fstab 文件,添加新 swap 分区信息。

/dev/sdb1       swap    swap    defaults        0       0

打开新添加的 swap 空间。

$ sudo swapon -L swapA

查看可见已经打开,现在有 2 个 swap 空间。多个 swap 空间时会按照优先度使用,优先度高的 swap 空间满了,再用更低优先度 swap 空间。

$ swapon -s
Filename                Type        Size    Used    Priority
/swapfile                               file        2097148 0   -2
/dev/sdb1                               partition   33554428    0   -3

或者,移除不想要的 swap 空间。先关闭对应 swap 空间。

$ sudo swapoff /swapfile

关闭后在 /etc/fstab 文件将对应条目删除。并删除 swapfile 文件。

$ sudo rm -rf /swapfile

参考资料
Chapter 7. Swap Space Red Hat Enterprise Linux 5 | Red Hat Customer Portal
How to clear swap memory in Linux | Enable Sysadmin
How to add swap space in linux – The Geek Diary
10 fdisk Commands to Manage Linux Disk Partitions
5.3. Removing Swap Space

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容