侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux mkswap命令用法详解:如何设置Linux交换区(附实例教程和注意事项)

Linux mkswap命令

Linux mkswap命令是用来设置Linux交换区的一个工具,它可以将一个磁盘分区或者一个文件作为交换区使用。交换区是一种扩展物理内存的方法,当物理内存不足时,可以将一些不常用的内存页面(page)换出到交换区,从而释放物理内存给其他更需要的进程使用。Linux mkswap命令可以指定交换区的大小、标签、UUID等选项,也可以检查交换区是否有坏块。创建交换区后,还需要使用swapon命令来启用交换区,通常在/etc/fstab文件中列出交换区的信息,以便在开机时自动启用交换区。

Linux mkswap命令适用的Linux版本

Linux mkswap命令适用于大多数Linux发行版,包括Ubuntu, Debian, Fedora, CentOS, Red Hat, SUSE, Arch Linux等。不同的Linux发行版可能会有一些细微的差别,比如安装方式、默认的交换区大小等。下面以Ubuntu和CentOS为例,介绍如何安装和使用mkswap命令。

Ubuntu

Ubuntu系统默认已经安装了mkswap命令,它属于util-linux包,可以使用以下命令查看版本信息:

[linux@bashcommandnotfound.cn ~]$ mkswap --version
mkswap from util-linux 2.36.1

如果没有安装,可以使用以下命令安装:

[linux@bashcommandnotfound.cn ~]$ sudo apt update
[linux@bashcommandnotfound.cn ~]$ sudo apt install util-linux

CentOS

CentOS系统也默认已经安装了mkswap命令,它也属于util-linux包,可以使用以下命令查看版本信息:

[linux@bashcommandnotfound.cn ~]$ mkswap --version
mkswap from util-linux 2.32.1

如果没有安装,可以使用以下命令安装:

[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install util-linux

注意:CentOS 7和CentOS 8的安装工具不太一样,CentOS 8使用dnf代替了yum,所以安装命令为:

[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install util-linux

Linux mkswap命令的基本语法

Linux mkswap命令的基本语法格式如下:

mkswap [选项] 设备或文件 [大小]

其中,设备或文件是要设置为交换区的磁盘分区或文件的名称,比如/dev/sdb7或/swapfile。大小是可选的,用来指定交换区的大小,单位是1024字节的块。如果省略,mkswap会使用整个分区或文件的大小。手动指定大小是非常危险的,一旦输入错误,可能会破坏磁盘上的数据。

Linux mkswap命令的常用选项说明

Linux mkswap命令的常用选项说明如下表所示:

选项说明
-c在创建交换区之前,检查设备或文件是否有坏块,如果有,打印出坏块的数量
-f强制执行,即使命令是愚蠢的,比如创建一个比分区或文件还大的交换区,或者在有分区表或整个磁盘上创建交换区
-L label为交换区指定一个标签,方便使用swapon命令通过标签来启用交换区
-p size指定页面大小,单位是字节,这个选项通常不需要,mkswap会从内核中读取页面大小
-U UUID指定交换区的UUID,UUID是一种用来唯一标识交换区的字符串,由十六进制数字和连字符组成,比如"c1b9d5a2-f162-11cf-9ece-0020afc76f16",如果不指定,mkswap会自动生成一个UUID
-v指定交换区的版本,目前只支持-v 1,-v 0已经过时,内核不再支持
-h显示帮助信息并退出
-V显示版本信息并退出

Linux mkswap命令的实例

Linux mkswap命令的实例如下:

创建一个8GB的交换文件

如果没有多余的磁盘分区,可以使用一个文件作为交换区,首先需要创建一个文件,可以使用dd命令,比如:

[linux@bashcommandnotfound.cn ~]$ sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 22.5918 s, 380 MB/s

这个命令会在根目录下创建一个名为swapfile的文件,大小为8GB,内容为全0。然后,使用mkswap命令来设置这个文件为交换区,比如:

[linux@bashcommandnotfound.cn ~]$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=c1b9d5a2-f162-11cf-9ece-0020afc76f16

这个命令会输出交换区的版本、大小、标签和UUID等信息。最后,使用swapon命令来启用这个交换区,比如:

[linux@bashcommandnotfound.cn ~]$ sudo swapon /swapfile

可以使用swapon -s命令来查看交换区的状态,比如:

[linux@bashcommandnotfound.cn ~]$ swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            8388604 0       -2

创建一个有标签的交换分区

如果有多余的磁盘分区,可以使用mkswap命令来设置为交换区,并为其指定一个标签,方便使用swapon命令来启用,比如:

[linux@bashcommandnotfound.cn ~]$ sudo mkswap -L swap1 /dev/sdb7
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
LABEL=swap1, UUID=2b9d5a2-f162-11cf-9ece-0020afc76f16

这个命令会为/dev/sdb7分区设置为交换区,并指定标签为swap1。然后,使用swapon命令来启用这个交换区,可以使用标签来指定,比如:

[linux@bashcommandnotfound.cn ~]$ sudo swapon -L swap1

可以使用swapon -s命令来查看交换区的状态,比如:

[linux@bashcommandnotfound.cn ~]$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdb7                               partition       2097148 0       -2

检查交换区是否有坏块

如果想要在创建交换区之前,检查设备或文件是否有坏块,可以使用-c选项,比如:

[linux@bashcommandnotfound.cn ~]$ sudo mkswap -c /dev/sdb7
Checking that no-one is using this disk right now ... OK

Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
LABEL=swap1, UUID=2b9d5a2-f162-11cf-9ece-0020afc76f16

这个命令会先检查设备是否被占用,然后扫描设备是否有坏块,如果有,会打印出坏块的数量,最后设置交换区。这个选项会增加创建交换区的时间,而且对于现代的磁盘,坏块的检测已经由硬件自动完成,所以一般不需要使用这个选项。

指定交换区的UUID

如果想要为交换区指定一个UUID,可以使用-U选项,比如:

[linux@bashcommandnotfound.cn ~]$ sudo mkswap -U 12345678-1234-1234-1234-123456789abc /dev/sdb7
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
LABEL=swap1, UUID=12345678-1234-1234-1234-123456789abc

这个命令会为/dev/sdb7分区设置为交换区,并指定UUID为12345678-1234-1234-1234-123456789abc。UUID是一种用来唯一标识交换区的字符串,由十六进制数字和连字符组成,比如"c1b9d5a2-f162-11cf-9ece-0020afc76f16",如果不指定,mkswap会自动生成一个UUID。使用UUID的好处是,即使交换区的设备名发生变化,也可以通过UUID来识别和启用交换区。

强制执行mkswap命令

如果想要强制执行mkswap命令,即使命令是愚蠢的,比如创建一个比分区或文件还大的交换区,或者在有分区表或整个磁盘上创建交换区,可以使用-f选项,比如:

[linux@bashcommandnotfound.cn ~]$ sudo mkswap -f /dev/sda
mkswap: /dev/sda: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.

这个命令会尝试在整个磁盘/dev/sda上创建交换区,但是会提示警告,不要擦除引导扇区,除非使用-f选项。这个选项非常危险,一旦使用,可能会破坏磁盘上的数据,所以一般不要使用这个选项。

Linux mkswap命令的注意事项

使用Linux mkswap命令时,需要注意以下几点:

  • mkswap命令会擦除分区或文件的第一个块,以使其不被识别为其他文件系统,所以在使用mkswap命令之前,要确保分区或文件中没有重要的数据,否则会丢失。
  • mkswap命令不会检查分区或文件是否已经被挂载或使用,所以在使用mkswap命令之前,要确保分区或文件没有被其他进程占用,否则会造成数据损坏或系统崩溃。
  • mkswap命令不会检查分区或文件的大小是否合理。
  • 如果出现bash: mkswap: command not found的错误提示,说明你没有安装mkswap命令所属的util-linux包,你可以根据你的Linux发行版,使用apt, yum或dnf等命令来安装util-linux包,然后再使用mkswap命令。
0

评论区