案例

你是某企业的运维工程师,负责管理一台 CentOS7 服务器。该服务器原有 1 块 1TB 硬盘,用于存储数据库备份文件。因业务增长,硬盘容量不足,而且单块磁盘存在单点故障风险。

现在对服务器存储扩容,增加6块1TB(用20G模拟)硬盘:

  1. 通过软 RAID(MDADM)将这6块硬盘配置为 RAID5 。
  2. 使用GPT管理raid5,将一半容量划分给第一个分区。
  3. 将第一个分区格式化为xfs文件系统,并持久化挂载在 /webapp。
  4. 部署nginx服务器,web主目录为/webapp。
  5. 欢迎界面为:Welcome to Storage World.

实现过程:

  1. 确保有6块硬盘,再把六块硬盘配置为RAID5

    在这里插入图片描述

[root@server ~ 08:44:41]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0    20G  0 disk 
sdc               8:32   0    20G  0 disk 
sdd               8:48   0    20G  0 disk 
sde               8:64   0    20G  0 disk 
sdf               8:80   0    20G  0 disk 
sdg               8:96   0    20G  0 disk 
sr0              11:0    1   4.4G  0 rom
#用mdadm工具配置配置为 RAID
[root@server ~ 08:44:28]# yum install -y mdadm

[root@server ~ 08:45:56]# mdadm --create /dev/md5 --level 5 --raid-device=6 /dev/sd{b..g}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
#配置完查看细节
[root@server ~ 08:46:14]# mdadm -D /dev/md5
/dev/md5:
        ......

Consistency Policy : resync

    Rebuild Status : 15% complete

              Name : server.ggg.cloud:5  (local to host server.ggg.cloud)
              UUID : d67de287:9ba4d521:631310d6:f4326ec4
            Events : 3

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       3       8       64        3      active sync   /dev/sde
       4       8       80        4      active sync   /dev/sdf
       6       8       96        5      spare rebuilding   /dev/sdg
[root@server ~ 08:50:04]# lsblk /dev/md5
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
md5       9:5    0 99.9G  0 raid5 
└─md5p1 259:1    0   50G  0 md 
  1. 用parted工具来实现分区
[root@server ~ 08:48:13]# parted /dev/md5
GNU Parted 3.1
使用 /dev/md5
Welcome to GNU Parted! Type 'help' to view a list of commands.
#用GPT管理raid5
(parted) mklabel  gpt                                              
(parted) print                                                            
Model: Linux Software RAID Array (md)
Disk /dev/md5: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志
#把一半的分区分给第一块md5p1
(parted) mkpart primary 0% 50%
(parted) print                                                            
Model: Linux Software RAID Array (md)
Disk /dev/md5: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      2621kB  53.6GB  53.6GB               primary

#q退出
(parted) q
信息: You may need to update /etc/fstab.

#查看一下
[root@server ~ 08:50:04]# lsblk /dev/md5
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
md5       9:5    0 99.9G  0 raid5 
└─md5p1 259:1    0   50G  0 md 
  1. 将第一个分区格式化为xfs文件系统,并持久化挂载在 /webapp
[root@server ~ 08:50:13]# mkfs.xfs /dev/md5p1
[root@server ~ 08:51:24]# mkdir -p /webapp
[root@server ~ 08:51:32]# mount /dev/md5p1 /webapp
[root@server ~ 08:51:48]# df -h /dev/md5p1
文件系统        容量  已用  可用 已用% 挂载点
/dev/md5p1       50G   33M   50G    1% /webapp
#查看/dev/md5p1的UUID
[root@server ~ 08:51:59]# blkid /dev/md5p1
/dev/md5p1: UUID="16121bf6-220c-478e-80b2-600464c1a4d3" TYPE="xfs" PARTLABEL="primary" PARTUUID="ef1109b6-a6ce-4a67-b92a-b5c3536af164"
#配置/etc/fstab文件来永久挂载
[root@server ~ 08:52:50]# vim /etc/fstab

在这里插入图片描述

  1. 部署nginx服务器,web主目录为/webapp
[root@server ~ 08:54:01]# yum install -y nginx
......
已安装:
  nginx.x86_64 1:1.20.1-10.el7                                                                             

作为依赖被安装:
  centos-indexhtml.noarch 0:7-9.el7.centos               gperftools-libs.x86_64 0:2.6.1-1.el7              
  nginx-filesystem.noarch 1:1.20.1-10.el7                openssl11-libs.x86_64 1:1.1.1k-7.el7              

完毕!
#发现服务未启动
[root@server ~ 09:11:26]# systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
#设置自启动并重启
[root@server ~ 09:11:42]# systemctl enable nginx.service --now 
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service
#再次查看服务状态
[root@server ~ 09:11:53]# systemctl status nginx.service 
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2026-05-22 09:11:53 CST; 1s ago
  Process: 1636 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
......
#修改配置文件让主目录为/webapp
[root@server ~ 09:16:58]# vim /etc/nginx/nginx.conf
#修改完配置文件要重启
[root@server ~ 09:24:57]# systemctl restart nginx.service

在这里插入图片描述

  1. 欢迎界面为:Welcome to Storage World.
#写入Welcome to Storage World
[root@server ~ 09:25:21]# echo Welcome to Storage World>/webapp/index.html
[root@server ~ 09:26:08]# curl http://localhost
Welcome to Storage World

Linux 交换空间管理

计算机存储器的层次结构

  • CPU 寄存器,是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行需要的信息。
  • CPU 高速缓存,也就是CPU Cache,是一种容量小、速度快的高缓冲存储器,由SRAM组成,直接制作在CPU芯片内,速度几乎与CPU一样快。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。
  • 主存储器(Main memory),简称主存或内存,其作用是存放指令和数据,并能由中央处理器(CPU)直接随机存取。主存储器速度比CPU高速缓存慢,但存储容器却大的多

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

计算机存储器的工作原理

  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@centos7 ~]# free 
              total        used        free      shared  buff/cache   available
Mem:        4026156      330460     3528844       12136      166852     3485576
Swap:       4063228           0     4063228

输出说明:

  • 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之间 至少4GiB 1.5倍的RAM
64GiB以上 至少4GiB 不建议Hibernate

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

分析操作系统自带的LVM结构

[root@server ~ 10:25:37]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sr0              11:0    1   4.4G  0 rom  
[root@server ~ 10:25:40]# pvs
  PV         VG     Fmt  Attr PSize    PFree
  /dev/sda2  centos lvm2 a--  <199.00g 4.00m
#sda2作为pv,使用剩余所有空间,归属卷组centos
#在centos卷组中创建各种lv,提供不同的存储空间,例如/、/home、swap.

如何从centos卷组中分配4G空间出来给新的swap使用?

[root@server ~ 10:26:30]# df -hT |grep -v tmpfs
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        50G  1.6G   49G    4% /
/dev/mapper/centos-home xfs       146G   33M  146G    1% /home
/dev/sda1               xfs      1014M  140M  875M   14% /boot

发现:/home文件系统系统空间很大,但是使用空间非常少。缩减/home空间给其他应用使用。

/home文件系统是xfs,不支持缩减。可以备份数据后,再缩减空间。

#先备份家目录下的文件
[root@server ~ 10:39:40]# ls /home
ggg
[root@server ~ 10:40:17]# mkdir /backup
[root@server ~ 10:40:31]# mv /home/ggg /backup
[root@server ~ 10:41:20]# ls /backup
ggg
#再缩减逻辑卷
[root@server ~ 10:41:31]# lvreduce -L 46G /dev/centos/home
  WARNING: Reducing active and open logical volume to 46.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce centos/home? [y/n]: 
  WARNING: Invalid input ''.
Do you really want to reduce centos/home? [y/n]: y
  Size of logical volume centos/home changed from <145.12 GiB (37150 extents) to 46.00 GiB (11776 extents).
  Logical volume centos/home successfully resized.
# 空间释放到卷组中
[root@server ~ 10:42:09]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree 
  centos   1   3   0 wz--n- <199.00g 99.12g
#先卸载再重新格式化
[root@server ~ 10:43:02]# umount /home
[root@server ~ 10:43:42]# mkfs.xfs -f /dev/centos/home
meta-data=/dev/centos/home       isize=512    agcount=4, agsize=3014656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=12058624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5888, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#因为/etc/fstab设置了会自动挂载所以可以mount -a
[root@server ~ 10:43:49]# grep home /etc/fstab
/dev/mapper/centos-home /home                   xfs     defaults        0 0
[root@server ~ 10:44:19]# mount -a
[root@server ~ 10:44:24]# df /home/
文件系统                   1K-块  已用     可用 已用% 挂载点
/dev/mapper/centos-home 48210944 32992 48177952    1% /home
#再恢复家目录下的数据
[root@server ~ 10:44:31]# cp -a /backup/ggg /home/
[root@server ~ 10:45:42]# ls /home
ggg

#现在卷组多了100G
[root@server ~ 10:57:59]# lsblk /dev/sda2
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda2            8:2    0  199G  0 part 
├─centos-root 253:0    0   50G  0 lvm  /
├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
└─centos-home 253:2    0   46G  0 lvm  /home
[root@server ~ 10:58:27]# vgs
  VG     #PV #LV #SN Attr   VSize    VFree 
  centos   1   3   0 wz--n- <199.00g 99.12g

创建交换空间

# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server ~ 13:36:03]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0  200G  0 disk 
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0  199G  0 part 
  ├─centos-root   253:0    0   50G  0 lvm  /
  ├─centos-swap   253:1    0  3.9G  0 lvm  [SWAP]
  ├─centos-home   253:2    0   46G  0 lvm  /home
  └─centos-swap01 253:3    0    2G  0 lvm  
sdb                 8:16   0   20G  0 disk 
sdc                 8:32   0   20G  0 disk  
sr0                11:0    1  4.4G  0 rom 
#分区
[root@server ~ 13:35:48]# parted /dev/sdc mklabel gpt
[root@server ~ 13:36:03]# parted /dev/sdc unit MiB mkpart swap linux-swap 1 2049
[root@server ~ 13:36:53]# parted /dev/sdc unit MiB print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdc: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start    End      Size     File system     Name  标志
 1      1.00MiB  2049MiB  2048MiB  linux-swap(v1)  swap

# 格式化swap空间
[root@server ~ 13:37:30]# mkswap /dev/sdc1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=bb7e00c1-5219-4500-803b-724651303598

激活 swap 空间

#以下参数都可以用来激活swap空间
[root@server ~ 13:39:21]# blkid /dev/sdc1
/dev/sdc1: UUID="bb7e00c1-5219-4500-803b-724651303598" TYPE="swap" PARTLABEL="swap" PARTUUID="4eb3a0bc-d9d5-4451-bde8-6db3bc476a0e" 
# 激活swap空间
[root@server ~ 13:39:23]# swapon /dev/sdc1

# 查看swap设备列表
[root@server ~ 13:39:59]# swapon -s
文件名				类型		大小	已用	权限
/dev/dm-1         partition	4063228	0	-2
/dev/sdc1         partition	2097148	0	-3

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

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

示例:

[root@centos7 ~]# swapon -p 4 /dev/sdb1

取消 swap 空间激活

[root@server ~ 13:40:09]# swapoff /dev/sdc1
[root@server ~ 13:40:41]# swapon -s
文件名				类型		大小	已用	权限
/dev/dm-1         partition	4063228	0	-2

持久化激活 swap 空间

[root@server ~ 13:39:21]# blkid /dev/sdc1
/dev/sdc1: UUID="bb7e00c1-5219-4500-803b-724651303598" TYPE="swap" PARTLABEL="swap" PARTUUID="4eb3a0bc-d9d5-4451-bde8-6db3bc476a0e" 

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

UUID="bb7e00c1-5219-4500-803b-724651303598" swap swap pri=4 0 0

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

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

#当前未激活
[root@server ~ 13:45:21]# swapon -s
文件名				类型		大小	已用	权限
/dev/dm-1                              	partition	4063228	0	-2
#激活
[root@centos7 ~]# swapon -a
[root@server ~ 13:47:39]# swapon -s
文件名				类型		大小	已用	权限
/dev/dm-1         partition	4063228	0	-2
/dev/sdc1         partition	2097148	0	4


[root@server ~ 13:47:42]# swapoff -a
[root@server ~ 13:47:55]# swapon -s

Linux 系统启动原理

CentOS 7 启动过程

在这里插入图片描述

  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@client ~ 14:52:13]# systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─gdm.service
● ├─initial-setup-reconfiguration.service
● ├─network.service
● ├─rtkit-daemon.service
● ├─systemd-update-utmp-runlevel.service
● ├─udisks2.service
● └─multi-user.target
●   ├─abrt-ccpp.service
●   ├─abrt-oops.service
●   ├─abrt-vmcore.service
●   ├─abrt-xorg.service
●   ├─abrtd.service
●   ├─atd.service
●   ├─auditd.service
●   ├─avahi-daemon.service
......

# 查看反向依赖
[root@client ~ 14:53:08]# systemctl list-dependencies sshd.service --reverse 
sshd.service
● └─multi-user.target
●   └─graphical.target

系统启动级别

传统的 SysVinit 系统定义了 7 个运行级别(0-6),每个级别有特定的作用,具体如下:

运行级别 target 作用描述
0 关机(halt):系统终止所有进程并关闭电源,对应命令 shutdown -h now
1 emergency.target rescue.target 单用户模式(single user mode):仅 root 用户可登录,无网络服务,用于系统修复(如密码找回)。
2 多用户模式(无 NFS):支持多用户登录,但不启动网络文件系统(NFS),部分发行版(如 Debian)默认此级别功能与级别 3 相同。
3 multi-user.target 完全多用户模式(文本界面):启动所有网络服务,用户通过命令行登录,无图形界面。
4 预留级别:默认未使用,可由用户自定义用途。
5 graphical.target 图形化多用户模式:在级别 3 的基础上启动图形界面(如 GNOME、KDE),用户通过图形登录界面访问系统。
6 重启(reboot):系统终止所有进程并重启,对应命令 shutdown -r now

设置系统运行目标

/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@client ~ 14:53:37]# systemctl isolate multi-user.target

# 设置系统当前运行target为graphical.target 
[root@client ~ 14:56:38]# systemctl isolate graphical.target

设置系统开机默认运行 target

# 查看系统开机默认运行target(当前默认是文本界面)
[root@client ~ 14:57:49]# systemctl get-default 
multi-user.target

# 设置系统开机默认运行target(设置默认为图形化)
[root@client ~ 14:58:30]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
# 重启验证

在系统启动时选择其它目标

要在启动时选择其他目标,将 systemd.unit=target.target 参数附加到内核命令行。该配置是临时生效的,经常用于系统启动过程中故障排除。

要使用这种选择其他目标的方法,请执行以下步骤:

  1. 启动或重新启动系统。

  2. 按任意键中断启动加载器菜单倒计时(Enter除外,它用于执行正常启动)。

  3. 将光标移至第一个内核条目,按e编辑当前条目。

    在这里插入图片描述

  4. 将光标移至以linux16开头的行,末尾附加systemd.unit=target.target。例如,systemd.unit=multi-user.target。按 Ctrl+x 使用这些更改进行启动。

在这里插入图片描述

重置 ROOT 密码

以下几种方法可用于设置新的root密码。例如:

  • 系统管理员可以使用Live CD启动系统,挂载根文件系统,然后编辑/etc/shadow:
    • 删除root账户密码字段
    • 使用已知密码字段替换root密码字段
  • 在CentOS 7之后版本中,可以让initramfs运行的脚本在某些点暂停,以提供root身份的shell,然后在该shell中重置root密码。

方法1:rd.break

第一种思路:

  1. 重新启动系统。

  2. 按任意键(Enter除外)中断启动加载器倒计时。

  3. 将光标移至第一个内核条目,按e编辑当前条目。

    在这里插入图片描述

  4. 将光标移至以 linux16 开头的行,末尾附加 rd.break。利用该选项,在系统从initramfs向实际系统移交控制权前,系统将会中断。按Ctrl+x进行启动。

    在这里插入图片描述

  5. 此时,系统会显示root shell,且磁盘上的实际根文件系统以只读方式挂载在/sysroot。

    以读/写形式重新挂载/sysroot。

    switch_root:/# mount -o remount,rw /sysroot
    
  6. 切换root位置,把/sysroot做为文件系统树的根。

    switch_root:/# chroot /sysroot
    
  7. 设置新root密码。

    sh-4.2# echo password | passwd --stdin root
    #或者
    sh-4.2# passwd root
    #如果出现乱码用unset LANG强制系统语言切换为默认的英文,避免中文环境下的乱码问题
    

    提示:password 是用户自定义密码。

  8. 执行以下命令,系统将继续启动。如果系统开启了SELinux功能,还需要执行完整的 SELinux 重新标记,然后再次重新启动。

    sh-4.2# exit
    switch_root:/# exit
    
  9. 登录验证。

第二种思路:

  1. 重新启动系统。

  2. 按任意键(Enter除外)中断启动加载器倒计时。

  3. 将光标移至第一个内核条目,按e编辑当前条目

  4. 将光标移至以 linux16 开头的行,末尾附加 rd.break。利用该选项,在系统从initramfs向实际系统移交控制权前,系统将会中断。按Ctrl+x进行启动。

  5. 此时,系统会显示root shell,且磁盘上的实际根文件系统以只读方式挂载在/sysroot。

    以读/写形式重新挂载/sysroot。

    switch_root:/# mount -o remount,rw /sysroot
    
  6. 先备份一下文件

    switch_root:/# cp /sysroot/etc/shadow /sysroot/etc/shadow.ori
    switch_root:/# vi /sysroot/etc/shadow
    
  7. 把第一行root第一个冒号与第二个冒号之间的全删掉

  8. exit验证

方法2:init=/bin/bash

  1. 重新启动系统。

  2. 按任意键(Enter除外)中断启动加载器倒计时。

  3. 将光标移至第一个内核条目,按e编辑当前条目。

  4. 将光标移至以 linux16 开头的行,末尾附加 init=/bin/bash。利用该选项,在系统从initramfs向实际系统移交控制权前,系统将会中断,请开启一个root shell。按Ctrl+x使用这些更改进行启动。

  5. 此时系统会显示root shell,且磁盘上的实际根文件系统以只读方式挂载在/。以读/写形式重新挂载/。

    bash-4.2# mount -o remount,rw /
    
  6. 使用以下命令删除root密码,等进入系统后再重新设置root密码。

    sh-4.2# passwd -d root
    

    此时还可以使用vi编辑器直接编辑/etc/shadow文件,复制已知用户的密码记录替换root密码。

  7. 如果系统开启了 SELinux 功能,则需要确保所有未标记的文件(包括此时的/etc/shadow)在启动过程中都会重新获得标记。

    sh-4.2# touch /.autorelabel
    
  8. 执行以下命令,系统将继续启动。如果系统开启了SELinux功能,还需要执行完整的 SELinux 重新标记,然后再次重新启动。

    sh-4.2# exec /usr/lib/systemd/systemd
    
  9. 使用root登录,此时不需要密码。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐