什么是交换空间?
有推荐的吗尺寸用于交换空间?
在那儿优点使用文件作为交换空间而不是磁盘分区?
我怎样才能得到信息关于我的电脑的内存使用情况?
哪个工具我应该为此目的创建文件吗?
我如何创造交换文件?
我如何删除交换文件?
我该如何设置优先事项如果我有多个交换空间?
如何让系统使用更多或更少的交换空间(交换性),与主存储器(RAM)相比?
答案1
1.什么是交换空间
交换意味着改变、通勤、交换、转移、替代、转换、交易。 (来源:韦氏词典)
交换空间(文件或分区)是虚拟内存的一种,是真实内存 (RAM) 的扩展。它位于计算机的存储设备(HD 或 SSD)上。由于 HD 和 SSD 上的数据传输速度比 RAM 上慢,因此操作系统 (OS) 仅在 RAM 不足时才使用它。内存不足会导致计算机死机和崩溃。
2. 交换规模
分配(保留)作为交换区的大小基本上取决于 4 个方面:
- 计算机有多少内存。
- 操作系统和运行的应用程序需要多少 RAM。
- 计算机的 HD 或 SSD 有多少空间。
- 如果您使计算机休眠。
一般建议将 RAM 大小设置为两倍。
3. 文件相对于分区的优点
文件更适合维护目的。它们可以轻松调整大小和重新分配。另一方面,分区可能很难甚至不可能做到这一点。
4.信息检索
以人类可读的格式显示总内存信息(-h):
free -h
显示交换文件/分区信息:
sudo swapon
交换分区通常是/dev/sda3
;而交换文件通常放置在根目录(/)并命名为“swapfile”(/swapfile
)。
5.文件创建工具
DD:用于复制和转换文件的实用程序。它用空块填充分配的空间。创建连续的文件。
错误定位:“用于操作文件分配的磁盘空间”(联机帮助页)。为文件分配空间,但不使用块填充该空间。创建不连续(稀疏)文件。
内核中的交换文件实现期望能够直接写入文件,而不需要文件系统的帮助。这是有漏洞的文件或 Btrfs 等文件系统上的写时复制文件的问题。 cp(1) 或 truncate(1) 等命令会创建有漏洞的文件。这些文件将被 swapon 拒绝。由fallocate 创建的预分配文件也可能被解释为有漏洞的文件,具体取决于文件系统。自 Linux 4.18 起,XFS 支持预分配的交换文件。创建交换文件的最便携的解决方案是使用 dd 和 /dev/zero。
(来源:swapon 联机帮助页)
DD是最推荐的创建交换文件的方法,因为这种特殊类型的文件不能包含漏洞。
参考:
6.创建交换文件的过程
a) 创建文件 (8GB)。
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=$((8*1024))
参数:
- if = 输入文件(标准输入)
- of=输出文件
- bs = 块大小
- 计数 = 块数
b) 限制访问权限
仅向 root 用户(文件所有者)授予读写权限。
sudo chmod 600 /swapfile
c) 使文件可交换
sudo mkswap /swapfile
d) 打开系统的交换文件
sudo swapon /swapfile
e) 使改变永久化
将以下行添加到文件系统表的末尾(系统表):
/swapfile none swap sw 0 0
sudo nano /etc/fstab
参数:
- 文件系统 = 交换文件的路径和名称 (
/swapfile
) - 挂载点 = 挂载在文件系统内部 (
none
) - Type = 表明这是一个交换文件 (
swap
) - 选项 = 交换文件选项 (
sw
) - 转储 = 与本例无关 (
0
) - 通过 = 与本例无关 (
0
)
7. 删除交换文件
a) 关闭交换文件
sudo swapoff /swapfile
b) 删除交换文件
sudo rm /swapfile
c) 使改变永久化
注释或删除文件中的相应条目fstab
。
sudo nano /etc/fstab
如果你想删除交换分区,按照删除交换文件的说明进行操作,但删除步骤除外,该步骤需要使用 fdisk、parted、gparted、gnome disks 或类似工具来实现。
如果你想更改交换文件大小,将其关闭 (
swapoff
),通过创建一个具有相同名称和新大小的新文件来覆盖它,使其可交换 (mkswap
),然后将其打开 (swapon
)。如果使用相同的名称,则fstab
不需要更新。
8. 交换空间的优先级
(如果您只有一个交换空间,请忽略此部分。)
如果您有多个交换空间(分区或文件),您可能需要向内核指示哪一个交换空间具有更高的优先级,因此应该提前使用。
优先级范围从0到32767。数字越大,优先级越高。
默认优先级为-2。如果您未指定,则会自动设置。
如果多个交换空间具有相同的优先级,则它们将交替使用。
优先级应设置为
fstab
文件上的相应行
/swapfile none swap sw,pri=5 0 0
其中“pri”代表“优先级”,“5”是本示例中使用的级别。
9. 交换性
swappiness 参数控制内核将内容从物理内存移至交换磁盘的趋势(Ubuntu 社区帮助 Wiki:交换常见问题解答)。更具体地说,它是 Linux 内核的一个属性,它改变了换出运行时内存与从系统页面缓存中删除页面之间的平衡。 Swappiness 可设置为 0 到 100 之间的值(含 0 和 100)。较低的值意味着内核将尝试尽可能避免交换,而较高的值将使内核积极尝试使用交换空间(红帽客户门户 - 知识库)。
默认交换值是 60。对于大多数桌面来说,这应该没问题。但是,服务器可能会使用较低的值,例如 10 甚至 1,具体取决于其用途。
值为 0 表示“将交换空间作为最后的手段”。
如果值为 100,交换空间将用作 RAM。
检查交换值
cat /proc/sys/vm/swappiness
进行短暂的改变
暂时将值更改为 10。它将随着会话重新启动而重置。
sudo sysctl vm.swappiness=10
做出持久的改变
要进行持久更改,请使用“vm.swappiness=10”行编辑下面的文件
sudo nano /etc/sysctl.conf