概念
文件系统是Linux内部用来管理磁盘上文件的一套系统,主要体现在文件的存取、查找功能(本身是一套软件,对磁盘上存放的文件进行管理)。
内核(Kernel)
内核是操作系统内部最核心的软件。
查看内核版本
uname -r
内核作用
- 对CPU进行调度管理
- 对内存进行分配管理
- 对进程进行管理
- 对文件系统进行管理
- 对其他硬件进行管理
内核中XFS文件系统存放地址
/usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/fs/xfs
查看内核里的运行模块
lsmod
磁盘(Disk)
磁盘是数据存储的地方,用于数据持久化。常见的磁盘类型包括硬盘(固态硬盘和机械硬盘)、光盘、软盘等。
机械硬盘
- 转速:5640转
- 缓存:128MB
- 接口:SATA
- 磁道(Track):63个扇区
- 柱面(Cylinder):不同盘片的相同磁道组成
- 扇区(Sector):512个字节
- 磁头(Head)
固态硬盘
- 接口:M.2接口(NVMe协议)
- 读速:5000-5999MB/S
磁盘性能指标
- IOPS:每秒钟磁盘的读写次数
- TPS:每秒钟事务处理量(读写次数)
查看磁盘的系统活动报告
sar -d 1 10
查看磁盘分区
lsblk
fdisk -l
parted -l
分区表类型
DOS分区表
- 主分区:安装系统的分区,也可以用来存放数据,编号1-4。
- 扩展分区:突破四个主分区的限制,最多一个,扩展分区占一个主分区的位置(编号1-4),不能存放数据。
- 逻辑分区:可以很多个,编号从5开始。
不同分区表
- DOS分区表:最多四个主分区。
- GPT分区表:支持更多分区。
格式化
格式化背后的操作:
- 删除数据
- 形成文件系统,对划分出来的块进行管理。
格式化命令
mkfs.xfs /dev/sdb1
- xfs:文件系统名称(xfs,ext4)
- /dev:专门用于存放设备文件的目录
挂载
mount /dev/sdb1 /software/
挂载是将格式化后的分区连接到Linux系统中,开始使用该分区。挂载过程相当于Windows给U盘分配盘符的过程,这样系统才能使用磁盘分区。
挂载点
挂载点是系统访问磁盘分区的入口。
分区示例
[root@kafka1 ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x23bd4ca7 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-1048575999,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-1048575999,默认为 1048575999):+100G
分区 1 已设置为 Linux 类型,大小设为 100 GiB
命令(输入 m 获取帮助):N
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): P
分区号 (2-4,默认 2):
起始 扇区 (209717248-1048575999,默认为 209717248):
将使用默认值 209717248
Last 扇区, +扇区 or +size{K,M,G} (209717248-1048575999,默认为 1048575999):+50G
分区 2 已设置为 Linux 类型,大小设为 50 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e
分区号 (3,4,默认 3):
起始 扇区 (314574848-1048575999,默认为 314574848):
将使用默认值 314574848
Last 扇区, +扇区 or +size{K,M,G} (314574848-1048575999,默认为 1048575999):
将使用默认值 1048575999
分区 3 已设置为 Extended 类型,大小设为 350 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:536.9 GB, 536870912000 字节,1048576000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x23bd4ca7
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 209717247 104857600 83 Linux
/dev/sdc2 209717248 314574847 52428800 83 Linux
/dev/sdc3 314574848 1048575999 367000576 5 Extended
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (314576896-1048575999,默认为 314576896):
将使用默认值 314576896
Last 扇区, +扇区 or +size{K,M,G} (314576896-1048575999,默认为 1048575999):+20G
分区 5 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):N
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): L
添加逻辑分区 6
起始 扇区 (356521984-1048575999,默认为 356521984):
将使用默认值 356521984
Last 扇区, +扇区 or +size{K,M,G} (356521984-1048575999,默认为 1048575999):
将使用默认值 1048575999
分区 6 已设置为 Linux 类型,大小设为 330 GiB
命令(输入 m 获取帮助):P
磁盘 /dev/sdc:536.9 GB, 536870912000 字节,1048576000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x23bd4ca7
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 209717247 104857600 83 Linux
/dev/sdc2 209717248 314574847 52428800 83 Linux
/dev/sdc3 314574848 1048575999 367000576 5 Extended
/dev/sdc5 314576896 356519935 20971520 83 Linux
/dev/sdc6 356521984 1048575999 346027008 83 Linux
命令(输入 m 获取帮助):W
The partition table has been altered!
格式化并挂载(临时)
[root@kafka1 ~]# mkfs.xfs /dev/sdc6
meta-data=/dev/sdc6 isize=512 agcount=4, agsize=21626688 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=86506752, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=42239, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@kafka1 ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2174746624
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@kafka1 ~]# mkfs.ext4 /dev/sdc2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2162163712
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@kafka1 ~]# mkdir /mail /data /movie /photo
[root@kafka1 ~]# mount /dev/sdc1/ /mail/
[root@kafka1 ~]# mount /dev/sdc2/ /data/
[root@kafka1 ~]# mount /dev/sdc5/ /movie/
[root@kafka1 ~]# mkfs.xfs /dev/sdc5
meta-data=/dev/sdc5 isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, 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@kafka1 ~]# mount /dev/sdc5/ /movie/
[root@kafka1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 50G 0 part /software
├─sdb2 8:18 0 100G 0 part
├─sdb3 8:19 0 30G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 5G 0 part
└─sdb6 8:22 0 5G 0 part
sdc 8:32 0 500G 0 disk
├─sdc1 8:33 0 100G 0 part /mail
├─sdc2 8:34 0 50G 0 part /data
├─sdc3 8:35 0 1K 0 part
├─sdc5 8:37 0 20G 0 part /movie
└─sdc6 8:38 0 330G 0 part /photo
sr0 11:0 1 4.4G 0 rom
自动挂载
[root@kafka1 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Dec 20 15:09:51 2024
#
# 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/centos-root / xfs defaults 0 0
UUID=0a02a12b-95ef-4ad6-80b9-3d318f5ba8f8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdc1 /mail ext4 defaults 0 0
/dev/sdc2 /date ext4 defaults 0 0 (写入到配置文件)
/dev/sdc5 /movie xfs defaults 0 0
/dev/sdc6 /photo xfs defaults 0 0
其他命令
- mount -a:基于
/etc/fstab
里面的内容来挂载。 - mount:显示哪些挂载。
- umount:解除挂载。
-
umount /dev/sdb1
:通过路径。umount /software
:通过挂载点。
- 如果解除不了:
-
lsof /software
:查看哪些端口占用/software
。kill -9 进程号
:终止进程。lsof -i :端口号
:查看端口号信息。lsof /date
:查看文件的占用信息。lsof -p 进程号
:查看这个进程打开了哪些文件。
文件系统底层机制
- xfs,ext3:单机文件系统。
- nfs:网络文件系统,适合Linux机器间的共享。
- Ceph文件系统:功能强大,性能卓越,高度可扩展的分布式文件系统,适用于大规模数据存储和高并发访问场景。
目录项(Dentry)
查找文件过程
- 用户输入
cat ss.txt
。 - Shell解析命令,创建进程并确定当前工作目录。
- 进程查找当前工作目录的目录项,找到
ss.txt
对应的目录项,获取inode编号。 - 通过inode编号访问inode,检查权限并根据inode里的指针定位文件的数据块(block)。
- 系统从磁盘读取数据块内容到内存。
cat
程序将内容输出到标准输出。- 操作完成后关闭文件,释放资源。
硬链接和软链接的区别
文件 = 目录项 + inode + block。
硬链接
- 硬链接和源文件只是目录项不同,inode和block相同。
- 删除源文件不会导致硬链接失效。
- 硬链接认inode号。
软链接
- 软链接和源文件的所有内容都不同(目录项、inode、block)。
- 删除源文件会导致软链接失效。
- 软链接只认文件名。
创建软链接和硬链接
[root@kafka1 software]# vim ss.txt(原文件)
[root@kafka1 software]# ll -i
总用量 4
68 -rw-r--r-- 1 root root 16 3月 15 19:09 ss.txt
[root@kafka1 software]# ln -s ss.txt ss(软链接)
[root@kafka1 software]# ll -i
总用量 4
67 lrwxrwxrwx 1 root root 6 3月 15 19:10 ss -> ss.txt
68 -rw-r--r-- 1 root root 16 3月 15 19:09 ss.txt
[root@kafka1 software]# ln ss.txt sd(硬链接)
[root@kafka1 software]# ll -i
总用量 8
68 -rw-r--r-- 2 root root 16 3月 15 19:09 sd
67 lrwxrwxrwx 1 root root 6 3月 15 19:10 ss -> ss.txt
68 -rw-r--r-- 2 root root 16 3月 15 19:09 ss.txt
查看磁盘信息
- df -Th / blkid:查看已经挂载的分区。
- fdisk -l / lsblk:查看有哪些分区,不能具体查看挂载的,不知道是否使用。
超过2T分区
- fdisk:超过2T分不了区,要使用
parted
(支持8T)。
机器性能参数命令
- CPU:
top
- 内存:
top
、free
(可以查看当前内存大小)、ipcs -m
(查看共享内存)。 - 网络IO:
nethogs
、iftop
、glances
、dstat
。 - 磁盘IO(数据传输):
glances
、dstat
、sar
、iostat
。
-
sar -d 1 20
:隔1秒看一次,看20次。
- 文件大小:
ls -lh
、du -h 文件夹
:du -sh
。 - 磁盘空间:
df -h
(df -Th
:显示磁盘空间的使用情况的基础上还会显示文件类型)、glances
。
MBR(主引导记录)
MBR大小为512个字节,分为三个部分:
- 主引导扇区:446字节。
- 硬盘分区表:64字节。
- 分区结束标记:2字节。
MBR作用
- 用于系统启动引导,开机时BIOS加载其中的引导程序来启动操作系统。
- 作为硬盘分区管理的基础,其分区表记录硬盘分区信息,让操作系统能正确读写分区数据。
Superblock(超级块)
超级块记录文件系统的整体信息,包括inode和block的总量、使用量、剩余量,以及文件系统的格式。
查看文件系统信息
- ext2/3/4文件系统:
dumpe2fs /dev/sd3
- xfs文件系统:
xfs_info /dev/sdc1
LVM(逻辑卷管理)
LVM屏蔽了底层磁盘布局,便于动态调整磁盘容量。
LVM优势
- 空间利用率高。
- 可以在线扩展容量。
- 数据备份方便。
- 可以随意定义逻辑卷卷标。
LVM组件
- PV(物理卷):整个硬盘或者使用
fdisk
建立的普通分区。 - VG(卷组):一个或多个物理卷组合而成的整体。
- LV(逻辑卷):从卷组分割出一份空间,用于建立文件系统。
LVM步骤
- 先加三个磁盘做操作准备为
sdd
、sde
和sdf
。 - 初始化物理卷:
pvcreate /dev/sdd
pvcreate /dev/sde
- 查看物理卷:
pvscan
- 创建逻辑卷组:
vgcreate mali_store /dev/sdd /dev/sde
- 创建逻辑卷:
lvcreate -L 380G -n mail mali_store
- 查看逻辑卷:
lvscan
- 格式化逻辑卷并创建文件系统:
mkfs.xfs /dev/mali_store/mail
- 挂载逻辑卷:
mount /dev/mali_store/mail /scmail/
永久挂载
将挂载信息写入配置文件/etc/fstab
:
/dev/mali_store/mail /scmail xfs defaults 0 0
扩容逻辑卷
- 添加物理卷到逻辑卷组:
vgextend mali_store /dev/sdf
- 查看逻辑卷组详细信息:
vgdisplay mali_store
- 扩展逻辑卷组:
lvextend -L +200G /dev/mali_store
- 扩展逻辑卷加载配置:
xfs_growfs /dev/mali_store/mail
快照功能
快照功能用于对某个时间点的数据进行存储,便于后续恢复。
服务器
厂商
- 戴尔、三星、华为、浪潮、宝德、长城。
类型
- 塔式服务器
- 刀片式服务器
RAID(磁盘阵列)
硬RAID
- 速度快,性能好,支持热插拔,需要RAID磁盘阵列卡。
软RAID
- 使用
mdadm
软件仿真磁盘阵列,设备文件标识符是/dev/md0
。
RAID类型
- RAID5:单校验值。
- RAID6:双校验值。
- RAID10:假设四块硬盘,先做RAID1(可以坏一块或一边坏一块),再做RAID0。
服务器配置RAID和LVM结合过程
- 系统:RAID1 →
/dev/md0
→ PV → VG → LV。 - 数据:RAID5 →
/dev/md0
→ PV → VG → LV。
NAS与SAN
NAS(网络附属存储)
- 网络存储器,解决数据共享、数据一致性问题,集中管理数据。
- 适用于小公司,价格相对便宜。
- 架构:客户机 → 传统交换机 → NAS。
SAN(存储区域网络)
- 网络存储架构,解决数据共享、数据一致性问题,集中管理数据。
- 适用于大公司,价格高,性能好。
- 架构:业务服务器 → 光纤交换机 → 磁盘阵列服务器。
Ceph分布式存储系统
Ceph是什么?
Ceph是一个开源的分布式存储系统,旨在提供高性能、高可靠性和可扩展的统一存储解决方案。
Ceph核心特性
- 去中心化架构。
- 统一存储接口(对象存储、块存储、文件存储)。
- 高扩展性与性能。
- 自动化管理。
Ceph应用场景
- 云计算与虚拟化。
- 大数据分析。
- 容灾与备份。
- 边缘计算与IoT。
Ceph与其他存储系统对比
存储系统 | 核心优势 | 局限性 |
Ceph | 统一存储接口、去中心化、高扩展性 | 对CPU资源消耗较高 |
GlusterFS | 依赖元数据服务器,扩展性受限 | 无对象存储接口 |
HDFS | 适合大数据批处理 | 扩展复杂,不支持动态元数据管理 |
MooseFS | 分层存储优化成本 | 社区活跃度较低 |
搭建简单的FTP服务器
- 安装
vsftpd
:
yum install vsftpd -y
- 重启服务:
service vsftpd restart
- 新建用户并命名。
- 使用FTP图形化工具(如
xftp
)连接,或其他主机连接。 - 使用
lftp
连接:
yum install lftp -y
lftp -u wy,123456 192.168.206.130
- 进入后,在用户的家目录下操作。
- 命令格式:
-
- 在FTP服务器上操作不需要加
!
。 - 在自己机器上操作需要在命令前加
!
。 - 命令与虚拟机一样,只是字符界面。
- 上传文件:
- 在FTP服务器上操作不需要加
mput 文件路径
-
- 下载文件:
mget 文件路径
以上是关于Linux文件系统、磁盘管理、LVM、RAID、Ceph分布式存储系统以及FTP服务器的详细介绍和操作步骤。