一、磁盘术语总结
磁盘结构图:

- head:一个盘面对应一个磁头
- track:磁盘上的数据存储区域,这些区域通常以同心圆的形式排列。
- sector: 把磁道按照每512字节细分出扇区,每个磁道上的扇区数量可不同。
- cylinder: 柱面是硬盘上所有磁头(磁头数等于硬盘的磁头面数)可以同时读写的磁道的集合。每个柱面包含相同数量的磁道,这些磁道在硬盘的每个面上都是对应的。
二、MBR、GPT
2.1 MBR
MBR:Master Boot Record
分区结构图:

在MBR分区中,因为在0磁道0扇区上只留了64bytes空间存储分区表信息,而一个分区的关键信息要占用16个字节来存放,所以每块硬盘只能分四个分区:3个主分区+1个拓展分区,其中拓展分区中可以分出N个逻辑分区。每个分区中最大空间不能超过2T
2.2 GPT分区
GPT:GUID(Globals Unique Identifiers) partition table
GPT分区结构分为4个区域:
GPT头
分区表
GPT分区
备份区域
GPT使用64位寻址空间,不限制分区数量,理论最大分区9.4ZB的存储空间。
三、分区文件系统命令总结
3.1 分区命令
fdisk
#使用fdisk命令对sdb硬盘分区
[root@centos7.9_105 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
#查看硬盘情况
[root@centos7.9_105 ~]# fdisk -l /dev/sdb
....
#查看相关帮助
]# fdisk /dev/sdb
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
#新建分区 一个5个G的分区
[root@centos7.9_105 ~]# fdisk /dev/sdb
......
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #选择分区类型
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G #分配分区大小
Partition 1 of type Linux and of size 5 GiB is set
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: 0x1f2e77b5
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
Command (m for help): w #保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#查看分区
[root@centos7.9_105 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part
parted
#prated命令分区和fdisk命令不同,parted命令是非交互式的
#查看分区情况
]# parted -l
....
#创建gpt分区
[root@centos7.9 ~]# parted /dev/sdc mklabel gpt
Information: You may need to update /etc/fstab.
[root@centos7.9 ~]# parted /dev/sdc print
....
Partition Table: gpt
[root@centos7.9 ~]# parted /dev/sdc mkpart primary 1 1001
Information: You may need to update /etc/fstab.
[root@centos7.9 ~]# parted /dev/sdc print
......
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
[root@centos7.9 ~]# parted /dev/sdc mkpart primary 1002 2000
#删除分区
[root@centos7.9 ~]# parted /dev/sdc rm 2
Information: You may need to update /etc/fstab.
[root@centos7.9 ~]# parted /dev/sdc print
......
Number Start End Size File system Name Flags
1 1049kB 1001MB 1000MB primary
mkfs
#mkfs用于将分区格式化为文件系统
[root@centos7.9 ~]# mkfs
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
#将/dev/sdb1格式化成ext2文件系统
[root@centos7.9 ~]# mkfs.ext2 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
......
tune2fs
tune2fs 是一个用于调整 Linux 文件系统参数的命令行工具,特别是针对 ext2、ext3 和 ext4 文件系统。这个工具可以设置或查看文件系统的许多属性,例如块大小、检查间隔、挂载计数等。
以下是一些 tune2fs 的常用选项:
-j:启用或修改日志文件系统(如 ext3 或 ext4)的日志功能。
-c:设置文件系统的最大挂载次数。
-i:设置文件系统的挂载间隔,即两次挂载之间需要等待的时间。
-l:列出文件系统的详细信息。
-o:启用或禁用文件系统的某些特性,如用户配额、文件系统日志等。
-m:设置文件系统的预留空间百分比,用于系统进程和用户。
[root@centos7.9 ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: dd770993-4e9c-47a7-8542-6844e62e98b9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
......
xfs_info
fs_info 可以提供有关文件系统状态、配置和统计信息的详细信息。
以下是一些 xfs_info 的常用功能和输出示例:
文件系统状态:显示文件系统的挂载状态、是否正在使用等信息。
块大小:显示文件系统使用的块大小。
inode 数量:显示文件系统中 inode 的总数和已使用的数量。
空间使用情况:显示文件系统的空间使用情况,包括总空间、已用空间、可用空间等。
挂载选项:显示文件系统挂载时使用的选项。
文件系统特性:显示文件系统支持的特性,如延迟分配、空间预分配等。
[root@centos7.9 ~]# xfs_info /dev/sda1
meta-data=/dev/sda1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
......
fsck
fsck 可以检测文件系统中的错误,如损坏的目录结构、丢失的文件、不一致的链接等,并尝试自动修复这些问题。
常用选项
-A:检查所有挂载的文件系统。
-R:从根文件系统开始检查,然后递归地检查所有其他文件系统。
-N:不执行实际的修复操作,只进行模拟检查。
-y:自动回答所有提示,执行修复操作。
-n:不自动回答任何提示,需要用户确认。
-v:详细模式,显示更多信息。
-f 或 --force:强制检查,即使文件系统看起来是干净的。
mount和unmount
mount
格式化之后的分区与本地文件目录挂载,使得分区可以正常使用。
常用选项
-a:挂载 /etc/fstab 中定义的所有文件系统。
-o:后面跟挂载选项,如 ro(只读)、rw(读写)、noexec(不允许执行二进制文件)等。
-t:指定文件系统的类型,如 ext4、xfs、ntfs 等。
-L:通过标签挂载设备。
-U:通过 UUID 挂载设备。
#把前面格式化的分区/dev/sdb1挂载到/nmt/data
[root@centos7.9 ~]# mkdir /mnt/data
[root@centos7.9 ~]# mount /dev/sdb1 /mnt/data/
[root@centos7.9 ~]# df -Th |grep /mnt
/dev/sdb1 ext2 5.0G 10M 4.7G 1% /mnt/data
注:mount命令只是临时挂载,当服务器重启,挂载将会取消,想要实现永久挂载需要把挂载关系写入/etc/fstab文件中,或者把挂载命令写入rc.local文件中。
unmount
用于解除文件和分区的挂载关系
常用选项
-f:强制卸载文件系统,即使有进程正在使用该文件系统。
-n:卸载时不更新 /etc/mtab 文件(通常在卸载根文件系统时使用)。
-l:懒卸载,即在下次挂载时执行必要的清理工作,而不是立即执行。
-a:卸载所有挂载的文件系统。
#解除/dev/sdb1 /mnt/data/的挂载关系
[root@centos7.9 ~]# umount /dev/sdb1 /mnt/data/
四、raid 相关
RAID(Redundant Array of Independent Disks)是一种将多个硬盘驱动器组合成一个逻辑单元的数据存储虚拟化技术,以提高性能、可靠性或容量。以下是几种常见RAID级别的工作原理、利用率、冗余性、性能和最少硬盘数量的总结:
RAID 0
- 工作原理:条带化,数据分散存储在两个或多个硬盘上,没有冗余。
- 利用率:100%,所有硬盘空间都可用于存储数据。
- 冗余性:没有冗余,单个硬盘故障会导致数据丢失。
- 性能:读写性能高,因为数据分散在多个硬盘上并行处理。
- 最少硬盘数量:2个。
RAID 1
- 工作原理:镜像,数据在两个硬盘上存储两份,完全冗余。
- 利用率:50%,只有一半的硬盘空间可用于存储数据。
- 冗余性:高,即使一个硬盘故障,另一个硬盘仍然可以工作。
- 性能:写入性能较低,因为数据需要同时写入两个硬盘;读取性能较高,可以同时从两个硬盘读取。
- 最少硬盘数量:2个。
RAID 5
- 工作原理:带奇偶校验的条带化,数据和奇偶校验信息交错存储在三个或更多的硬盘上。
- 利用率:(n-1)/n,其中n是硬盘数量,例如,3个硬盘的利用率约为67%。
- 冗余性:允许单个硬盘故障,奇偶校验信息用于数据恢复。
- 性能:写入性能较低,因为需要计算奇偶校验;读取性能较高。
- 最少硬盘数量:3个。
RAID 10 (或称 RAID 1+0)
- 工作原理:先镜像再条带化,结合了RAID 1和RAID 0的特点。
- 利用率:50%,因为先进行镜像,再进行条带化。
- 冗余性:高,每个数据块都有镜像副本。
- 性能:读写性能都高,因为数据分布在多个硬盘上并行处理。
- 最少硬盘数量:4个(2个用于镜像,每个镜像包含2个硬盘)。
RAID 01 (或称 RAID 1+0)
- 工作原理:先条带化再镜像,与RAID 10相反,但性能和特性相似。
- 利用率:50%,与RAID 10相同。
- 冗余性:高,与RAID 10相同。
- 性能:读写性能都高,与RAID 10相同。
- 最少硬盘数量:4个。
五、lvm
LVM(Logical Volume Manager)是一种在现代操作系统中广泛使用的高级硬盘管理工具,特别是在Linux系统中。LVM 提供了一种灵活的方式来管理磁盘空间,允许用户以逻辑卷的形式动态调整存储空间的大小,而不需要重新格式化或重新分区。
#创建pv
[root@centos7.9 ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
#查看pv
[root@centos7.9 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdc1 lvm2 --- 954.00m 954.00m
[root@centos7.9 ~]# pvdisplay /dev/sdc1
"/dev/sdc1" is a new physical volume of "954.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 954.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID x9XHzS-waFV-aWqf-BlMw-WR2v-Z7y2-GiVCu8
#移除pv
[root@centos7.9 ~]# pvremove /dev/sdc1
VG
#创建vg
[root@centos7.9 ~]# vgcreate -s 16M testvg /dev/sdc1
Volume group "testvg" successfully created
[root@centos7.9 ~]# vgs testvg
VG #PV #LV #SN Attr VSize VFree
testvg 1 0 0 wz--n- 944.00m 944.00m
#扩展vg
[root@centos7.9 ~]# vgextend testvg /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
Volume group "testvg" successfully extended
[root@centos7.9 ~]# vgs testvg
VG #PV #LV #SN Attr VSize VFree
testvg 2 0 0 wz--n- <5.91g <5.91g
lv
#创建lv
[root@centos7.9 ~]# lvcreate -l 100 -n lv1 testvg
Logical volume "lv1" created.
[root@centos7.9 ~]# lvcreate -L 100 -n lv2 testvg
Rounding up size to full physical extent 112.00 MiB
Logical volume "lv2" created.
[root@centos7.9 ~]# lvcreate -l 10%free -n lv3 testvg
Logical volume "lv3" created.
#查看lv
[root@centos7.9 ~]# lvs /dev/testvg/lv*
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 testvg -wi-a----- 1.56g
lv2 testvg -wi-a----- 112.00m
lv3 testvg -wi-a----- 432.00m
六、程序包管理器
程序包管理器在不同发行版Linux中有所不同
6.1 Redhat
在centos、rocky等红帽系列Linux系统中使用的包管理器有rpm和yum,rpm不能自动解决安装包之间的依赖关系,yum可以自动解决包之间的依赖关系。
rpm常用用法
1. 安装软件
rpm -i 包名
2.查看包产生那些目录
rmp -ql 包名
3查看是否已安装指定的包
rpm -qa 包名
yum 常用用法
1.安装软件
yum install -y 包名
2.卸载软件
yum remove 包名
3.查询命令来自哪个安装包
yum provides 命令名
4.列出所有安装包
yum list
6.2 Debian
在Debian系列的Linux中常用的包管理器是dkpg和apt
dpkg常用用法
1.安装文件
dpkg -i 包名
2.查看安装包产生的文件
dpkg -L 包名
3.卸载包
dpkg -r 包名
4.检查包是否安装
dpkg -l | grep 包名
5.检查软件包是否依赖其他包
dpkg -c 包名
apt常用用法
1.更新安装包信息
apt update
2.安装软件
apt install -y 包名
3.卸载软件且删除依赖
apt autoremove 包名
6.3 yum包管理器
yum包管理器是基于C/S的工作模式,分为客户端和服务端,提供下载包的一段为服务端。
示例:搭建私有仓库
服务端:
1.安装一个能提供httP服务的软件nginx或者apache都可以
[root@server ~]# yum -y install httpd
2.设置开机自启
[root@server ~]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3.检查80端口是否监听中
[root@server ~]# ss -ntlp |grep 80
LISTEN 0 128 :::80 :::* users:(("httpd",pid=1309,fd=4),("httpd",pid=1308,fd=4),("httpd",pid=1307,fd=4),("httpd",pid=1306,fd=4),("httpd",pid=1305,fd=4),("httpd",pid=1304,fd=4))
4.浏览器访问服务端地址或者添加域名解析访问域名看看访问是否正常
5.从网络上下载包到本地
[root@server ~]# yum install -y dnf-4.0.9.2-1.el7_6.noarch
[root@server ~]# yum install -y python3
dnf reposync --repoid=epel --download-metadata -p /var/www/html/
#--repoid=是从哪个仓库下载包 --d..这里是存放包的地址,会自动生成和前面下载包一致的文件夹
#在同步之前可以先使用yum repolist看看有哪些源可以用
#检查是否已下载包
[root@server ~]#cd /var/www/html/
[root@server html]#ls epel/
Packages repodata
#Packages是安装包存放目录 repodata是元数据目录
浏览器访问界面:

服务端从网络上下载rpm包过程

客户端:
#确保客户端和服务端的网络可达可以先ping一下
[root@client ~]#ping 10.0.0.20
PING 10.0.0.20 (10.0.0.20) 56(84) bytes of data.
64 bytes from 10.0.0.20: icmp_seq=1 ttl=64 time=0.208 ms
#配置源地址
[root@client ~]#cat /etc/yum.repos.d/test.repo
[localrpm]
name=localrpm
baseurl=http://10.0.0.20/epel/ #这里的地址要是服务端的地址
gpgcheck=0
[BaseOS]
name=BaseOS
baseurl=file:///mnt/cdrom/BaseOS/
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///mnt/cdrom/AppStream/
gpgcheck=0
#清空缓存
[root@client ~]#yum clean all
0 files removed
[root@client ~]#yum repolist
#查看私有仓库信息
[root@client ~]#yum repoinfo localrpm
localrpm 185 MB/s | 14 MB 00:00
ustc 23 MB/s | 14 MB 00:00
Last metadata expiration check: 0:00:05 ago on Sun 18 Aug 2024 11:25:35 PM CST.
Repo-id : localrpm
Repo-name : localrpm
Repo-status : enabled
Repo-revision : 1723854430
Repo-updated : Sat 17 Aug 2024 08:27:52 AM CST
Repo-pkgs : 10,217
Repo-available-pkgs: 10,213
Repo-size : 19 G
Repo-baseurl : http://10.0.0.20/epel/
Repo-expire : 172,800 second(s) (last: Sun 18 Aug 2024 11:25:29 PM CST)
Repo-filename : /etc/yum.repos.d/test.repo
#私有仓库已经搭建完成,在安装软件时指定仓库即可使用
浏览器访问:http://10.0.0.20/epel可以看到有下面两个目录
