美文网首页
Linux Swap 交换分区

Linux Swap 交换分区

作者: BeeBee生信 | 来源:发表于2021-08-16 17:51 被阅读0次

    交换分区是内核直接访问的硬盘空间,在内存不足时系统将部分内存置于交换分区,由于是硬盘访问速度会比物理内存慢。下图是推荐的物理内存和 swap 比例。


    供参考

    swappiness
    系统有个 swappiness 值设置,决定内核向 swap 移动内存的大小和频率,默认值为 60. 可设置范围是 0-100 值越大使用 swap 越多。

    # 查看设置
    $ cat /proc/sys/vm/swappiness
    60
    

    下面命令修改 swappiness 值,其中 x 为 0-100 数值。

    sudo sysctl vm.swappiness=x
    

    释放 swap 空间
    如果 swap 空间比较小,容易物理内存使用很少但是 swap 却满了,造成系统卡顿。这时候先关闭 swap 等待一段时间再打开,能手动释放 swap 空间。因为关闭 swap 时系统会将 swap 数据转移到物理内存。

    # 关闭
    $ sudo swapoff -a
    
    # 然后等待一段时间
    
    # 再打开
    $ sudo swapon -a
    

    添加 swap 分区
    swap 空间太小系统容易卡顿,增加 swap 空间的好方法是买个新硬盘,并在新硬盘划一个分区用于 swap. 此外,LVM 逻辑卷和 swap file 也能用于增加 swap 空间。

    下面将用未分区的 "/dev/sdb" 硬盘,示范添加 swap 分区步骤。

    # 未分区硬盘
    $ sudo fdisk -l /dev/sdb
    Disk /dev/sdb: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
    Disk model: ST12000NM009G   
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    
    # 已分区硬盘
    $ sudo fdisk -l /dev/sda
    Disk /dev/sda: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
    Disk model: ST12000NM0158   
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: gpt
    Disk identifier: DA8570AB-053A-44D8-B034-5653F8BE1D03
    
    Device        Start         End     Sectors  Size Type
    /dev/sda1      2048    20000767    19998720  9.5G EFI System
    /dev/sda2  20000768 22961715199 22941714432 10.7T Linux filesystem
    

    用 fdisk 命令进行硬盘分区操作,需要有 sudo 权限,先查看命令的帮助。

    $ sudo fdisk /dev/sdb
    
    Welcome to fdisk (util-linux 2.34).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table.
    The size of this disk is 10.7 TiB (11756399230976 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
    
    Created a new DOS disklabel with disk identifier 0x8f39e4ad.
    
    Command (m for help): 
    

    运行 fdisk 命令进入交互模式,按 m 命令并回车显示帮助。可见 n 命令添加新的分区,t 命令修改分区类型。

    Command (m for help): m
    
    Help:
    
      DOS (MBR)
       a   toggle a bootable flag
       b   edit nested BSD disklabel
       c   toggle the dos compatibility flag
    
      Generic
       d   delete a partition
       F   list free unpartitioned space
       l   list known partition types
       n   add a new partition
       p   print the partition table
       t   change a partition type
       v   verify the partition table
       i   print information about a partition
    
      Misc
       m   print this menu
       u   change display/entry units
       x   extra functionality (experts only)
    
      Script
       I   load disk layout from sfdisk script file
       O   dump disk layout to sfdisk script file
    
      Save & Exit
       w   write table to disk and exit
       q   quit without saving changes
    
      Create a new label
       g   create a new empty GPT partition table
       G   create a new empty SGI (IRIX) partition table
       o   create a new empty DOS partition table
       s   create a new empty Sun partition table
    

    用 n 命令添加新分区,分区类型选择 p(主分区);分区第一个磁道用默认的 2048,结束磁道使用 "+32G" 表示设置分区大小为 32Gb。因为是用来做 swap 的,用 t 命令将分区类型修改为 82.最后 w 命令保存修改。

    Command (m for help): n
    Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-4294967295, default 2048): 
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4294967295, default 4294967295): +32G
    
    Created a new partition 1 of type 'Linux' and of size 32 GiB.
    
    Command (m for help): t
    Selected partition 1
    Hex code (type L to list all codes): 82
    Changed type of partition 'Linux' to 'Linux swap / Solaris'.
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    此时查看硬盘,新添加的分区已自动命名为 "/dev/sdb1".

    $ sudo fdisk -l /dev/sdb
    Disk /dev/sdb: 10.71 TiB, 11756399230976 bytes, 22961717248 sectors
    Disk model: ST12000NM009G   
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x8f39e4ad
    
    Device     Boot Start      End  Sectors Size Id Type
    /dev/sdb1        2048 67110911 67108864  32G 82 Linux swap / Solaris
    

    用 mkswap 命令将其变为 swap 空间。其中 -L 设置标签。

    $ sudo mkswap -L swapA /dev/sdb1
    Setting up swapspace version 1, size = 32 GiB (34359734272 bytes)
    LABEL=swapA, UUID=cad6ddce-6dcf-4abb-9cca-3854e7b880d0
    

    修改 /etc/fstab 文件,添加新 swap 分区信息。

    /dev/sdb1       swap    swap    defaults        0       0
    

    打开新添加的 swap 空间。

    $ sudo swapon -L swapA
    

    查看可见已经打开,现在有 2 个 swap 空间。多个 swap 空间时会按照优先度使用,优先度高的 swap 空间满了,再用更低优先度 swap 空间。

    $ swapon -s
    Filename                Type        Size    Used    Priority
    /swapfile                               file        2097148 0   -2
    /dev/sdb1                               partition   33554428    0   -3
    

    或者,移除不想要的 swap 空间。先关闭对应 swap 空间。

    $ sudo swapoff /swapfile
    

    关闭后在 /etc/fstab 文件将对应条目删除。并删除 swapfile 文件。

    $ sudo rm -rf /swapfile
    

    参考资料
    Chapter 7. Swap Space Red Hat Enterprise Linux 5 | Red Hat Customer Portal
    How to clear swap memory in Linux | Enable Sysadmin
    How to add swap space in linux – The Geek Diary
    10 fdisk Commands to Manage Linux Disk Partitions
    5.3. Removing Swap Space

    相关文章

      网友评论

          本文标题:Linux Swap 交换分区

          本文链接:https://www.haomeiwen.com/subject/mtcvbltx.html