文件系统:file system
文件系统:file system
管理文件的系统:
文件的增删改查 --> 新建,删除,移动,重命名,查找
磁盘分区:新建,删除,格式化,挂载
内核kernel
内核kernel:
1 .对CPU进行调度管理
2 .内存的分配管理
3 .文件系统的管理
4 .进程的管理
5 .其他硬件的管理(网络,显卡,声卡点)
用户空间的进程 不能访问内核空间;内核空间有接口 --> 系统调用
内核里面的进程 可以随意访问用户空间
disk:磁盘(硬盘)
品牌
西部数据(wd)west digit、希捷Seagate、东芝、三星
类型
机械
转速 5400、7200、14000 rpm rate per minute
ssd固态
IOPS 读写速度
input output per second
硬盘
机械盘 --> 盘片 --> 存取速度是有限 --> 比较慢 --> 100M~150M/s
ssd固态盘 --> 芯片 --> 电子 --> 速度快 --> 500M~2G/s
一般情况下ssd固态盘速度是机械盘的5倍,好多有几十倍,甚至上100倍
IOPS:每秒对磁盘的读写次数 input output per second --> 衡量磁盘性能的一个重要的参数 --> 越高越好
#注:dd命令测读写速度
[root@loadbalancer ~]# dd if=/dev/zero of=/root/fengdeyong.dd count=1000 bs=1M
dd 数据备份命令
if 输入文件
of 输出文件
bs 每次写1M的数据
count 写1000次
云服务器
厂家 阿里云 腾讯云 华为云 ucloud 金山云 七牛云 青云 AWS
什么样的业务会使用云服务器?什么情况下自建机房?
数据不方便公开;机密性特别
硬盘的术语
磁道
扇区
柱面
磁头CHS
1个磁道划分63个扇区;1个扇区512字节
磁道数量和磁盘的容量有关
扇区:物理上的概念
逻辑上的概率:块、分区
[root@loadbalancer ~]# fdisk /dev/sda #注:查看第1块磁盘的信息
磁盘的基本参数
容量、转速、缓存、传输速率、平均寻道时间(寻磁道的时间)
分区:partition
类型
主分区 primary
扩展分区 Extended
逻辑分区 logical
Linux中间磁盘、分区等设备均表示为文件
/dev/hda5
hd表示IDE设备
sd表示SCSI设备
fdisk命令
[root@loadbalancer ~]# fdisk -l #注:可以查看有多少磁盘分区
Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区 #注:机器里面只有1块磁盘 20个G
添加磁盘的操作
真实机器 --> 热插拔 直接添加磁盘
虚拟机 添加磁盘:
关机 --> 编辑虚拟机设置 --> 添加硬盘
添加磁盘分区的操作
常规
d 删除分区
n 添加新分区
p 打印分区表
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
[root@loadbalancer ~]# fdisk /dev/sdb #注:添加磁盘分区
命令(输入 m 获取帮助):p
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
命令(输入 m 获取帮助):m
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p #注:主分区
分区号 (1-4, 默认 1): 1
第一个扇区 (2048-209715199, 默认 2048):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-209715199, 默认 209715199): +10G
……
选择 (默认 e):e #注:扩展分区
分区号 (1-4, 默认 1): 4
已选择分区 4
第一个扇区 (83888128-209715199, 默认 83888128):
上个扇区,+sectors 或 +size{K,M,G,T,P} (83888128-209715199, 默认 209715199):
命令(输入 m 获取帮助):w #注:保存
[root@loadbalancer ~]# fdisk -l /dev/sdb #注:查看磁盘分区
Disk /dev/sdb:100 GiB,107374182400 字节,209715200 个扇区
……
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
……
/dev/sdb5 83890176 104861695 20971520 10G 83 Linux
分区表
记录整个磁盘分了几个区
GPT 可以很多个主分区,没有4个主分区的限制
dos MBR 规定一个磁盘最大有4个主分区
新的磁盘里默认是没有分区表的 需要人去创建
MBR是什么
Master Boot Record:主引导记录
硬盘的0柱面、0磁头、1扇区 称为主引导扇区 占512个字节大小
每个磁盘里面都有MBR
MBR大小512字节,分为三个部分
主引导程序:446字节
磁盘分区表DPT:64字节 disk partition table
分区结束标记:2字节
删除MBR的后果:磁盘读取不出来
dd是一个备份和还原的工具
也是一个测试磁盘读写速度的工具
生成一个指定大小的文件,测试磁盘的速度
#步骤1:备份MBR
[root@loadbalancer ~]# mkdir /mbr
[root@loadbalancer ~]# cd /mbr/
[root@loadbalancer mbr]# dd if=/dev/sdb of=/mbr/sdb.mbr bs=512 count=1 #注:备份MBR
if 输入文件 input file
of 输出文件 output file
bs 每次备份的块的大小 --> 单位 默认是字节
count 数据的数量
/dev/zero 零产生器 是一个特殊的设备文件,只会产生一堆零
#步骤2:破坏MBR
[root@loadbalancer mbr]# dd if=/dev/zero of=/dev/sbd bs=512 count=1
[root@loadbalancer mbr]# fdisk -l /dev/sdb
Disk /dev/sdb:100 GiB,107374182400 字节,209715200 个扇区
#步骤3:还原MBR
[root@loadbalancer mbr]# dd if=/mbr/sdb.mbr of=/dev/sdb
新加磁盘的完整步骤
[root@loadbalancer ~]# fdisk /dev/sdc #注:分区
命令(输入 m 获取帮助):n
……
命令(输入 m 获取帮助):p
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdc1 2048 20973567 20971520 10G 83 Linux
/dev/sdc2 20973568 419430399 398456832 190G 5 扩展
/dev/sdc5 20975616 419430399 398454784 190G 83 Linux #注:看磁盘分区是否分完
命令(输入 m 获取帮助):w
#注:1个块的大小占4096个字节
8个扇区(512个字节)组成1个块(4096个字节)
[root@loadbalancer ~]# fdisk -l /dev/sdc
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdc1 2048 20973567 20971520 10G 83 Linux
/dev/sdc2 20973568 419430399 398456832 190G 5 扩展
/dev/sdc5 20975616 419430399 398454784 190G 83 Linux
[root@loadbalancer ~]# mkfs.xfs /dev/sdc1 #注:格式化磁盘分区
#注:格式化为xfs文件系统
格式化后 产生2个重要区域
inode zone 存放属性
block zone 存放数据
[root@loadbalancer ~]# mkdir /music
[root@loadbalancer ~]# mount /dev/sdc1 /music/ #注:挂载
[root@loadbalancer music]# mkfs.ext4 /dev/sdc5 #注:格式化
[root@loadbalancer music]# mount /dev/sdc5 /movie/ #注:挂载
[root@loadbalancer music]# df -Th #注:查看磁盘分区的挂载使用情况
/dev/sdc1 xfs 10G 104M 9.9G 2% /music
/dev/sdc5 ext4 187G 61M 177G 1% /movie
#注:重启后 这2个分区不会自动挂载
1 .添加1块磁盘,大小为50G或者100G
2 .将50G的磁盘分成2个主分区,大小分别为30G和20G和1个扩展分区,扩展分区下划分2个逻辑分区,大小分别为5G和15G
3 .然后将4个分区都格式化为ext4或者xfs文件系统,新建挂载目录,具体挂载如下
10G --> /mail --> ext4
20G --> /software --> ext4
5G --> /movie --> xfs
15G --> /photo --> xfs
4 .实现4个分区开机自动挂载
#步骤:分区
[root@loadbalancer ~]# fdisk /dev/sdd #注:分区
命令(输入 m 获取帮助):n
选择 (默认 p):p #注:建 主分区 p
……
命令(输入 m 获取帮助):n #注:建 扩展分区 e
命令(输入 m 获取帮助):n #注:建 逻辑分区,直接从5开始
添加逻辑分区 5
命令(输入 m 获取帮助):w #注:保存
[root@loadbalancer ~]# fdisk -l /dev/sdd #注:查看分好的区
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdd1 2048 41945087 41943040 20G 83 Linux
/dev/sdd2 41945088 104857599 62912512 30G 5 扩展
/dev/sdd5 41947136 62918655 20971520 10G 83 Linux
/dev/sdd6 62920704 104857599 41936896 20G 83 Linux
[root@loadbalancer ~]# df -Th #注:查看磁盘挂载使用情况
#步骤:格式化
[root@loadbalancer ~]# mkfs.xfs /dev/sdd1 #注:第一个分区 格式化为 xfs
[root@loadbalancer ~]# mkfs.xfs /dev/sdd5
[root@loadbalancer ~]# mkfs.ext4 /dev/sdd6
#步骤:挂载
[root@loadbalancer ~]# mkdir /mail /photo /study
[root@loadbalancer ~]# mount /dev/sdd1 /mail/
[root@loadbalancer ~]# mount /dev/sdd5 /photo/
[root@loadbalancer ~]# mount /dev/sdd6 /study/
[root@loadbalancer ~]# df -Th #注:查看磁盘挂载使用情况
/dev/sdd1 xfs 20G 175M 20G 1% /mail
/dev/sdd5 xfs 10G 104M 9.9G 2% /photo
/dev/sdd6 ext4 20G 45M 19G 1% /study
开机自动挂载
1 .修改/etc/rc.local
vim /etc/rc.loacl --> mount /dev/sdb1 /cali
chmod +x /etc/rc.d/rc.local
2 .修改/etc/fstab
[root@loadbalancer ~]# vim /etc/fstab
/dev/mapper/cl-root / xfs defaults 0 0
UUID=4d86d8c4-eedb-4c03-a4d7-deebb8a67f59 /boot ext4 defaults 1 2
/dev/mapper/cl-swap swap swap defaults 0 0
#注:/ 根分区
# /boot 启动Linux系统所用的东西
# swap 交换分区
[root@loadbalancer ~]# vim /etc/fstab
/dev/sdd1 /mail xfs defaults 0 0
/dev/sdd5 /photo xfs defaults 0 0
/dev/sdd6 /study ext4 defaults 0 0
#注释:
/dev/sdd1 分区
/mail 挂载点
xfs 文件系统的类型
defaults 挂载后的分区的选项(ro,rw等)
0 表示代表不要做dump备份
1代表要每天进行dump的操作
0 开机的过程中,系统默认会以fsck检验我们的这个文件系统 fsck是一个文件系统检测的 命令
0 表示不检测
1 表示检测
2 表示1级别检测完后,再进行检测
#注:卸载
[root@loadbalancer ~]# umount /mail/
[root@loadbalancer ~]# umount /photo/
[root@loadbalancer ~]# umount /study/
#步骤:重新挂载 --> 根据/etc/fstab文件去挂载
[root@loadbalancer ~]# mount -a
[root@loadbalancer ~]# mount #注:查看整个Linux系统 全部挂载的信息
#注:写到/etc/fstab文件里,重启后,会自动挂载
如果/etc/fstab文件写错了,会导致Linux系统起不来 --> 输入root用户密码,注释掉错的,再reboot
/etc/fstab里的配置如果有错误,会导致系统启动失败,ssh服务不会开启,远程是连接不过去的
解决方法:进入系统。注释错误的配置,然后重新启动
如果有人在该目录下,取消挂载失败,如何解决?
#注:lsof /mail 知道哪个进程在访问这个目录
[root@loadbalancer ~]# lsof /mail
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 6397 root cwd DIR 8,49 6 128 /mail
#注:然后再kill -9 卸载掉
losf
查看某个端口被那个进程占用
lsof -i:80
查看某个文件夹被那个进程占用
lsof /cali
kill -9 pid
查看某个进程打开了哪些文件
lsof -p 11000
经典的分区方案
默认 / /boot swap
默认
/
/boot 启动Linux所需要的文件存放在这个分区里
1G
swap 做虚拟内存使用的,当真实内存不足的时候,充当内存使用
交换分区 默认规则,就是设置物理内存的2倍
当物理内存只剩30%的时候使用swap分区
[root@loadbalancer ~]# cat /proc/sys/vm/swappiness
30
把不常用的进程、优先级比较低的进程 挪到 swap分区
#注:内核参数的优化 --> 当物理内存只剩0的时候使用swap分区
[root@loadbalancer ~]# echo 0 >/proc/sys/vm/swappiness
[root@loadbalancer ~]# cat /proc/sys/vm/swappiness
0
内核参数的优化
内核参数的优化:
1 .文件描述符 ulimit -a
2 .打开路由功能
[root@loadbalancer ~]# cat /proc/sys/net/ipv4/ip_forward #注:为1 开启路由功能
1
3 .swap分区什么时候开始使用
格式化
格式化
mkfs.ext4
mkfs.xfs
ntfs windows主流的文件系统
new technology file system
fat32
fdisk和parted区别
磁盘分区工具:
1 .fdisk --> 安全
优点:分区的时候,先缓存在内存里,输入w保存后,才去修改分区表
输入q可以不保存
缺点:不能分超过2T的分区(dos分区表)
gpt分区表可以分超过2T的分区
2 .parted
缺点:直接修改分区表,不先缓存到内存里,立马生效 --> 更加危险
优点:可以分超过2T的分区,适合大磁盘的分区
磁盘阵列:N块磁盘组成一个逻辑的磁盘 20块2T磁盘 --> 总容量40T --> 分区
parted
支持大磁盘进行大分区
[root@loadbalancer ~]# parted /dev/sde
Partition Table: unknown
(parted) help
(parted) mklabel gpt #注:创建一个gpt的分区表
(parted) print #注:查看分区表
Partition Table: gpt
(parted) mkpart pengyf 1 10000 #注:创建一个分区,里面的名字叫pengyf 从1M到10000M --> 9999M
(parted) mkpart wujiawei 10001 2000000
(parted) mkpart wujiawei 2000001 8000000
(parted) quit
[root@loadbalancer ~]# parted /dev/sde print #注:非交互式
(parted) rm 3 #注:删除分区
[root@loadbalancer ~]# parted /dev/sde mkpart lianglu 2000001 8000000 #注:非交互式
交换分区 如何扩大?
把分区格式化,扩进交换分区
[root@loadbalancer ~]# mkswap /dev/sde1 #注:把分区格式化为swap的文件系统
[root@loadbalancer ~]# swapon /dev/sde1 #注:把它扩进去
[root@loadbalancer ~]# swapoff /dev/sde1 #注:停掉
[root@loadbalancer ~]# cat /proc/swaps #注:查看交换分区
[root@loadbalancer ~]# swapoff -a #注:停掉所有的交换分区
[root@loadbalancer ~]# swapon -a #注:开启所有的交换文件,新建的交换分区没有开启
[root@loadbalancer ~]# free -m #注:看内存的大小
目录项
目录项:包括文件名和inode节点号
dentry directory entry
inode映射表
inode bitmap 位图
记录着哪些inode使用了,哪些没有使用
block映射表
Block bitmap
记录着哪些block使用了,哪些没有使用
格式化后,会产生2块区域
inode区 存放文件的属性(时间/权限/大小/用户/组等) index node 索引节点区
block区 块区 存放真实的数据
元数据:描述数据的数据
文件系统的元数据:其实就是对这个文件系统进行描述的元数据
dumpe2fs - dump ext2/ext3/ext4 filesystem information
[root@loadbalancer boot]# dumpe2fs /dev/sda1|more
目录项:directory
目录项:directory
一个文件夹下面包含了很多的文件和文件夹
每一个文件或者文件夹对应一条目录项
Linux正统的文件系统(如ext2、ext3、ext4、xfs)一个文件由目录项、inode和数据块(block)组成。
文件=目录项+inode+数据块(block)
[root@loadbalancer web]# ll -i #注:查看文件/文件夹的 inode号
总用量 4
51898069 -rw-r--r-- 1 root root 15 2月 24 14:54 index.html
#注:51898069 是文件/文件夹的 inode号
根据文件名 找到inode号。inode区会对每一个block块编号,inode区里面有inode表,inode表中有指针,读取相应的block块
inode区被使用光了 就建不了文件了
[root@loadbalancer ~]# dumpe2fs /dev/sdb5|more #注:查看这个分区的超级块
#注:这个命令只能读取 ext2/ext3/ext4的文件系统
[root@loadbalancer test]# xfs_info /dev/sdb1 #注:这个能看xfs文件系统的超级块
[root@loadbalancer test]# vim for.sh
for i in {1..2565}
do
touch sc$i.txt
done
[root@loadbalancer test]# bash for.sh
touch: 无法创建 'sc2549.txt': 设备上没有空间 #注:建不了文件,因为inode耗光了
inode和block的大小不是固定的,会根据你的磁盘分区的容量,自动调整
inode 128(小分区) 256(大分区)
block 1024(小分区) 4096(大分区)
块大些好,还是小些好 --> 如果你存放的都是大文件 --> 块大些好 --> 因为需要查询的块的数量少 --> 速度快
小文件 --> 块小 --> 节约磁盘空间
文件系统修复
fsck修复文件系统的案例
#示例:破坏超级块
[root@loadbalancer test]# dd if=/dev/zero of=/dev/sdb5 bs=512 count=8
记录了8+0 的读入
记录了8+0 的写出
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000569504 s, 7.2 MB/s
[root@loadbalancer test]# ls
[root@loadbalancer test]# cd
[root@loadbalancer ~]# umount /test/
[root@loadbalancer ~]# mount /dev/sdb5 /test/
mount: /test: wrong fs type, bad option, bad superblock on /dev/sdb5, missing codepage or helper program, or other error.
#示例:修复(需要先umount)
[root@loadbalancer ~]# fsck /dev/sdb5 -y
/dev/sdb5:***** 文件系统已修改 *****
/dev/sdb5:15/2560 文件(6.7% 为非连续的), 1600/10240 块
[root@loadbalancer ~]# mount /dev/sdb5 /test/
[root@loadbalancer ~]# cd /test/
[root@loadbalancer test]# ls
feng for.sh lost+found wujiawei zhanghuayou
软链接和硬链接
[root@loadbalancer test]# ll -i
13 -rw-r--r-- 1 root root 46 3月 5 15:22 for.sh
11 drwx------ 2 root root 12288 3月 5 15:15 lost+found
16 lrwxrwxrwx 1 root root 6 3月 5 16:32 soft_for.sh -> for.sh
[root@loadbalancer test]# ln for.sh hard_for.sh
[root@loadbalancer test]# ll -i
总用量 17
13 -rw-r--r-- 2 root root 46 3月 5 15:22 for.sh
13 -rw-r--r-- 2 root root 46 3月 5 15:22 hard_for.sh
11 drwx------ 2 root root 12288 3月 5 15:15 lost+found
16 lrwxrwxrwx 1 root root 6 3月 5 16:32 soft_for.sh -> for.sh
软链接产生自己的inode和block
硬链接和原文件指向同一个inode和block
链接数是目录项链接inode的次数
如何知道磁盘 忙还是不忙
iostat
dstat
glances
[root@loadbalancer ~]# yum install dstat -y #注:Python写的;全局命令磁盘、CPU、内存
[root@loadbalancer ~]# dstat
[root@loadbalancer ~]# dstat -D total,sda,sdb,sdc,sdd,sde #注:统计磁盘速度
You did not select any stats, using -cdngy by default.
----total-usage---- --dsk/sda-----dsk/sdb-----dsk/sdc-----dsk/sdd-----dsk/sde----dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ: read writ: read writ: read writ: read writ: read writ| recv send| in out | int csw
0 0 98 0 0| 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 |4732 1080 | 0 0 | 125 279
[root@loadbalancer ~]# dstat -D total,sda,sdb,sdc,sdd,sde -ma #注:-m看内存
[root@loadbalancer ~]# yum install epel-release -y
[root@loadbalancer ~]# yum install glances -y #注:也是Python写的
[root@loadbalancer ~]# glances
[root@loadbalancer ~]# glances --diskio-iops #注:看磁盘读写速度
iostat
[root@loadbalancer ~]# yum install sysstat -y
[root@loadbalancer ~]# iostat
Linux 4.18.0-193.el8.x86_64 (loadbalancer) 2021年03月05日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.95 0.02 1.52 0.29 0.00 97.21
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.64 133.94 52.92 1235823 488235
sdb 0.20 4.40 1.61 40575 14845
参考参数
https://www.cnblogs.com/ftl1012/p/iostat.html
[root@loadbalancer ~]# iostat -x
[root@loadbalancer ~]# iostat -x 3 #注:每隔3s钟输出一次
[root@loadbalancer ~]# iostat -x -d 1 2 #注:每隔1s中输出一次,累计输出2次
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
r/s 每秒钟读的次数
w/s 每秒钟写的次数
rkB/s 每秒钟读的字节数
wkB/s 每秒钟写的字节数
rrqm/s 读的请求被合并的次数(不关注)
……
%util 磁盘性能是否达到100% (是否饱和)
服务器型号
塔式
机架式
刀片式
1u=4.5cm
RAID 磁盘阵列
专业的存储服务器 --> 都支持raid
RAID0:条带(striping)
--> 2块以上磁盘组成raid0;没有容错功能;读写速度快(多块磁盘同时写)
RAID1:镜像(mirroring)
--> 2块磁盘组成;有容错功能(2边一模一样);磁盘利用率50% --> 系统/重要数据备份
RAID5:条带+分布校验
--> 容错;读写速度快;最少3块磁盘(因为1个放校验值);磁盘利用率(n-1)/n
LVM 逻辑卷管理
动态扩容
/boot分区用于放引导文件,不能使用LVM动态扩容
raid和lvm的融合
#步骤:创建物理卷
[root@test ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@test ~]# pvscan
#步骤:创建卷组
[root@test ~]# vgcreate mail_store /dev/sdb /dev/sdc
Volume group "mail_store" successfully created
[root@test ~]# vgscan
#步骤:划分逻辑卷
[root@test ~]# lvcreate -L 150G -n sc_mail mail_store
Logical volume "sc_mail" created.
[root@test ~]# lvscan
#步骤:格式化
[root@test ~]# mkfs.xfs /dev/mail_store/sc_mail
#步骤:挂载
[root@test ~]# mount /dev/mail_store/sc_mail /mail/
[root@test ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/mail_store-sc_mail xfs 150G 1.1G 149G 1% /mail
#步骤:设置开机自动挂载
[root@test ~]# vim /etc/fstab
/dev/mail_store/sc_mail /mail xfs defaults 0 0
#步骤:扩容
[root@test ~]# lvextend -L +40G /dev/mail_store/sc_mail
[root@test ~]# xfs_growfs /dev/mail_store/sc_mail #注:让Linux内核重新识别lv的大小
[root@test ~]# lvdisplay
[root@test ~]# df -Th
[root@test ~]# pvcreate /dev/sdd
[root@test ~]# pvcreate /dev/sde
#步骤:vg扩容的问题
[root@test ~]# vgextend mail_store /dev/sdd /dev/sde
Volume group "mail_store" successfully extended
[root@test ~]# vgdisplay mail_store
#注:体现LVM在线动态扩容
LVM没有容错功能,raid有容错功能