6.文件系统——什么是交换分区以及如何创建和使用交换分区(free,reboot,mkswap,swapon,swapoff)

一、交换分区:swap

目前几乎所有的操作系统都是多任务多用户的,且使用了MMU完成了内存保护,以使得多进程得以完成。如此一来,每个进程都有自己的线性地址空间,其中的数据会被映射到物理地址空间中。

第一个进程使用第一个线性地址空间,第二个进程使用第二个线性地址空间,依此类推,而这些进程真正使用的内存会被放置到物理内存中。而物理内存被划分为单个的页框(可以存储页面数据的单元),于是第一个进程可能使用的是物理内存中的第三个页框,第二个进程使用的可能是第一个页框,第一个进程又开启了一块数据,使用的是第三个页框,因此这些进程使用的页框在真正的物理内存中很可能是离散的。

如果整个物理内存一共只有1G,使用的是32位的系统(32位系统的最高巡址空间为4G),那么每一个进程都会误认为自己有4G的内存空间,这样就会导致物理内存不足,一旦使用的内存超出了实际物理内存,就会导致系统无法运行,此时就需要引入虚拟内存的机制。

虚拟内存并不是真正的内存,它是在硬盘上划分出一块区域,将其格式化成物理内存相同的格式(其中的文件系统不再是文件和索引了,取而代之的是页框)以备后续使用。一旦发生了物理内存不足的情况(物理内存还没有用完,但已经接近总大小了),就可以将物理内存页框中的数据移动到虚拟内存上。而物理内存空间被重新释放后,又可以将虚拟内存页框中的数据移动回去。重新移动回去的数据可能已经不在原来的页框中了,这时只需将线性地址空间重新指向页框位置即可。这个过程就好像是在交换数据一样,故这一区域被称为交换分区(swap)。当然交换分区只是权宜之计,因为硬盘的数据处理能力远远低于内存。

Windows系统中交换分区(虚拟内存)直接放在系统磁盘上,且是自动管理的,但Linux则不同,它必须使用独立的分区(独立的文件系统)作为交换分区(swap)。在不同的情况下,交换分区的大小的设定机制是不同的:

1. 批处理类的服务器(科学计算类的服务器):交换分区尽可能大,比如为物理内存的2倍或4倍;

2. 应用程序类的服务器(提供web服务/数据库服务器):对性能要求较高,故交换分区尽可能小,比如1G;

3. 如果无法确定是科学计算类还是应用程序类的服务器,当物理内存小于或等于2G,那么 swap = memory * 2;

当物理内存大于2G,小于4G,那么 swap = memory * 1.5;

当物理内存大于4G,那么 swap = 4G。

使用free命令可以查看当前系统的内存使用状况:

   [[email protected] ~]# free

   —————————————运行结果———————————————

# 含义为:  总共      已用     空闲     共享大小     缓冲      缓存
          total    used     free    shared     buffers   cached
Mem:    1020348    543008   477340       0       45192   172724
-/+ buffers/cache: 325092   695256
Swap:   2064376    0        2064376
# 缓冲用于写操作,缓存用于读操作,缓冲和缓存空间可以被清除,当缓冲和缓存被清除后,它们原来占据的空间会腾出来变成空闲空间,故
# 已用空间used(543008)-(缓冲/缓存)buffers/cached(45192/172724)= 实际已用空间(325092)
# 空闲空间free(477340)+(缓冲/缓存)buffers/cached(45192/172724)= 实际空闲空间(695256)

这里是以字节为单位进行显示的,可以使用-m选项或-g选项改为MB或GB单位来显示:

   [[email protected] ~]# free -m

—————————————运行结果———————————————

             total    used      free     shared    buffers     cached
Mem:           996    530       466          0       44          168
-/+ buffers/cache:    317       679
Swap:         2015                0        2015

   [[email protected] ~]# free -g

—————————————运行结果———————————————

           total       used       free     shared    buffers     cached
Mem:          0           0          0         0         0            0
-/+ buffers/cache:        0          0
Swap:         1           0          1

二、创建交换分区

如果现有的swap不够用了,需要创建一个新分区作为交换分区,可以进行以下操作:

   [[email protected] ~]# fdisk /dev/sdb

# 在/dev/sdb上创建分区
WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) and change display units to
sectors (command ‘u‘).

   Command (m for help): p

# 查看分区信息
Disk /dev/sdb: 102.0 GB, 102005473280 bytes
255 heads, 63 sectors/track, 12401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c2e31
Device Boot         Start         End      Blocks   Id  System
/dev/sdb3               1        1306    10490413+  83  Linux
/dev/sdb4            1307       12401    89120587+   5  Extended
/dev/sdb5            1307        1960     5253223+  83  Linux

   Command (m for help): n

Command action
l   logical (5 or over)
p   primary partition (1-4)
    l
First cylinder (1961-12401, default 1961):
Using default value 1961
Last cylinder, +cylinders or +size{K,M,G} (1961-12401, default 12401): +1G
# 创建逻辑分区,默认从1961号柱面开始,大小为1GB

   Command (m for help): p

# 再次查看分区信息
Disk /dev/sdb: 102.0 GB, 102005473280 bytes
255 heads, 63 sectors/track, 12401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c2e31
Device Boot         Start         End      Blocks   Id  System
/dev/sdb3               1        1306    10490413+  83  Linux
/dev/sdb4            1307       12401    89120587+   5  Extended
/dev/sdb5            1307        1960     5253223+  83  Linux
/dev/sdb6            1961        2092     1060258+  83  Linux
 # 发现新创建的分区系统ID为83,如果要创建为交换分区,系统ID号应该是82。

Command (m for help): t

# 使用t命令来调整系统ID

Partition number (1-6): 6

Hex code (type L to list codes): 82

Changed system type of partition 6 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdb: 102.0 GB, 102005473280 bytes
255 heads, 63 sectors/track, 12401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c2e31
Device Boot         Start         End      Blocks    Id   System
/dev/sdb3               1        1306    10490413+  83  Linux
/dev/sdb4            1307       12401    89120587+   5  Extended
/dev/sdb5            1307        1960     5253223+  83  Linux
/dev/sdb6            1961        2092     1060258+  82  Linux swap / Solaris
# 再次查看分区信息,会发现/dev/sdb6的系统ID已经改为了82,swap

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.

[[email protected] ~]# partx -a /dev/sdb6 /dev/sdb

/dev/sdb6: No such file or directory

[[email protected] ~]# partx /dev/sdb

# 1:         0-       -1 (        0 sectors,      0 MB)
# 2:         0-       -1 (        0 sectors,      0 MB)
# 3:        63- 20980889 ( 20980827 sectors,  10742 MB)
# 4:  20980890-199222064 (178241175 sectors,  91259 MB)
# 5:  20980953- 31487399 ( 10506447 sectors,   5379 MB)
# 6:  31487463- 33607979 (  2120517 sectors,   1085 MB)

[[email protected] ~]# cat /proc/partitions

major minor  #blocks  name
8        0   26214400 sda
8        1     512000 sda1
8        2   25701376 sda2
8       16   99614720 sdb
8       19   10490413 sdb3
8       20          1 sdb4
8       21    5253223 sdb5
253        0   23633920 dm-0
253        1    2064384 dm-1
# 查看/proc/patitions这个文件会发现/dev/sdb6还是没有被同步到内核中,
# 说明使用partx -a 命令来同步swap分区到内核中,不重启将无法成功。

[[email protected] ~]# reboot

Broadcast message from [email protected]
(/dev/pts/1) at 13:35 ...
The system is going down for reboot NOW!
# 重启系统

[[email protected] ~]# cat /proc/partitions

major minor  #blocks  name
8        0   26214400 sda
8        1     512000 sda1
8        2   25701376 sda2
8       16   99614720 sdb
8       19   10490413 sdb3
8       20          1 sdb4
8       21    5253223 sdb5
8       22    1060258 sdb6
253        0   23633920 dm-0
253        1    2064384 dm-1
# 这时可以看到交换分区 /dev/sdb6已经同步到内核中了

三、启用交换分区

当新分区被创建成功后,首先需要将该分区指定为swap分区,使用的命令如下:

mkswap DEVICE

mkswap -l label                --为交换分区指定卷标

启用交换分区,不使用mount命令,而是使用如下命令:

swapon DEVICE            -- 启用指定交换分区

swapon -a                       -- 启用所有交换分区

禁用交换分区,使用如下命令:

        swapoff DEVICE         -- 禁用指定交换分区

        swapoff -a                    --  禁用所有交换分区

如果需要开机自动启用交换分区,可以修改/etc/fstab文件,增加如下内容:

  DEVICE         swap    swap   defaults     0       0
# 要挂载的文件系统  挂载点   文件系统类型   默认   不备份   不自检

下面来举个例子演示一下启用交换分区的过程:

[[email protected] ~]# free -m

            total     used      free    shared   buffers     cached
Mem:          996      449       546         0        25        153
-/+ buffers/cache:               270       725
Swap:        2015       0       2015
# 当前的交换分区为 2015MB

[[email protected] ~]# mkswap -L NEWSWAP /dev/sdb6

# 将设备 /dev/sdb6指定为交换分区,其卷标为 NEWSWAP
Setting up swapspace version 1, size = 1060252 KiB
LABEL=NEWSWAP, UUID=9f4eea81-3e66-415b-9f80-c31f1b2a092b

[[email protected] ~]# swapon /dev/sdb6

# 启用交换分区 /dev/sdb6

[[email protected] ~]# free -m

             total     used       free     shared    buffers   cached
Mem:           996      450       546           0         25      153
-/+ buffers/cache:      271       725
Swap:         3051       0        3051
# 查看当前的交换分区,会发现大小变为 3051MB了

[[email protected] ~]# swapoff /dev/sdb6

# 禁用交换分区 /dev/sdb6

[[email protected] ~]# free -m

           total       used       free     shared    buffers   cached
Mem:         996        449       546         0         25        153
-/+ buffers/cache:      270       725
Swap:       2015          0      2015
# 再次查看当前的交换分区,会发现大小又变为了 2015MB了

[[email protected] ~]# vim /etc/fstab

# 编辑 /etc/fstab文件,使新创建的交换分区开机就自动挂载
#
# /etc/fstab
# Created by anaconda on Wed Jul  9 21:21:40 2014
#
# 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/VolGroup-lv_root               /      ext4  defaults 1 1
UUID=d9512fb3-8dd6-4613-ae55-8e99ba0ef627 /boot   ext4  defaults 1 2
/dev/mapper/VolGroup-lv_swap               swap   swap  defaults 0 0
tmpfs                                  /dev/shm   tmpfs defaults 0 0
devpts                          /dev/pts   devpts gid=5,mode=620 0 0
sysfs                                      /sys   sysfs defaults 0 0
proc                                      /proc   proc  defaults 0 0
/dev/sdb3                       /mydata   ext4  defaults,noatime 0 0

LABEL="NEWSWAP"          swap       swap    defaults    0      0
# 通过卷标指定需要挂载的设备  挂载点  文件系统类型   默认     不备份    不自检

时间: 2024-08-30 15:02:41

6.文件系统——什么是交换分区以及如何创建和使用交换分区(free,reboot,mkswap,swapon,swapoff)的相关文章

mkswap,swapon,swapoff 创建交换分区

Linux支持虚拟内存,用作虚拟内存的硬盘部分称为交换空间(swap space).当内存不够用时,会把一部分数据存在硬盘的交换空间,从而解决内存容量不足的问题. Linux可以使用一个分区作为交换空间或者一个常规文件.单独的分区速度要快一些,但是交换文件大小可以改变,更加灵活些. 创建交换分区有两种方法,可以使用mkswap来创建 ============================ 语法: mkswap [参数] 设备名 [块数] 设备名,可以是一个分区,如:/dev/sdb1 也可以是

linux系统--free,交换分区,mkswap,swapon,swapoff,dd,自动挂载,fuser

swap分区: free -m fdisk命令中,调整分区类型为82: 创建交换分区: mkswap /dev/sda8 -L LABEL swapon /dev/sda8 -a:启用所有的定义在/etc/fstab文件中的交换设备 swapoff /dev/sda8 [[email protected] ~]# free total       used       free     shared    buffers     cached Mem:       1906492     346

掌握管理Linux磁盘和分区的方法 创建并挂载文件系统以及 创建并管理LVM

理论部分:一.磁盘和分区:1.磁盘分区的表示:常见的硬盘可以划分为主分区.扩展分区.和逻辑分区.通常情况下主分区只有4个,而扩展分区看成一个特殊的主分区类型,在扩展分区可以建立逻辑分区.主分区一般用来安装操作系统,扩展分区则多用来储存文件数据.2.硬盘按数据接口不同,大致分为ATA(IDE)和SATA以及SCSI和SAS.现在用的硬盘都是SCSI硬盘,它的优点是资源传输时CPU占用率低,转速快,支持热插拔等.所以在这里主要介绍SCSI硬盘分区的结构.对于SCSI接口的硬盘表示方式是:第一块SCS

17.文件系统——逻辑卷、快照以及如何创建逻辑卷(pv、vg、lv)

一.逻辑卷管理器LVM概述 前面我们在Linux系统上模拟软RAID,使用的是md模块,事实上,还有一个模块dm--device mapper,也可以实现软RAID的模拟.md模块的管理工具是mdadm,它专门用来管理RAID设备:dm模块则更为强大,它的管理工具不再是一个单一的工具,而是一组工具,根据不同的规则进行管理(如物理卷的创建.删除.修改:卷组的大小调整.扫描.显示等:逻辑卷的创建.删除和修改等),为dm提供设备映射法则:它支持将多个物理设备以多种不同的方式组合起来,其中包含但不仅限于

Linux如何创建和删除swap分区

Linux中的swap分区类似Windows的虚拟内存,在硬盘空间不足的情况下,可通过创建swap分区来解决,下面小编就给大家介绍下Linux如何创建和删除swap分区. 1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中.

如何在GPT格式下创建EFI和MSR分区(安装WIN10/WIN8.1)

如何在GPT格式下创建EFI和MSR分区(安装WIN10/WIN8.1) 前言 本文将总结如何在GPT格式的磁盘下安装win10系统,总结下折腾了本屌两天的鬼东西.老本子用了4年了,想换个笔记本,了解了很多品牌,戴尔.宏基.联想.未来人来.微星.神舟.华硕.惠普.最后被华硕的一款本子所吸引!然后去找各大论坛和电商,当然还有实体店了解这款号称 史上最轻薄的ROG笔记本.都说这本子过于轻薄,散热差了些,但综合个人需求,终于,忍痛下手了!那么,接下来的几个月,坐等吃馒头度过. 来一波图养养眼!    

GPT分区基础知识及如何在GPT分区上安装WIN7

大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区的格式,并且主板bios支持UEFI启动. 如果您对这些专用名词比较陌生的话,笔者简单解释一下: MBR和GPT是两种不同分区形式,好比你买回来一块新硬盘,要划分成不同的区域,系统.工具.音乐等等,看你怎么分,传统的MBR模式只能分4个主分区,并且最大的支持2.1T硬盘.GPT可以分无数多分区,并且

linux分区之gpt(大于2T的分区)

1.文件系统限制: ext3块尺寸 最大文件尺寸 最大文件系统尺寸1KiB  16GiB  2TiB2KiB  256GiB  8TiB4KiB  2TiB  16TiB8KiB  16TiB  32TiB ext4Extentsext4引进了Extent档案储存方式,以取代ext2/3使用的block mapping方式.Extent指的是一连串的连续实体block,这种方式可以增加大型档案的效率并减少分裂档案.ext4支援的单一Extent, 在单一block为4KB的系统中最高可达128M

Centos/Linux下调整分区大小(以home和根分区为例)

在安装新系统的时候,有时候没法预估或者说错误的划分了分区大小,常常会导致我们后面的操作出现极大地不方便,比如某个分区分的太小了,导致 软件安装的时候会报安装空间不够,这就很麻烦.在这里我就记录一下错误分区后对home和根分区存储空间大小调整的整个过程! 1.查看我们机器现有的分区状况 注意红色框中的信息,这是我们后面要更改的分区路径. 通过上面我们可以发现根分区和home分区产生极大的不合理性,home分区太大了,所以这里我们将对home分区缩小存储空间并把压缩的存储空间添加到root下面. 2