当前位置: 首页 > news >正文

15.Linux 逻辑卷管理、交换空间管理及系统启动管理

文章目录

  • Linux 逻辑卷管理
    • 环境准备
    • 逻辑卷基本管理
      • 硬盘分区管理方案缺点
      • 逻辑卷管理硬盘方案优点
      • 逻辑卷基本概念
      • 其他
      • 创建物理卷
      • 创建卷组
      • 创建逻辑卷
      • 创建文件系统
      • 清理
    • 扩展和缩减卷组
      • 环境准备
      • 扩展卷组
      • 缩减卷组
    • 扩展和缩减逻辑卷
      • 扩展逻辑卷
      • 缩减逻辑卷
    • 扩展和缩减文件系统
      • 扩展 XFS 文件系统
      • 案例:
  • Linux 交换空间管理
    • 计算机存储器的层次结构
    • 计算机存储器的工作原理
    • 物理内存
    • Swap 空间
      • 查看内存
      • Swap 空间大小
      • 创建交换空间
      • 激活 swap 空间
      • 取消 swap 空间激活
      • 持久化激活 swap 空间
  • Linux 系统启动原理
    • CentOS 7 启动过程
    • 系统 target
    • 系统启动级别
    • 设置系统运行目标
    • 设置系统当前运行 target
    • 设置系统开机默认运行 target

Linux 逻辑卷管理

环境准备

虚拟机添加3块20G硬盘,sdb sdc sdd

[root@server ~ 11:40:21]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  20G  0 disk 
sdc    8:32   0  20G  0 disk 
sdd    8:48   0  20G  0 disk

逻辑卷基本管理

硬盘分区管理方案缺点

  • 硬盘分区空间必须使用连续空间,所以硬盘分区扩容很麻烦,特别是要扩容的分区后没有空间。
  • 使用硬盘分区创建的文件系统不能跨多个硬盘,受单个硬盘容量限制。
  • 如果硬盘损坏,则文件系统中数据也不会丢失。

逻辑卷管理硬盘方案优点

  • 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。
  • 使用逻辑卷创建的文件系统可以跨多个硬盘,适合创建超大容量文件系统。
  • 使用逻辑卷可以创建镜像卷,保证数据的冗余性。即使单个硬盘损坏,文件系统中数据也会丢失。
  • 使用逻辑卷还可以创建快照,保留某一时刻数据,就像虚拟机快照一样。

逻辑卷基本概念

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。

在这里插入图片描述

  • 物理卷(PV, Physical Volume),是LVM的基本存储逻辑块,通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质(如分区、磁盘等)相比,物理卷包含有和LVM相关的管理参数。
  • 卷组(VG, Volume Group),是一个逻辑的存储空间,由一个或多个物理卷组成。
  • 逻辑卷(LV, Logical Volume),是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘,那么逻辑卷则可以类比为一个硬盘分区,所以也可以在逻辑卷之上创建文件系统。

简单地说:卷组由多个物理卷组成,可以在卷组中创建多个逻辑卷,对逻辑卷创建文件系统给用户使用。

其他

  • 硬盘分区技术:实现大分小

  • 硬盘阵列技术:实现小变大,扩容必须是连续空间。

  • 逻辑卷 logical volume:实现小变大,灵活地调整lv大小,快照,设置是组合成raid卷。

硬盘通过分区管理,parted mklabel gpt会在硬盘头部贴上gpt标记。
硬盘通过raid管理,mdadm --create会在硬盘头部贴上raid标记。

扩展一个基于lv的文件系统:

  1. 扩展lv
  2. lv来源于vg,扩展vg
  3. vg由pv组合,增加pv

LVM管理基本流程:

  1. 创建物理卷
  2. 创建卷组
  3. 创建逻辑卷

在这里插入图片描述

创建物理卷

# 创建单个PV
[root@server ~ 11:05:46]# pvcreate /dev/sdbPhysical volume "/dev/sdb" successfully created.# 此次创建多个PV
[root@server ~ 11:32:34]# pvcreate /dev/sd{c,d}Physical volume "/dev/sdc" successfully created.Physical volume "/dev/sdd" successfully created.# 查看PV列表
[root@server ~ 11:33:08]# pvsPV         VG     Fmt  Attr PSize   PFree /dev/sda2  centos lvm2 a--  <99.00g  4.00m/dev/sdb          lvm2 ---   20.00g 20.00g/dev/sdc          lvm2 ---   20.00g 20.00g/dev/sdd          lvm2 ---   20.00g 20.00g# 查看单个PV详细信息
[root@server ~ 11:33:13]# pvdisplay /dev/sdb"/dev/sdb" is a new physical volume of "20.00 GiB"--- NEW Physical volume ---PV Name               /dev/sdbVG Name               PV Size               20.00 GiBAllocatable           NOPE Size               0   Total PE              0Free PE               0Allocated PE          0PV UUID               7AaJXv-iL9i-8MbH-b3hc-3xk9-2C0J-k0xLst

创建卷组

# 创建包涵单个PV的VG
[root@server ~ 11:33:33]# vgcreate webapp /dev/sdbVolume group "webapp" successfully created# 创建包涵多个PV的VG
[root@server ~ 11:33:56]# vgcreate dbapp /dev/sd{c,d}Volume group "dbapp" successfully created[root@server ~ 11:34:31]# pvsPV         VG     Fmt  Attr PSize   PFree  /dev/sda2  centos lvm2 a--  <99.00g   4.00m/dev/sdb   webapp lvm2 a--  <20.00g <20.00g/dev/sdc   dbapp  lvm2 a--  <20.00g <20.00g/dev/sdd   dbapp  lvm2 a--  <20.00g <20.00g# 查看VG列表
[root@server ~ 11:34:34]# vgsVG     #PV #LV #SN Attr   VSize   VFree  centos   1   3   0 wz--n- <99.00g   4.00mdbapp    2   0   0 wz--n-  39.99g  39.99gwebapp   1   0   0 wz--n- <20.00g <20.00g# 查看单个VG详细信息
[root@server ~ 11:34:46]# vgdisplay dbapp--- Volume group ---VG Name               dbappSystem ID             Format                lvm2Metadata Areas        2Metadata Sequence No  1VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                0Open LV               0Max PV                0Cur PV                2Act PV                2# PE,Physical Extend,是PV的最小存储单元。# 在创建VG时,可通过-s选项设置。VG Size               39.99 GiBPE Size               4.00 MiBTotal PE              10238Alloc PE / Size       0 / 0   Free  PE / Size       10238 / 39.99 GiBVG UUID               EFzP23-KAVs-q8dA-tCo8-OD9N-fw0p-KZmS33

创建逻辑卷

# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@server ~ 11:35:04]# lvcreate -n webapp01 -L 5G webappLogical volume "webapp01" created.# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@server ~ 11:35:38]# lvcreate -n data01 -L 25G dbappLogical volume "data01" created.# 查看LV列表
[root@server ~ 11:36:14]# lvsLV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Converthome     centos -wi-ao---- 46.99g                                                    root     centos -wi-ao---- 50.00g                                                    swap     centos -wi-ao----  2.00g                                                    data01   dbapp  -wi-a----- 25.00g                                                    webapp01 webapp -wi-a-----  5.00g 

逻辑卷设备名支持以下三种格式:

  • /dev/vname/lvame
  • /dev/mapper/vname-lvame
  • /dev/dm-N
[root@server ~ 11:36:19]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 923 11:36 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 923 11:36 /dev/mapper/dbapp-data01 -> ../dm-4
# 查看单个LV详细信息
[root@server ~ 11:37:09]# lvdisplay /dev/dbapp/data01--- Logical volume ---LV Path                /dev/dbapp/data01LV Name                data01VG Name                dbappLV UUID                HI7Atq-mDqP-EbbN-oWoV-E9F5-p5xT-hWrwZTLV Write Access        read/writeLV Creation host, time server.ghl.cloud, 2025-09-23 11:36:14 +0800LV Status              available# open                 0LV Size                25.00 GiB# LE,Logical Extend,是LV的最小存储单元。# 通常一个LE对应于一个PE。Current LE             6400Segments               2Allocation             inheritRead ahead sectors     auto- currently set to     8192Block device           253:4# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@server ~ 11:37:40]# pvsPV         VG     Fmt  Attr PSize   PFree  /dev/sda2  centos lvm2 a--  <99.00g   4.00m/dev/sdb   webapp lvm2 a--  <20.00g <15.00g/dev/sdc   dbapp  lvm2 a--  <20.00g      0 /dev/sdd   dbapp  lvm2 a--  <20.00g  14.99g# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘
[root@server ~ 11:37:49]# lsblk /dev/sd{b..d}
NAME              MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb                 8:16   0  20G  0 disk 
└─webapp-webapp01 253:3    0   5G  0 lvm  
sdc                 8:32   0  20G  0 disk 
└─dbapp-data01    253:4    0  25G  0 lvm  
sdd                 8:48   0  20G  0 disk 
└─dbapp-data01    253:4    0  25G  0 lvm  

创建文件系统

[root@server ~ 11:38:08]# mkfs.xfs /dev/webapp/webapp01
[root@server ~ 11:38:36]# mount /dev/webapp/webapp01 /var/www/html
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件。

清理

# 卸载文件系统
[root@server ~ 11:47:05]# umount /dev/webapp/webapp01# 删除LV
[root@server ~ 11:47:34]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: yLogical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: yLogical volume "data01" successfully removed# 删除VG
[root@server ~ 11:48:24]# vgremove webapp dbappVolume group "webapp" successfully removedVolume group "dbapp" successfully removed# 删除PV
[root@server ~ 11:48:47]# pvremove /dev/sd{b..d}Labels on physical volume "/dev/sdb" successfully wiped.Labels on physical volume "/dev/sdc" successfully wiped.Labels on physical volume "/dev/sdd" successfully wiped.

注意清理顺序

扩展和缩减卷组

环境准备

# 创建卷组
[root@server ~ 13:49:32]# vgcreate webapp /dev/sdbPhysical volume "/dev/sdb" successfully created.Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。[root@server ~ 18:39:46]# lvcreate -n webapp01 -L 10G webappLogical volume "webapp01" created.

扩展卷组

如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。

[root@server ~ 13:50:24]# vgextend webapp /dev/sd{c,d}Physical volume "/dev/sdc" successfully created.Physical volume "/dev/sdd" successfully created.Volume group "webapp" successfully extended

缩减卷组

如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。

删除物理卷前确保物理卷不在使用中。

# 查看物理卷使用状态
[root@server ~ 18:41:33]# pvsPV         VG     Fmt  Attr PSize   PFree  /dev/sda2  centos lvm2 a--  <99.00g   4.00m/dev/sdb   webapp lvm2 a--  <20.00g <10.00g# /dev/sdb在使用/dev/sdc   webapp lvm2 a--  <20.00g <20.00g/dev/sdd   webapp lvm2 a--  <20.00g <20.00g# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错
[root@server ~ 18:41:45]# vgreduce webapp /dev/sdbPhysical volume "/dev/sdb" still in use# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@server ~ 18:42:39]# pvmove /dev/sdb
# 或者移动到卷组中特定物理卷
[root@server ~ 18:42:39]# pvmove /dev/sdb /dev/sdd/dev/sdb: Moved: 0.16%/dev/sdb: Moved: 100.00%# 查看物理卷使用状态
[root@server ~ 18:43:54]# pvsPV         VG     Fmt  Attr PSize   PFree  /dev/sda2  centos lvm2 a--  <99.00g   4.00m/dev/sdb   webapp lvm2 a--  <20.00g <20.00g# /dev/sdb不在使用/dev/sdc   webapp lvm2 a--  <20.00g <20.00g/dev/sdd   webapp lvm2 a--  <20.00g <10.00g# /dev/sdd在使用# 再次剔除,成功
[root@server ~ 18:43:59]# vgreduce webapp /dev/sdbRemoved "/dev/sdb" from volume group "webapp"
[root@server ~ 18:44:18]# pvsPV         VG     Fmt  Attr PSize   PFree  /dev/sda2  centos lvm2 a--  <99.00g   4.00m/dev/sdb          lvm2 ---   20.00g  20.00g/dev/sdc   webapp lvm2 a--  <20.00g <20.00g/dev/sdd   webapp lvm2 a--  <20.00g <10.00g

扩展和缩减逻辑卷

扩展逻辑卷

如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。

# 逻辑卷增加2G空间
[root@server ~ 13:51:12]# lvextend -L +2G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).Logical volume webapp/webapp01 successfully resized.[root@server ~ 13:51:54]# lvs /dev/webapp/webapp01LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertwebapp01 webapp -wi-a----- 12.00g      

缩减逻辑卷

如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。

[root@server ~ 18:51:31]# lvreduce -L -2G /dev/webapp/webapp01WARNING: Reducing active logical volume to 10.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: ySize of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).Logical volume webapp/webapp01 successfully resized.[root@server ~ 18:52:07]# lvs /dev/webapp/webapp01LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertwebapp01 webapp -wi-a----- 10.00g 

扩展和缩减文件系统

扩展 XFS 文件系统

XFS文件系统只支持扩展,不支持缩减

环境准备:格式化文件系统,并创建数据

[root@server ~ 13:52:11]# mkfs.xfs /dev/webapp/webapp01
[root@server ~ 13:55:40]# mkdir /var/www/html
[root@server ~ 13:56:13]# mount /dev/webapp/webapp01 /var/www/html
[root@server ~ 13:56:46]# cp /etc/host* /var/www/html
[root@server ~ 13:57:07]# ls /var/www/html/
host.conf  hostname  hosts  hosts.allow  hosts.deny
# 第一步:扩展逻辑卷
[root@server ~ 13:57:48]# lvextend -L 15G /dev/webapp/webapp01
[root@server ~ 13:57:59]# lvs /dev/webapp/webapp01 LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertwebapp01 webapp -wi-ao---- 15.00g  # 第二步:扩展文件系统 
[root@server ~ 13:58:12]# xfs_growfs /var/www/html[root@server ~ 13:58:47]# df -h /var/www/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   15G   33M   15G    1% /var/www/html
[root@server ~ 13:59:02]# ls /var/www/html/
host.conf  hostname  hosts  hosts.allow  hosts.deny# 块设备和文件系统一并扩展
[root@server ~ 14:26:00]#  lvextend -rL 20G /dev/webapp/webapp01[root@server ~ 14:26:08]# lvs /dev/webapp/webapp01LV       VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertwebapp01 webapp -wi-ao---- 20.00g                                                    
[root@server ~ 14:26:25]# df -h /var/www/html
文件系统                     容量  已用  可用 已用% 挂载点
/dev/mapper/webapp-webapp01   20G   33M   20G    1% /var/www/html

案例:

缩减/home空间为5G,间多余空间分配给/(xfs有损缩减)

# 查看家目录空间
[root@server ~ 14:15:48]# df -hT /home
文件系统                类型  容量  已用  可用 已用% 挂载点
/dev/mapper/centos-home xfs    47G   33M   47G    1% /home# 对家目录下的文件进行备份
[root@server ~ 14:15:54]# cp -a /home /home.bak
[root@server ~ 14:17:20]# ls -lhd /home*
drwxr-xr-x. 3 root root 17 92 10:23 /home
drwxr-xr-x. 3 root root 17 92 10:23 /home.bak# 取消家目录的挂载
[root@server ~ 14:17:36]# umount /home# 将家目录空间设置为5G
[root@server ~ 14:17:53]# lvreduce -L 5G /dev/centos/homeWARNING: Reducing active logical volume to 5.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce centos/home? [y/n]: ySize of logical volume centos/home changed from 46.99 GiB (12030 extents) to 5.00 GiB (1280 extents).Logical volume centos/home successfully resized.# 将缩减后的家目录格式化
[root@server ~ 14:18:22]# mkfs.xfs -f /dev/centos/home
meta-data=/dev/centos/home       isize=512    agcount=4, agsize=327680 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0# 挂载
[root@server ~ 14:19:57]# mount /dev/centos/home /home
[root@server ~ 14:20:19]# ls /home[root@server ~ 14:20:29]# cp -a /home.bak/* /home
[root@server ~ 14:20:52]# ls -lh /home /home.bak/
/home:
总用量 0
drwx------. 2 ghl ghl 62 92 10:18 ghl/home.bak/:
总用量 0
drwx------. 2 ghl ghl 62 92 10:18 ghl[root@server ~ 14:21:15]# vgsVG     #PV #LV #SN Attr   VSize   VFree  centos   1   3   0 wz--n- <99.00g <42.00gwebapp   2   2   0 wz--n-  39.99g  19.99g[root@server ~ 14:21:24]# df -h /
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.6G   49G    4% /# 给根目录扩展40G的空间
[root@server ~ 14:21:37]# lvextend -rL +40G /dev/centos/root  
Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 90.00 GiB (23040 extents).Logical volume centos/root successfully resized.
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=3276800 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=13107200, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 13107200 to 23592960# 验证
[root@server ~ 14:22:30]# df -h /
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   90G  1.6G   89G    2% /

Linux 交换空间管理

计算机存储器的层次结构

计算机存储器速度越快,成本较高。 为了获得好的性能/价格比,计算机中各种存储器组成一个层状的塔式结构,取长补短,协调工作。

在这里插入图片描述

  • CPU 寄存器,是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行需要的信息。

  • CPU 高速缓存,也就是CPU Cache,是一种容量小、速度快的高缓冲存储器,由SRAM组成,直接制作在CPU芯片内,速度几乎与CPU一样快。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。

  • 主存储器(Main memory),简称主存或内存,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。主存储器速度比CPU高速缓存慢,但存储容器却大的多。

    主存储器的速度一般用存取时间衡量,即每次与CPU间数据处理耗费的时间,以纳秒(ns)为单位。大多数SDRAM内存芯片的存取时间为5、6、7、8或10ns。

    主存储器的带宽计算公式:带宽=频率*位宽/8。

    例如:DDR4 内存频率是3600 MHz,在64位系统(双通道位宽为128,以此类推),1B=8bit,

    • 单通道 DDR4-3600:3600MHz * 64bit / 8=28800MB/S

    • 双通道 DDR4-3600:3600MHz * 64bit * 2 / 8=57600MB/S

  • 辅助存储器,速度慢的多,优点是容量大,可持久化存储。

计算机存储器的工作原理

在这里插入图片描述

  1. CPU运行程序时,先从寄存器中读取数据。如果在寄存器中可以找到数据,则直接从寄存器中读取。如果在寄存器中找不到数据,则从CPU Cache中读取数据,并将数据缓存在CPU Cache中。
  2. 如果在CPU cache中可以找到数据,则直接从CPU Cache中读取。如果在CPU cache中找不到数据,则从主存储器(内存)中读取数据,将数据缓存在主存储器中。
  3. 如果在内存中可以找到数据,则直接从内存中读取。如果在内存中找不到数据,则从辅助存储器中读取数据,例如机械磁盘、光盘、U盘等,并将数据缓存在内存中。

物理内存

计算机系统将内存划分为固定大小的块,称为 page,标准 page 大小为 4 KiB。进程并不直接对物理内存寻址,每个进程具有虚拟地址空间virtual address space。当进程请求内存时,MMU 将进程获得的虚拟地址(VA,Virtual Address )映射到物理地址(PA,Physical Address )。

MMU是Memory Management Unit的缩写,即内存管理单元,它是CPU中用来管理虚拟存储器、物理存储器的控制线路,负责将虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。

**思考:**为什么CPU不直接访问物理地址?

  1. 虚拟内存的容量是物理内存和交换空间的总和,而虚拟地址负责映射到物理内存地址和交换空间地址。
  2. 进程使用内存的过程中,希望内存是连续的。如果进程直接访问物理地址,则内核很难保证进程获得的物理地址空间是连续的,因为进程存在着运行和退出,就会出现内存碎片化。进程的虚拟地址在虚拟内存中是连续的,达到了内存连续的目的,而 MMU 会将进程的虚拟地址映射到物理地址。

Swap 空间

Swap,意思是“交换”、“实物交易”。Linux Swap(交换)空间是受Linux内核内存子系统控制的磁盘区域。

  • 功能1:当内存使用量超过定义的限制时,内核寻找已分配给进程但空闲的内存页,将该空闲的内存页写入到交换空间,并向其他进程重新分配RAM页面。
  • 功能2:如果某个程序需要访问磁盘上的页面,则内核会找到另一个空闲的内存页, 将其写入到磁盘,然后从交换区重新调用所需的页面。
  • 功能3:如果某个程序需要访问数据,访问的数据存放在交换空间,则该程序直接从交换空间读取数据,而不需要从磁盘原始位置读取,进而提高速度。

在这里插入图片描述

简单地说,Linux Swap 空间就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

**交换空间只是临时的解决办法。**虽然交换空间能够作为"虚拟"内存使用,但由于交换区位于磁盘上,它的速度比物理内存慢的多,因此如果需要更快的速度的话,最好的办法仍然是加大物理内存。

查看内存

# 默认单位是KiB,使用-m选项,以MiB为单位
[root@server ~ 15:15:31]# freetotal        used        free      shared  buff/cache   available
Mem:        4026116      174320     3722300       11916      129496     3660460
Swap:       4194296           0     4194296

输出说明:

  • Mem:

    • total:物理内存空间大小。

    • used:使用的内存 (total - free - buffers - cache)。

    • free:未使用的内存空间大小(真正的空闲,未被任何程序占用)。

    • shared:多个进程共享的内存空间大小。

    • cached:从磁盘读取的数据占用的内存空间大小,待以后使用(数据没有被修改)。

    • buffers:被更改但未写回磁盘的数据占用的内存空间大小。

  • Swap:

    • total:交换空间大小。

    • used:使用的交换空间大小。

    • free:未使用交换空间大小。

Swap 空间大小

管理员应根据系统的内存工作负载来调整交换空间大小。 应用供应商有时会提供这方面的建议。根据物理内存总量,下表提供了一些指导

物理内存(RAM)交换空间允许HIBERNATE时的交换空间
2GiB或以下两倍的RAM三倍的RAM
2GiB和8GiB之间同等的RAM两倍的RAM
8GiB和64GiB之间至少4GiB1.5倍的RAM
64GiB以上至少4GiB不建议Hibernate

笔记本电脑和台式机的Hibernate功能会在关闭系统电源之前使用交换空间来保存RAM内容。重新打开系统时, 内核将从交换空间恢复RAM内容,无需完全启动。 对于这些系统而言,交换空间需要超过RAM量。

创建交换空间

# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server ~ 14:59:56]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
[root@server ~ 15:01:17]# parted /dev/sdb unit MiB mkpart swap linux-swap 1 2049
[root@server ~ 15:01:59]# parted /dev/sdb unit MiB print# 格式化swap空间
[root@server ~ 15:02:25]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=35d97804-6631-4c05-8aab-655f1500d4f5

激活 swap 空间

# 激活swap空间
[root@server ~ 15:03:29]# swapon /dev/sdb1# 查看swap设备列表
[root@server ~ 15:04:01]# swapon -s
文件名				类型		大小	已用权限
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb1                              	partition	2097148	0	-3

默认情况下,多个交换空间具有相同的优先级时,系统会按顺序使用交换空间,即内核先使用第一个已激活交换空间,直至其空间已满,然后开始使用第二个交换空间。在激活交换分区的时候,可以为每个交换空间定义一个优先级,从而强制按该顺序使用交换空间。

swapon 命令使用-p选项指定优先级,优先级介于-1和32767之间,值越大优先级越高。

示例:

[root@server ~ 15:14:10]# swapon -p 4 /dev/sdb1

取消 swap 空间激活

[root@server ~ 15:14:10]# swapoff -a
[root@server ~ 15:14:29]# swapon -s
[root@server ~ 15:14:37]# 

持久化激活 swap 空间

修改/etc/fstab文件,添加如下类似记录:

 UUID="35d97804-6631-4c05-8aab-655f1500d4f5" swap swap defaults 0 0

使用命令swapon -a激活/etc/fstab中所有交换设备。

使用命令swapoff -a取消/etc/fstab中所有交换设备激活。

[root@server ~ 15:14:37]# swapon -a
[root@server ~ 15:14:41]# swapon -s
文件名				类型		大小	已用权限
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb1                              	partition	2097148	0	-3

注意:swap的格式化、激活、取消激活等命令与磁盘命令不同,需注意

Linux 系统启动原理

CentOS 7 启动过程

现代计算机系统是硬件与软件的复杂组合。从断电状态开始,到拥有登录提示符的运行中系统,这需要大量的硬件和软件配合工作。

以下列表从较高层面概述了 CentOS7 启动过程。

在这里插入图片描述

  1. 计算机接通电源。系统固件(现代UEFI或更旧的BIOS)运行开机自检(POST),并开始初始化硬件。

    配置: 在系统启动早期,通过按特定的组合键,例如F2,配置系统固件。

  2. 系统固件搜索启动设备,根据固件配置的顺序搜索启动磁盘上的主启动记录(MBR)。系统固件从磁盘读取boot loader,然后将系统控制权交给boot loader,boot loader是GRand Unified Bootloader version 2(GRUB2)。

    配置: 使用 grub2-install 命令进行配置,它将安装 GRUB2 作为磁盘上的启动加载器。

  3. GRUB2从/boot/grub2/grub.cfg文件加载配置并显示一个操作系统菜单,可以从中选择要启动的系统。

    配置: 使用 /etc/grub.d/ 目录、/etc/default/grub 文件和 grub2-mkconfig 命令进行配置,以生成 /boot/grub2/grub.cfg 文件。

  4. boot loader根据选定条目的配置,从磁盘中加载kernel和initramfs,并将它们放入内存中。initramfs是一个存档,其中包含启动时所有必要硬件的内核模块、初始化脚本等等。

    boot loader将控制权交给kernel,并同时将启动项的内核参数、initramfs在内存中的位置传递给kernel。内核在initramfs中找到所有硬件驱动程序,并初始化这些硬件。

    配置: 使用 /etc/dracut.conf.d/ 用录、dracut 命令和 lsinitrd 命令进行配置,以检查 initramfs 文件。

  5. initramfs 执行/sbin/init,作为PID 1。在CentOS中,/sbin/init是一个指向systemd的链接。

    配置: 使用内核参数init=command配置系统初始化程序。

  6. 随后,systemd会加载从内核命令行传递的target或者加载系统配置的default.target,该目标通常启动一个基于文本的登录或图形登录屏幕。

    **配置:**使用systemctl设置默认target。

  7. default.target依赖sysinit.target,sysinit.target用于初始化系统,例如读取/etc/fstab挂载文件系统,激活systemd-journald等。

    **配置:**使用/etc/fstab配置文件系统开机自动挂载。

  8. default.target还会激活开机启动的单元。

    **配置:**使用systemctl设置开机启用服务。

  9. default.target还会激活getty.target,该target将打开tty1终端用于用户登录。

系统 target

systemd使用类型为target的单元来分组不同单元,例如multi-user.target包涵chronyd.service、crond.service、firewalld.service等服务。

target还可以包涵其他target,例如graphical.target包涵multi-user.target,multi-user.target包涵basic.target,basic.target包涵sysinit.target。

使用以下命令查看target之间依赖关系:

[root@server ~ 17:06:37]# systemctl list-dependencies graphical.target 
graphical.target
● ├─display-manager.service
● ├─network.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
●   ├─auditd.service
●   ├─chronyd.service
●   ├─crond.service
●   ├─dbus.service
●   ├─irqbalance.service
●   ├─mdmonitor.service
●   ├─network.service
......# 查看反向依赖
[root@server ~ 17:14:16]# systemctl list-dependencies sshd.service --reverse
sshd.service
● └─multi-user.target
●   └─graphical.target

系统启动级别

CentOS 6 之前使用启动级别控制系统开机激活哪些服务。CentOS 7 使用target控制系统开机激活哪些服务。

runleveltarget作用
0关机,init 0 同 poweroff 和systemctl poweroff
1emergency.target rescue.target单用户模式、救援模式和紧急模式用于修复系统
2多用户文本界面,不具备NFS功能
3multi-user.target多用户文本界面
4未使用
5graphical.target多用户图形界面
6重启,init 6 同 reboot 和systemctl reboot

设置系统运行目标

/etc/inittab文件是CentOS 6之前版本初始化系统使用的配置文件。

# 部分内容如下
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
# 设置运行级别为5,也就是图形化方式启动。
id:5:initdefault:

设置系统当前运行 target

# 设置系统当前运行target为multi-user.target
[root@server ~ 17:19:32]# systemctl isolate multi-user.targe# 设置系统当前运行target为graphical.target 
[root@server ~ 17:19:32]# systemctl isolate graphical.target

设置系统开机默认运行 target

# 查看系统开机默认运行target
[root@server ~ 17:19:32]# # systemctl get-default 
graphical.target# 设置系统开机默认运行target
[root@server ~ 17:19:32]# # systemctl set-default multi-user.target
# 重启验证
http://www.dtcms.com/a/399571.html

相关文章:

  • DeepSeek-V3.1-Terminus深度解析:语言一致性、Agent能力增强,“终极版本“来了?
  • 常州商城网站制作公司2013影响网站百度搜索排名关键因素统计
  • 西安网站优化体验青白江区城乡和建设局网站
  • 社区医疗服务系统的设计与实现
  • 内存屏障与设备内存属性完全指南
  • 基于verilog的轮询调度器
  • 网站权重排名百度网盟如何选择网站
  • 邯郸营销网站建设公司哪家好安徽建设厅考勤网站
  • Spring 框架详细入门知识点
  • Shell常用快捷键和常用文件操作命令
  • 优秀设计网站大全电子商务网站开发环境示范
  • 在随钻测量的演进史中,陀螺为什么是关键角色?
  • seo网站排名全选网站建设工作情况总结
  • 在 Windows GPU 机器上运行 Linux CUDA
  • Python基础总结
  • 二手车网站开发PPT国内专业网站制作
  • 事业单位可以建设网站吗深圳网站设计哪好
  • 做房产推广那个网站好重庆装修价格明细表
  • 工业产品设计网站推荐制作网站首页psd
  • 谷歌seo网站推广怎么做手机网站域名哪里注册时间
  • 记一次添加.h和.cpp后,编译时显示无法解析的外部符号问题
  • 宝安网站制作哪里好长阳网站建设
  • 机器学习——线性回归详解
  • Python知识体系
  • 做电商看的网站有哪些内容网站开发和ui的区别
  • 从0到1搭建灵活用工平台:一套系统需要具备哪些核心功能?
  • 【ReST】2. ReST 行内文本语法详解及与 Markdown 的区别
  • 网站 维护网站开发待遇怎么样
  • 网站建设合同怎么写开网店怎么找货源啊
  • iOS 混淆在多渠道分发场景下的实践,配置统一、符号表管理与分发安全