11.RedHat认证-Linux文件系统(中)

11.RedHat认证-Linux文件系统(中)

Linux的文件系统

格式化分区(1道题)

bash 复制代码
#对于Linux分区来说,只有格式化之后才能使用,不格式化是无法使用的。
#Linux分区格式化之后就会变成文件系统,格式化的过程相当于对分区做了一个文件系统。
#Linux常见的文件系统有ext系列,ext2,ext3,ext4。还有xfs,还有btrfs。
#ext4的文件系统限制是,单个文件的大小不能超过1T
#xfs的文件系统单个文件系统量最大支持8EB,单个文件可以支持16TB

#从centos7和rhel7开始,默认的安装文件系统就是xfs了,也提供了xfs文件系统的支持。
#对于文件系统来说,如果涉及到了文件系统性能的需求,首先你要知道的就是你要存储的文件类型(特征)。
#小文件特别多或者文件特别大,但是文件数量少。
bash 复制代码
现在我将 sdb1 和 sdb2分别格式化成xfs 和 ext4文件系统
bash 复制代码
#在Linux操作系统中格式化文件系统的原理是什么呢?
#分区的最小单位是sector(扇区),一个扇区是512B
#假如分区可以直接使用,那么存储一个20MB的文件需要多少个扇区呢?
#答案是40960,也就是说存储一个20MB的文件需要40960个扇区。
#那么读取这个20MB的文件就需要读40960次。效率太低了。
#上面只是我们不能直接使用分区的一个原因。还有其他原因,请自行了解。

#当我们的分区进行格式化之后,会将磁盘的读和写的粒度放大。
#格式化的详细操作
1.会立刻分配一部分空间作为inode节点空间
2.刨除inode节点占用的空间,剩下的空间用作划分block,block包含了多个扇区,
1个block等于2^n个扇区,如果n等于0,那么一个block就等于1个扇区的大小,
如果n=1,那么block就等于2个扇区的大小,如果n=2,那么block就等于4个扇区的大小。
单个block越大,就意味着粒度越大。
# 划分block的目的是要将文件以block的数量来存放

block越大对磁盘的读取效果就越好。block大了,一次性读取的空间变多了,这样你的读效率就会提升。
block并不是越大越好,如果block太大,但是你存放的文件特征是小文件,那么会造成大量磁盘的浪费。
所以格式化文件系统的时候block的大小要选对。

#inode节点
block是用来存放文件内容,inode节点是用来存放文件元数据的。

临时挂载Linux文件系统(因为分区是不能直接挂载--------mount)

bash 复制代码
Linux的mount命令就是挂载文件系统的
mount命令的格式
mount -t 文件系统类型 文件系统所在的分区路径 文件系统的挂载点路径
mount -t fstype 分区路径 挂载点路径
如果是原生的Linux文件系统,那么Linux是可以识别出这个文件系统的,所以如果是原生的Linux文
件系统,那么可以不用加-t参数来指定文件系统的类型。ext系列,xfs就属于Linux原生的文件系统

挂载点你随便指定。取决于你,因为你是管理员,能力越大,责任越大。
一般来说在LInux上的应用如果使用了某个path,那么这个路径你就可以挂载一个文件系统
[root@server ~]# mount /dev/sda5 /mount-point1
[root@server ~]# mount /dev/sda6 /mount-point2

df命令的-T参数表示显示文件系统的类型(type)
-h参数表示将文件系统的大小转换成human易懂的格式。
-H参数表示将文件系统的大小转换成human易懂的格式。
[root@server ~]# df -Th
	Filesystem Type Size Used Avail Use% Mounted on
	devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
	tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
	tmpfs tmpfs 3.9G 10M 3.9G 1% /run
	tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup


mount命令能列出当前系统的所有文件系统挂载情况

持续性挂载Linux文件系统

bash 复制代码
mount命令挂载只是临时挂载,重启就没了
如果你想让你的文件系统永久的挂载那么,就需要将挂载的信息写入/etc/fstab。
/etc/fstab这个文件非常重要,一旦这个文件被误删了,或者里面的某些行被错误的删除了,甚至写法的错误都会导致系统无法正常启动

# 经验,编辑/etc/fstab之前,记得将这个文件备份


[root@server ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu May  9 11:16:12 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cs-root     /                       xfs     defaults        0 0
UUID=04d9fb55-39a4-452e-91bf-70a2afd97cae /boot                   xfs     defaults        0 0
/dev/mapper/cs-swap     none                    swap    defaults        0 0

#第一列是文件系统所在的分区路径
#第二列是文件系统的挂载点
#第三列是文件系统的类型
#第四列是挂载参数
#第五列和第六列分别写0,只有在一些特殊的文件系统,后两列才需要改成非0

# 然后再文件里按照格式写入你需要永久挂在的文件系统。(下面只做示例)
/dev/sda5 /mount-point1 ext4 defaults 0 0
/dev/sda6 /mount-point2 xfs defaults 0 0

--------------------------------------------------------------------------------
当fstab编辑完成之后,使用mount -a命令,mount -a命令会让我们的文件系统按照fstab里面自动挂载。
但是注意,如果某个文件系统已经挂载了,且还在fstab里面被记录,
那么mount -a【并不会】将该文件系统卸载,再重新挂载,mount -a会自动忽略该文件系统

逻辑卷(2道题)重要

bash 复制代码
生产环境使用率极高(非常非常非常非常高)
我们之前使用磁盘,步骤是:
1.安装磁盘
2.分区
3.格式化
4.挂载
5.使用
如果对磁盘直接使用fdisk分区,那么这种分区,我们叫做Linux的标准分区,Linux的标准分区如果
格式化成文件系统之后,挂载使用,那么一旦文件系统的空间满了,是无法扩容的。如果一定要"扩
容",需要将数据备份出来,在换一个更大的文件系统,再将数据还原回去。这种方法效率特别低。

上面的问题促使了逻辑卷的诞生。

逻辑卷是个抽象的概念,我们要记很多新的专有名词

pv(physical volume)物理卷(理论上可以无限大)

vg(volume group)卷组

lv(logical volume)逻辑卷

pv的创建,pv的删除(向pv里面加入新的块设备就相当于扩容pv,从pv里面删除块设备,就相当于缩容pv)

vg的创建,vg的删除,vg的扩容,vg的缩容(不包含)

lv的创建,lv的删除,lv的扩容,lv的缩容(不包含)

PV理论上可以无线扩容

PV下可以创建很多个卷组VG

一个VG下可以创建很多个LV

不同的VG下的LV可以重名,同一个VG下的LV不可重名。

创建物理卷

先分区

bash 复制代码
# 分区
[root@centos8 ~]# fdisk -l /dev/sdb
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x8d773471

设备       启动     起点     末尾     扇区 大小 Id 类型
/dev/sdb1           2048 10487807 10485760   5G 83 Linux
/dev/sdb2       10487808 23070719 12582912   6G 83 Linux


---------------------------------------------------------------------------
# PV的操作
#创建PV
[root@centos8 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@centos8 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.

#不分区,添加硬盘后直接创建pv
[root@centos8 ~]# pvcreate /dev/sdc
 Physical volume "/dev/sdc" successfully created.
 
# 查看pv
[root@centos8 ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sda2  cs lvm2 a--  <19.00g    0 
  /dev/sdb1     lvm2 ---    5.00g 5.00g
  /dev/sdb2     lvm2 ---    6.00g 6.00g
  
# 删除pv (如果pv已经被某个vg使用,那么无法删除)
[root@centos8 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.


---------------------------------------------------------------------------

#卷组的操作
# 创建卷组(VG)
[root@centos8 ~]# vgcreate vg1 /dev/sdb1
  Volume group "vg1" successfully created
[root@centos8 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  cs    1   2   0 wz--n- <19.00g     0 
  vg1   1   0   0 wz--n-  <5.00g <5.00g
  
[root@centos8 ~]# pvs
  PV         VG  Fmt  Attr PSize   PFree 
  /dev/sda2  cs  lvm2 a--  <19.00g     0 
  /dev/sdb1  vg1 lvm2 a--   <5.00g <5.00g
  /dev/sdb2      lvm2 ---    6.00g  6.00g
  
  
# 删除vg (如果在vg上有逻辑卷在使用,那么vg无法删除)
[root@centos8 ~]# vgremove vg1 
  Volume group "vg1" successfully removed
  
# VG扩容(vg扩容是从pv里拿的空间,是不能从现有的vg里拿的)
[root@centos8 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  cs    1   2   0 wz--n- <19.00g     0 
  vg1   1   0   0 wz--n-  <5.00g <5.00g
  vg2   1   0   0 wz--n-  <6.00g <6.00g
[root@centos8 ~]# vgextend vg1 /dev/sdb3
  Volume group "vg1" successfully extended
[root@centos8 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  cs    1   2   0 wz--n- <19.00g     0 
  vg1   2   0   0 wz--n-   6.99g  6.99g
  vg2   1   0   0 wz--n-  <6.00g <6.00g


---------------------------------------------------------------------------


#逻辑卷的操作

-n参数表示逻辑卷的名字 #name
-L参数表示逻辑卷的大小 300M,2G #Large
vg2就表示使用卷组vg2创建该逻辑卷

# 创建逻辑卷
[root@centos8 ~]# lvcreate -n lv1 -L 300M vg1
  Logical volume "lv1" created.
[root@centos8 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root cs  -wi-ao---- <17.00g                                                    
  swap cs  -wi-ao----   2.00g                                                    
  lv1  vg1 -wi-a----- 300.00m
  
逻辑卷创建完成之后,可以直接格式化成为文件系统使用。
如果卷组下面创建了一个新的逻辑卷,那么该逻辑卷就会自动的在设备文件路径出现/dev/vgname/lvname
[root@centos8 ~]# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  cs    1   2   0 wz--n- <19.00g     0 
  vg1   2   1   0 wz--n-   6.99g <6.70g
  vg2   1   0   0 wz--n-  <6.00g <6.00g
[root@centos8 ~]# ls /dev/vg1
lv1
[root@centos8 ~]# ls /dev/vg1 -l
总用量 0
lrwxrwxrwx. 1 root root 7 5月  29 21:26 lv1 -> ../dm-2
dm设备就表示逻辑卷的本尊。dm全拼是device mapper
[root@centos8 ~]# ls /dev/mapper/ -l
总用量 0
crw-------. 1 root root 10, 236 5月  29 20:04 control
lrwxrwxrwx. 1 root root       7 5月  29 20:04 cs-root -> ../dm-0
lrwxrwxrwx. 1 root root       7 5月  29 20:04 cs-swap -> ../dm-1
lrwxrwxrwx. 1 root root       7 5月  29 21:26 vg1-lv1 -> ../dm-2


# 格式化lv1 ,就可以使用了
[root@centos8 ~]# mkfs.ext4 /dev/mapper/vg1-lv1 
mke2fs 1.45.6 (20-Mar-2020)
创建含有 307200 个块(每块 1k)和 76912 个inode的文件系统
文件系统UUID:933a382a-fe30-4636-9ee3-ac8c0a499bec
超级块的备份存储于下列块: 
        8193, 24577, 40961, 57345, 73729, 204801, 221185

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(8192 个块)完成
写入超级块和文件系统账户统计信息: 已完成


#逻辑卷的删除(请注意,删除的路径是在哪个卷组下创建的逻辑卷)
# 比如说,你在vg1卷组下创建了一个逻辑卷lv1 ,那么你删除的时候,就应该是在/dev/vg1/lv1 删除这个lv1逻辑卷。
[root@centos8 ~]# lvremove /dev/vg1/lv1 
Do you really want to remove active logical volume vg1/lv1? [y/n]: y
  Logical volume "lv1" successfully removed.

# 逻辑卷的格式化
[root@server ~]# lvcreate -n lv1-ext4 vg2 -L 200M
[root@server ~]# lvcreate -n lv1-xfs vg2 -L 500M
[root@server ~]# lvs
[root@server ~]# mkfs.ext4 /dev/vg2/lv1-ext4
[root@server ~]# mkfs.xfs /dev/vg2/lv1-xfs
[root@server ~]# mkdir /ext4-test /xfs-test
[root@server ~]# mount -t ext4 /dev/vg2/lv1-ext4 /ext4-test/
[root@server ~]# mount /dev/vg2/lv1-xfs /xfs-test/
[root@server ~]# df -Th /xfs-test/ /ext4-test/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg2-lv1--xfs xfs 499M 29M 470M 6% /xfs-test
/dev/mapper/vg2-lv1--ext4 ext4 190M 1.6M 175M 1% /ext4-test

#逻辑卷的扩容
#在线扩容,在线扩容指的是文件系统不能卸载
将lv1-ext4扩容到300M
讲lv1-xfs扩容到700M
[root@centos8 ~]# lvextend /dev/vg2/lv1-ext4 -L 300M
  Size of logical volume vg2/lv1-ext4 changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
  Logical volume vg2/lv1-ext4 successfully resized.
[root@centos8 ~]# lvs
  LV       VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cs  -wi-ao---- <17.00g                                                    
  swap     cs  -wi-ao----   2.00g                                                    
  lv1-ext4 vg2 -wi-ao---- 300.00m                                                    
  lv1-xfs  vg2 -wi-ao---- 500.00m                                                    
[root@centos8 ~]# lvextend /dev/vg2/lv1-xfs -L 700M
  Size of logical volume vg2/lv1-xfs changed from 500.00 MiB (125 extents) to 700.00 MiB (175 extents).
  Logical volume vg2/lv1-xfs successfully resized.
[root@centos8 ~]# lvs
  LV       VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     cs  -wi-ao---- <17.00g                                                    
  swap     cs  -wi-ao----   2.00g                                                    
  lv1-ext4 vg2 -wi-ao---- 300.00m                                                    
  lv1-xfs  vg2 -wi-ao---- 700.00m 
 
 [root@server ~]# df -Th
 [root@centos8 ~]# df -Th
文件系统                  类型      容量  已用  可用 已用% 挂载点
/dev/mapper/vg2-lv1--ext4 ext4      189M   14K  175M    1% /etx4-test
/dev/mapper/vg2-lv1--xfs  xfs       495M   29M  466M    6% /xfs-test
# 因为扩容的部分没有格式化,所以在文件系统上检测不到。
# 将ext4和xfs扩容的空间加入到文件系统操作:
[root@server ~]# resize2fs /dev/vg2/lv1-ext4
[root@centos8 ~]# xfs_growfs /xfs-test/ 		#xfs的操作是要操作挂载点。
[root@centos8 ~]# df -Th
文件系统                  类型      容量  已用  可用 已用% 挂载点
/dev/mapper/vg2-lv1--ext4 ext4      285M   14K  267M    1% /etx4-test
/dev/mapper/vg2-lv1--xfs  xfs       695M   31M  665M    5% /xfs-test

find命令、dd 命令 、ln命令

bash 复制代码
find命令是Linux中功能非常强大的查找命令,windows没有类似的功能
find命令能搜索任何你想搜索的文件
格式
find 查找范围 查找参数
1.根据名称查找文件,名称支持正则表达式和通配符
[root@server ~]# find / -name default
2. 根据文件拥有者查找
[root@server ~]# find / -user apache 2>>/dev/null | xargs ls -ld
3.根据文件大小查找
[root@server ~]# find / -size +100M 2>>/dev/null | xargs ls -lh
 根据文件大小范围查找
[root@centos8 ~]# find / -size +100M -size -300M 2>>/dev/null | xargs ls -ld

例题:找到拥有人为admin的文件,将其拷贝到/opt/admin-test目录(这个目录要提前创建)
mkdir -p /opt/admin-test
[root@centos8 ~]# find / -user admin 2>>/dev/null -exec cp -a {} /opt/admin-test \;
bash 复制代码
dd命令
1.用dd命令测磁盘的写速度
[root@centos8 ~]# dd if=/dev/zero of=/dev/null
^C记录了1954431+0 的读入
记录了1954430+0 的写出
1000668160 bytes (1.0 GB, 954 MiB) copied, 3.4651 s, 289 MB/s

[root@server ~]# dd if=/dev/zero of=/root/file count=1000 bs=1M  # count是块数量,bs是块大小。
bash 复制代码
ln->link
ln命令可以创建软连接,软连接就相当于快捷方式#软链接用的多,工作中用的多
ln -s /opt/admin-test /root/test-link
相关推荐
chenbin52019 分钟前
Jenkins 自动构建Job
运维·jenkins
java 凯20 分钟前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹24 分钟前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
风静如云1 小时前
OpenBMC:BmcWeb定义service
linux
sszdzq2 小时前
Docker
运维·docker·容器
book01212 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
leoufung2 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
bugtraq20213 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu
xmweisi3 小时前
【华为】报文统计的技术NetStream
运维·服务器·网络·华为认证
VVVVWeiYee3 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信