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命令。
评论区