标签 交换分区 下的文章

我们使用 LVM 进行灵活的卷管理,为什么我们不能将 LVM 用于交换分区呢?

这可以让用户在需要时增加交换分区。如果你升级系统中的内存,则需要添加更多交换空间。这有助于你管理运行需要大量内存的应用的系统。

可以通过三种方式创建交换分区

  • 创建一个新的交换分区
  • 创建一个新的交换文件
  • 在现有逻辑卷(LVM)上扩展交换分区

建议创建专用交换分区而不是交换文件。

建议阅读:

Linux 中推荐的交换大小是多少?

什么是交换空间

当物理内存 (RAM) 已满时,将使用 Linux 中的交换空间。当物理内存已满时,内存中的非活动页将移到交换空间。

这有助于系统连续运行应用程序,但它不能当做是更多内存的替代品。

交换空间位于硬盘上,因此它不能像物理内存那样处理请求。

如何使用 LVM 创建交换分区

由于我们已经知道如何创建逻辑卷,所以交换分区也是如此。只需按照以下过程。

创建你需要的逻辑卷。在我这里,我要创建 5GB 的交换分区。

$ sudo lvcreate -L 5G -n LogVol_swap1 vg00
 Logical volume "LogVol_swap1" created.

格式化新的交换空间。

$ sudo mkswap /dev/vg00/LogVol_swap1
Setting up swapspace version 1, size = 5 GiB (5368705024 bytes)
no label, UUID=d278e9d6-4c37-4cb0-83e5-2745ca708582

将以下条目添加到 /etc/fstab 中。

# vi /etc/fstab
/dev/mapper/vg00-LogVol_swap1 swap swap defaults 0 0

启用扩展逻辑卷。

$ sudo swapon -va
swapon: /swapfile: already active -- ignored
swapon: /dev/mapper/vg00-LogVol_swap1: found signature [pagesize=4096, signature=swap]
swapon: /dev/mapper/vg00-LogVol_swap1: pagesize=4096, swapsize=5368709120, devsize=5368709120
swapon /dev/mapper/vg00-LogVol_swap1

测试交换空间是否已正确添加。

$ cat /proc/swaps
Filename                Type        Size    Used    Priority
/swapfile file      1459804 526336  -1
/dev/dm-0 partition 5242876 0   -2

$ free -g
 total used free shared buff/cache available
Mem: 1 1 0 0 0 0
Swap: 6 0 6

如何使用 LVM 扩展交换分区

只需按照以下过程来扩展 LVM 交换逻辑卷。

禁用相关逻辑卷的交换。

$ sudo swapoff -v /dev/vg00/LogVol_swap1
swapoff /dev/vg00/LogVol_swap1

调整逻辑卷的大小。我将把交换空间从 5GB 增加到 11GB

$ sudo lvresize /dev/vg00/LogVol_swap1 -L +6G
 Size of logical volume vg00/LogVol_swap1 changed from 5.00 GiB (1280 extents) to 11.00 GiB (2816 extents).
 Logical volume vg00/LogVol_swap1 successfully resized.

格式化新的交换空间。

$ sudo mkswap /dev/vg00/LogVol_swap1
mkswap: /dev/vg00/LogVol_swap1: warning: wiping old swap signature.
Setting up swapspace version 1, size = 11 GiB (11811155968 bytes)
no label, UUID=2e3b2ee0-ad0b-402c-bd12-5a9431b73623

启用扩展逻辑卷。

$ sudo swapon -va
swapon: /swapfile: already active -- ignored
swapon: /dev/mapper/vg00-LogVol_swap1: found signature [pagesize=4096, signature=swap]
swapon: /dev/mapper/vg00-LogVol_swap1: pagesize=4096, swapsize=11811160064, devsize=11811160064
swapon /dev/mapper/vg00-LogVol_swap1

测试逻辑卷是否已正确扩展。

$ free -g
 total used free shared buff/cache available
Mem: 1 1 0 0 0 0
Swap: 12 0 12

$ cat /proc/swaps
Filename                Type        Size    Used    Priority
/swapfile file      1459804 237024  -1
/dev/dm-0 partition 11534332    0   -2

via: https://www.2daygeek.com/how-to-create-extend-swap-partition-in-linux-using-lvm/

作者:Ramya Nuvvula 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

交换分区在物理内存(RAM)被填满时用来保持内存中的内容。当 RAM 被耗尽,Linux 会将内存中不活动的页移动到交换空间中,从而空出内存给系统使用。虽然如此,但交换空间不应被认为是物理内存的替代品。

大多数情况下,建议交换内存的大小为物理内存的 1 到 2 倍。也就是说如果你有 8GB 内存, 那么交换空间大小应该介于8-16 GB。

若系统中没有配置交换分区,当内存耗尽后,系统可能会杀掉正在运行中的进程/应用,从而导致系统崩溃。在本文中,我们将学会如何为 Linux 系统添加交换分区,我们有两个办法:

  • 使用 fdisk 命令
  • 使用 fallocate 命令

第一个方法(使用 fdisk 命令)

通常,系统的第一块硬盘会被命名为 /dev/sda,而其中的分区会命名为 /dev/sda1/dev/sda2。 本文我们使用的是一块有两个主分区的硬盘,两个分区分别为 /dev/sda1/dev/sda2,而我们使用 /dev/sda3 来做交换分区。

首先创建一个新分区,

$ fdisk /dev/sda

n 来创建新分区。系统会询问你从哪个柱面开始,直接按回车键使用默认值即可。然后系统询问你到哪个柱面结束, 这里我们输入交换分区的大小(比如 1000MB)。这里我们输入 +1000M

swap

现在我们创建了一个大小为 1000MB 的磁盘了。但是我们并没有设置该分区的类型,我们按下 t 然后回车,来设置分区类型。

现在我们要输入分区编号,这里我们输入 3,然后输入磁盘分类号,交换分区的分区类型为 82 (要显示所有可用的分区类型,按下 l ) ,然后再按下 w 保存磁盘分区表。

swap

再下一步使用 mkswap 命令来格式化交换分区:

$ mkswap /dev/sda3

然后激活新建的交换分区:

$ swapon /dev/sda3

然而我们的交换分区在重启后并不会自动挂载。要做到永久挂载,我们需要添加内容到 /etc/fstab 文件中。打开 /etc/fstab 文件并输入下面行:

$ vi /etc/fstab

/dev/sda3 swap  swap  default  0  0

保存并关闭文件。现在每次重启后都能使用我们的交换分区了。

第二种方法(使用 fallocate 命令)

我推荐用这种方法因为这个是最简单、最快速的创建交换空间的方法了。fallocate 是最被低估和使用最少的命令之一了。 fallocate 命令用于为文件预分配块/大小。

使用 fallocate 创建交换空间,我们首先在 / 目录下创建一个名为 swap_space 的文件。然后分配 2GB 到 swap_space 文件:

$ fallocate -l 2G /swap_space

我们运行下面命令来验证文件大小:

$ ls -lh /swap_space

然后更改文件权限,让 /swap_space 更安全:

$ chmod 600 /swap_space

这样只有 root 可以读写该文件了。我们再来格式化交换分区(LCTT 译注:虽然这个 swap_space 是个文件,但是我们把它当成是分区来挂载):

$ mkswap /swap_space

然后启用交换空间:

$ swapon -s

每次重启后都要重新挂载磁盘分区。因此为了使之持久化,就像上面一样,我们编辑 /etc/fstab 并输入下面行:

/swap_space swap  swap  sw  0  0 

保存并退出文件。现在我们的交换分区会一直被挂载了。我们重启后可以在终端运行 free -m 来检查交换分区是否生效。

我们的教程至此就结束了,希望本文足够容易理解和学习,如果有任何疑问欢迎提出。


via: http://linuxtechlab.com/create-swap-using-fdisk-fallocate/

作者:Shusain 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

用户可以在任何 Linux 操作系统的安装过程中或者是其它必要的时候创建交换空间。如果你在安装 Linux 的时候忘记了创建或是你想要再增加交换分区的空间,你随时都可以再创建或增加。

有时候在你安装后摇升级 RAM 的时候需要增加一点交换分区的空间,比如你要将你的系统的 RAM 从 1GB 升级到 2GB 你,那么你就不得不将你的交换分区空间也升级一下(从 2GB 到 4GB),这是因为它使用的容量是物理 RAM 的双倍容量。(LCTT 译注:其实这里是个误区,交换分区不一定非得是双倍的物理内存容量,只是惯例如此。事实上,如果你的物理内存足够的话,你完全可以不用交换分区——在这里的情形下,或许你增加了物理内存,就没必要增加交换分区大小了。)

交换空间是当物理内存(RAM 随机存取存储器)的用量已满时,被保留用作虚拟内存的磁盘上的空间。 如果系统在 RAM 满载时需要更多的内存资源,内存中的非活动页面将被移动到交换空间,这样可以帮助系统运行应用程序更多的时间,但不应该把它当做 RAM 的扩展。

建议你创建一个专用的交换分区,但是如果你没有可用的分区,那么可以使用交换文件,或交换分区和交换文件的组合。 交换空间通常建议用户至少 4 GB,用户也可以根据自己的要求和环境创建交换空间。

我发现大部分 VM 和 云服务器都没有交换分区,所以在这种情况下,我们可以使用以下三种方法创建,扩展或增加交换空间。

如何检测当前交换分区大小

通过 free & swapon 命令来检测当前的交换分区空间的大小。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.3G        139M         45M        483M        426M
Swap:          2.0G        655M        1.4G

$ swapon --show
NAME      TYPE      SIZE   USED PRIO
/dev/sda5 partition   2G 655.2M   -1

上面的输出显示了当前的交换分区空间是 2GB

方法 1 : 通过 fallocate 命令创建交换文件

fallocate 程序是立即创建预分配大小的文件的最佳方法。

下面这个命令会创建一个 1GB 大小 的 /swapfile

$ sudo fallocate -l 1G /swapfile

检查一下创建的文件的大小是否正确。

$ ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Jun  7 09:49 /swapfile

将该文件的权限设置为 600 这样只有 root 用户可以访问这个文件。

$ sudo chmod 600 /swapfile

通过运行以下的命令来将此文件转换为交换文件。

$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=cda50e0e-41f3-49c7-af61-b8cb4a33a464

通过运行以下的命令来使交换文件生效。

$ sudo swapon /swapfile

将新创建的交换文件添加到 fstab 文件中,这样交换分区空间的修改即使在重启后也可以生效。

$ vi /etc/fstab

/swapfile  swap  swap  defaults  0 0

检查一下新创建的交换文件。

$ swapon --show
NAME      TYPE       SIZE   USED PRIO
/dev/sda5 partition    2G 657.8M   -1
/swapfile file      1024M     0B   -2

现在我可以看到一个新的 1GB 的 /swapfile1 文件了。重启系统以使新的交换文件生效。

方法 2 : 通过 dd 命令来创建交换文件

dd 命令是另一个实用程序,可以帮助我们立即创建预分配大小的文件。

以下 dd 命令将创建 1GB 的 /swapfile1

$ sudo dd if=/dev/zero of=/swapfile1 bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 16.6154 s, 64.6 MB/s

详解:

  • if=/dev/zero 是输入文件,/dev/zero 是类 Unix 操作系统中的一个特殊文件,它提供从它读取的尽可能多的空字符(ASCII NUL,0x00)。
  • of=/swapfile1 设置输出文件。
  • bs=1G 一次性读写的大小为 1GB
  • count=1 仅复制一个输入块

检查一下创建的文件的大小是否正确。

$ ls -lh /swapfile1
-rw-r--r-- 1 root root 1.0G Jun  7 09:58 /swapfile1

将该文件的权限设置为 600 这样只有 root 用户可以访问这个文件。

$ sudo chmod 600 /swapfile1

通过运行以下的命令来将此文件转换为交换文件。

$ sudo mkswap /swapfile1
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=96def6d7-b2da-4954-aa72-aa32316ec993

通过运行以下的命令来使交换文件生效。

$ sudo swapon /swapfile1

将新创建的交换文件添加到 fstab 文件中,这样交换分区空间的修改即使在重启后也可以生效。

$ vi /etc/fstab

/swapfile1  swap  swap  defaults  0 0

检查新创建的交换文件。

$ swapon --show
NAME       TYPE       SIZE USED PRIO
/dev/sda5  partition    2G 1.3G   -1
/swapfile  file      1024M   0B   -2
/swapfile1 file      1024M   0B   -3

现在我可以看到一个新的 1GB 的 /swapfile1 了。重启系统以使新的交换文件生效。

方法 3 : 通过硬盘分区来创建交换文件

我们也推荐使用通过硬盘分区的方式来创建交换分区。

如果你已经在你的另一个硬盘上通过 fdisk 命令创建了一个新的分区,假设我们已经创建了一个叫做 /dev/sda4 的分区。

使用 mkswap 命令来将这个分区转换成交换分区。

$ sudo mkswap /dev/sda4

通过运行以下命令来使交换文件生效。

$ sudo swapon /dev/sda4

把新增的交换文件添加到 fstab 文件中,这样即使是重启了系统交换分区的修改也能生效。

$ vi /etc/fstab

/dev/sda4  swap  swap  defaults  0 0

检查新创建的交换文件。

$ swapon --show
NAME       TYPE       SIZE USED PRIO
/dev/sda5  partition    2G 1.3G   -1
/swapfile  file      1024M   0B   -2
/swapfile1 file      1024M   0B   -3
/dev/sda4  partition    1G   0B   -4

我可以看到新的交换分区 1GB 的 /dev/sda4。重启系统就可以使用新的交换分区了。

(题图:Pixabay,CC0)


via: http://www.2daygeek.com/add-extend-increase-swap-space-memory-file-partition-linux/

作者:2DAYGEEK 译者:chenxinlong 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

几天前我们写了一篇关于在 Linux 中 3 种创建交换文件的方法,它们是常见的方法,但是需要人工操作。

今天我发现了一个 Gary Stafford 写的 shell 小脚本(两个 shell 脚本,一个用于创建交换文件,另外一个用于移除交换文件),它可以帮助我们在 Linux 中创建/移除并且自动挂载交换文件。

默认这个脚本创建并挂载 512MB 的交换文件。如果你想要更多的交换空间和不同的文件名,你需要相应地修改脚本。修改脚本不是一件困难的事,因为这是一个容易上手而且很小的脚本。

推荐阅读: Linux 中 3 种简易创建或扩展交换空间的方法

如何检查当前交换文件大小

使用 freeswapon 命令检查已经存在交换空间。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.3G        139M         45M        483M        426M
Swap:          2.0G        655M        1.4G

$ swapon --show
NAME      TYPE      SIZE   USED PRIO
/dev/sda5 partition   2G 655.2M   -1

上面的输出显示我当前的交换空间是 2GB

创建交换文件

创建 create_swap.sh 文件并添加下面的内容来自动化交换空间的创建和挂载。

$ nano create_swap.sh
#!/bin/sh

# size of swapfile in megabytes
swapsize=1024

# does the swap file already exist?
grep -q "swapfile" /etc/fstab

# if not then create it
if [ $? -ne 0 ]; then
    echo 'swapfile not found. Adding swapfile.'
    fallocate -l ${swapsize}M /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    echo '/swapfile none swap defaults 0 0' >> /etc/fstab
else
    echo 'swapfile found. No changes made.'
fi

echo '--------------------------------------------'
echo 'Check whether the swap space created or not?'
echo '--------------------------------------------'
swapon --show

给文件添加执行权限。

$ sudo +x create_swap.sh

运行文件来创建和挂载交换文件。

$ sudo ./create_swap.sh

swapfile not found. Adding swapfile.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=d9004261-396a-4321-a45f-9923e3e1328c
--------------------------------------------
Check whether the swap space created or not?
--------------------------------------------
NAME      TYPE       SIZE   USED PRIO
/dev/sda5 partition    2G 954.1M   -1
/swapfile file      1024M     0B   -2

你可以看到新的 1024M 的 swapfile。重启系统以使用新的交换文件。

移除交换文件

如果不再需要交换文件,接着创建 remove_swap.sh 文件并添加下面的内容来移除交换文件以及它的 /etc/fstab 挂载点。

$ nano remove_swap.sh
#!/bin/sh

# does the swap file exist?
grep -q "swapfile" /etc/fstab

# if it does then remove it
if [ $? -eq 0 ]; then
    echo 'swapfile found. Removing swapfile.'
    sed -i '/swapfile/d' /etc/fstab
    echo "3" > /proc/sys/vm/drop_caches
    swapoff -a
    rm -f /swapfile
else
    echo 'No swapfile found. No changes made.'
fi

echo '--------------------------------------------'
echo 'Check whether the swap space removed or not?'
echo '--------------------------------------------'
swapon --show

并给文件添加可执行权限。

$ sudo +x remove_swap.sh

运行脚本来移除并卸载交换文件。

$ sudo ./remove_swap.sh

swapfile found. Removing swapfile.
swapoff: /dev/sda5: swapoff failed: Cannot allocate memory
--------------------------------------------
Check whether the swap space removed or not?
--------------------------------------------
NAME      TYPE      SIZE   USED PRIO
/dev/sda5 partition   2G 951.8M   -1

via: http://www.2daygeek.com/shell-script-create-add-extend-swap-space-linux/

作者:2DAYGEEK 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

想像一种情景,当我们的Linux系统用尽交换空间时,在这种情况下,我们想要使用swap分区扩展交换空间,但在某些情况下磁盘上已经没有可用的空闲分区了,致使我们不能把它扩大。

因此,在这种情况下,我们可以使用交换文件增加swap空间。

以下是使用交换文件在Linux上扩展swap空间的方法

让我们首先检查现有的交换空间/分区的大小,使用命令 ‘free -m‘ 或者 ‘swapon -s

free-output-with-swap

我的交换分区大小是2 GB,我们将把交换空间扩展1GB。

第一步:使用下面的dd命令创建大小为1GB交换文件

[root@linuxtechi ~]# dd if=/dev/zero of=/swap_file bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 414.898 s, 2.6 MB/s
[root@linuxtechi ~]#

根据你的需要替换 ‘bs‘ 和 ‘count‘ 的大小.

第二步:设置交换文件权限为600

[root@linuxtechi ~]# chmod 600 /swap_file

第三步:用文件开启交换区(swap\_file)

用mkswap命令开启交换区

[root@linuxtechi ~]# mkswap /swap_file
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=f7b3ae59-c09a-4dc2-ba4d-c02abb7db33b
[root@linuxtechi ~]#

第四步:在fstab文件中添加交换文件条目

在fstab文件中添加以下条目,以便交换文件每次重启后互能继续使用.

/swap_file  swap  swap  defaults  0 0

swap-file-fstab-entry

第五步:用命令 ‘mkswap on’ 启用交换文件.

[root@linuxtechi ~]# swapon /swap_file
[root@linuxtechi ~]#

第六步:现在查看交换空间

swap-space-after-extension

Note: 为了避免出现意外的情况,如下所示使用swapoff命令关闭它,仅在需要使用时,使用步骤5所示的swapon命令,重新启用交换文件。

[root@linuxtechi ~]# swapoff /swap_file
[root@linuxtechi ~]#

请分享您的宝贵意见或者评论此文章。


via: http://www.linuxtechi.com/extend-swap-space-using-swap-file-in-linux/

作者:Pradeep Kumar 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出