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