swap交换分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不常用的数据临时存放在硬盘中,以便腾出物理内存空间让更活跃的程序服务来
使用的技术,其设计的目的是解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存满,所以只有当真实的
物理内存耗尽后才会调用交换分区的资源。在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍。(linux就该这么学p128)
swap及交换分区,类似于windows虚拟内存的作用,其作用可简单描述为,在系统物理内存不足时,将暂时不用的数据存放到交换空间所在的硬盘上,
从而可以腾出内存来让别的程序运行。(https://blog.csdn.net/qq_37344125/article/details/107446554)
通常swap都是在装系统硬盘分区时设定,这里只是探讨一下系统已经安装好后,扩展swap分区的方法.下面我们来将下如何在安装好的linux下增加swap交换分区.
可以有两种方法来增加swap分区,一种是将新的分区来作为swap,另一种是在磁盘中创建一个大的文件来作swap.(http://www.ttlsa.com/linux/update-linux-swap/)
1、如何查看当前的swap分区,swapon -s 命令
[root@linuxprobe dev]# swapon -s Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
2、使用新的分区来做swap (增加交换分区有两种方法,一种是新的交换分区来做swap,另外一种是在磁盘中创建一个大的文件来做swap)
[root@linuxprobe dev]# pwd ##查看当前路径 /dev [root@linuxprobe dev]# find sd* ## 查看当前的硬盘及分区情况,两块同接口硬盘sda、sdb,sdb一个主分区sdb1 sda sda1 sda2 sdb sdb1 [root@linuxprobe dev]# fdisk /dev/sdb ## 对/dev/sdb进行磁盘分区 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p ## 查看分区,一个分区 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xd55cd25f Device Boot Start End Blocks Id System /dev/sdb1 2048 6293503 3145728 83 Linux Command (m for help): n ## 新增分区 Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p ## 选择p,新增主分区 Partition number (2-4, default 2): 2 ## 选择主分区编号2 First sector (6293504-41943039, default 6293504): ## 定义起始的扇区位置,默认敲回车键即可 Using default value 6293504 Last sector, +sectors or +size{K,M,G} (6293504-41943039, default 41943039): +5G ## 定义分区结束的扇区位置,实际是定义分区大小,输入+5G,新的分区5G Partition 2 of type Linux and of size 5 GiB is set Command (m for help): p ## 输入p查看分区情况,可见新增了一个分区 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xd55cd25f Device Boot Start End Blocks Id System /dev/sdb1 2048 6293503 3145728 83 Linux /dev/sdb2 6293504 16779263 5242880 83 Linux Command (m for help): w ## 输入w保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@linuxprobe dev]# pwd ## 查看当前路径 /dev [root@linuxprobe dev]# find sd* ## 查看硬盘及分区情况,发现新增的分区未及时同步 sda sda1 sda2 sdb sdb1 [root@linuxprobe dev]# partprobe ## 这个命令雷士刷新 Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. [root@linuxprobe dev]# find sd* ## 再次查看硬盘及分区情况,新的分区已经同步
sda sda1 sda2 sdb sdb1 sdb2 [root@linuxprobe dev]# mkswap /dev/sdb2 ## 使用swap分区专用的格式化命令mkswap进行格式话 mkswap: /dev/sdb2: warning: wiping old swap signature. Setting up swapspace version 1, size = 5242876 KiB no label, UUID=b9fd91b4-b51e-4e9f-81c1-0d1446820dd7 [root@linuxprobe dev]# free -h ## 查看未挂载前swap分区大小 total used free shared buffers cached Mem: 1.9G 1.3G 686M 9.2M 1.7M 549M -/+ buffers/cache: 750M 1.2G Swap: 2.0G 0B 2.0G [root@linuxprobe dev]# swapon -s ## 查看当前swap分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1 [root@linuxprobe dev]# swapon /dev/sdb2 ## 使用swapon命令把准备好的swap分区设备正式挂载到系统上 [root@linuxprobe dev]# free -h ## 查看swap分区大小,发现已经曾加了5G total used free shared buffers cached Mem: 1.9G 1.3G 682M 9.2M 1.7M 549M -/+ buffers/cache: 754M 1.2G Swap: 7.0G 0B 7.0G [root@linuxprobe dev]# swapon -s ## 查看当前swap分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 5242876 0 -2
将挂载后的swap分区写入开机自动启动,修改 /etc/fstab配置文件
[root@linuxprobe dev]# cat /etc/fstab ## 查看修改前情况 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0 [root@linuxprobe dev]# echo -e "/dev/sdb2\tswap\tswap\tdefaults\t0\t0" >> /etc/fstab ## 修改,也可以使用vim编辑器 [root@linuxprobe dev]# cat /etc/fstab ## 查看修改后 /etc/fstab文件 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
3、创建文件来做swap分区
[root@linuxprobe mnt]# cd /mnt/ ## 选择一个目录用于创建swap文件 [root@linuxprobe mnt]# ls sdb1test [root@linuxprobe mnt]# mkdir fileswap ## 创建放置swap文件的目录 [root@linuxprobe mnt]# ls fileswap sdb1test [root@linuxprobe mnt]# cd fileswap/ [root@linuxprobe fileswap]# ls [root@linuxprobe fileswap]# dd if=/dev/zero bs=1M count=2048 of=swapfile ## 创建大小为2G的swap文件 2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 12.6299 s, 170 MB/s [root@linuxprobe fileswap]# ll -h ## 查看 total 2.0G -rw-r--r--. 1 root root 2.0G Oct 24 13:46 swapfile [root@linuxprobe fileswap]# mkswap swapfile ## 使用mkswap命令对创建的swap文件进行格式话 Setting up swapspace version 1, size = 2097148 KiB no label, UUID=64e6c009-9e1e-4e23-9881-28ec85f13ef0 [root@linuxprobe fileswap]# ll -h ## 查看,没啥变化 total 2.0G -rw-r--r--. 1 root root 2.0G Oct 24 13:51 swapfile [root@linuxprobe fileswap]# chmod 600 swapfile ## 修改权限 ?? [root@linuxprobe fileswap]# ll -h ## 查看 total 2.0G -rw-------. 1 root root 2.0G Oct 24 13:51 swapfile [root@linuxprobe fileswap]# free -h ## 查看挂载前的swap分区空间大小 total used free shared buffers cached Mem: 1.9G 1.9G 73M 9.2M 220K 1.1G -/+ buffers/cache: 761M 1.2G Swap: 7.0G 0B 7.0G [root@linuxprobe fileswap]# swapon -s ## 查看挂载前的swap分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 5242876 0 -2 [root@linuxprobe fileswap]# swapon swapfile ## 挂载创建的swap分区 [root@linuxprobe fileswap]# free -h ## 查看挂载后的swap分区大小,发现增加了2G total used free shared buffers cached Mem: 1.9G 1.9G 71M 9.2M 220K 1.1G -/+ buffers/cache: 763M 1.2G Swap: 9.0G 0B 9.0G [root@linuxprobe fileswap]# swapon -s ## 查看挂载后swap分区,多出一个分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 5242876 0 -2
/mnt/fileswap/swapfile file 2097148 0 -3
设置为开机自动启动,修改/etc/fstab配置文件:
[root@linuxprobe fileswap]# cat /etc/fstab ## 查看修改前的配置文件 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0 [root@linuxprobe fileswap]# echo -e "/mnt/fileswap/swapfile\tswap\tswap\tdefaults\t0\t0" >> /etc/fstab ## 修改配置文件,也可以使用vim编辑器 [root@linuxprobe fileswap]# cat /etc/fstab ## 查看修改后的配置文件 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
/mnt/fileswap/swapfile swap swap defaults 0 0
4、如何删除swap分区
首先删除开启自动启动的配置文件对应行:
[root@linuxprobe fileswap]# cat /etc/fstab ## 首先查看配置文件 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
/mnt/fileswap/swapfile swap swap defaults 0 0 [root@linuxprobe fileswap]# wc -l /etc/fstab ## 统计行数,一共15行 15 /etc/fstab [root@linuxprobe fileswap]# sed '14,15d' /etc/fstab -i ## 删除最后两行(这里根据swap分区所在行数而定),也可以使用vim编辑器删除 [root@linuxprobe fileswap]# cat /etc/fstab ## 查看删除效果 # # /etc/fstab # Created by anaconda on Thu Oct 15 18:36:35 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/rhel_linuxprobe-root / xfs defaults 1 1 UUID=32635a67-1a0f-4df4-907f-f9bf12f87488 /boot xfs defaults 1 2
/dev/mapper/rhel_linuxprobe-swap swap swap defaults 0 0
/dev/cdrom /media/mounttest iso9660 defaults 0 0
/dev/sdb1 /mnt/sdb1test xfs defaults 0 0
使用swapoff命令删除交换分区:
[root@linuxprobe mnt]# swapon -s ## 查看删除前的分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 5242876 0 -2
/mnt/fileswap/swapfile file 2097148 0 -3 [root@linuxprobe fileswap]# free -h ## 查看删除前交换分区大小 total used free shared buffers cached Mem: 1.9G 1.9G 71M 9.2M 220K 1.1G -/+ buffers/cache: 763M 1.2G Swap: 9.0G 0B 9.0G [root@linuxprobe mnt]# swapoff /mnt/fileswap/swapfile ## 使用swapoff 删除一个交换分区 [root@linuxprobe mnt]# swapon -s ## 查看交换分区,已经少了一个交换分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 5242876 0 -2 [root@linuxprobe mnt]# free -h ## 查看删除后交换分区大小,减少了2G total used free shared buffers cached Mem: 1.9G 1.9G 72M 9.2M 220K 1.1G -/+ buffers/cache: 761M 1.2G Swap: 7.0G 0B 7.0G [root@linuxprobe mnt]# swapoff /dev/sdb2 ## 删除 /dev/sdb2分区 [root@linuxprobe mnt]# swapon -s ## 产看分区 Filename Type Size Used Priority /dev/dm-0 partition 2097148 0 -1 [root@linuxprobe mnt]# free -h ## 减少了5G total used free shared buffers cached Mem: 1.9G 1.9G 76M 9.2M 220K 1.1G -/+ buffers/cache: 757M 1.2G Swap: 2.0G 0B 2.0G
删除/dev/sdb2磁盘分区:
[root@linuxprobe mnt]# cd /dev ## 切换目录 [root@linuxprobe dev]# find sdb* ## 查看当前的磁盘分区 sdb sdb1 sdb2 [root@linuxprobe dev]# fdisk /dev/sdb ## fdisk命令管理 /dev/sdb硬盘 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p ## 查看,共两个磁盘分区 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xd55cd25f Device Boot Start End Blocks Id System /dev/sdb1 2048 6293503 3145728 83 Linux /dev/sdb2 6293504 16779263 5242880 83 Linux Command (m for help): d ## 输入删除选项 Partition number (1,2, default 2): 2 ## 选择2 Partition 2 is deleted Command (m for help): p ## 查看磁盘分区,已剩一个磁盘分区 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xd55cd25f Device Boot Start End Blocks Id System /dev/sdb1 2048 6293503 3145728 83 Linux Command (m for help): w ## 保存 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@linuxprobe dev]# pwd /dev [root@linuxprobe dev]# find sdb* ## 查看 /dev/sdb磁盘分区 sdb sdb1 sdb2 [root@linuxprobe dev]# partprobe ## 刷新 Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only. [root@linuxprobe dev]# find sdb* ## /dev/sdb2已经删除 sdb sdb1