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
相关推荐
LIKEYYLL2 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3212 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3212 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately2 小时前
centos单机部署seata
linux·运维·centos
魏 无羡3 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse3 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0663 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
木子Linux3 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8243 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维4 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs