Linux之启动流程,磁盘阵列,文件系统和逻辑卷。

启动流程。

启动流程(CentOS7)

1. 加载BIOS的硬件信息,获取第一个启动设备
2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4. 核心执行systemd程序,并获取默认的运行信息
5. systemd程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
6. 启动核心的外挂模块
7. systemd执行运行的各个批处理文件(scripts)
8. systemd执行/etc/rc.d/rc.local
9. 执行/bin/login程序,等待用户登录
10. 登录之后开始以Shell控制主机

MBR
MBR是一种分区表格式,位于磁盘的第一个扇区,大小是521字节。存放着两个重要的东西
-主引导记录:可以安装启动引导的地方,有446个字节。
-分区表:记录整块磁盘分区的状态,有64字节。
-结束符:55 AA 固定的两个字节。若不是,则不进行引导。
由于分区表只有64个字节,因此MBR格式的分区最多能有四组记录区,每组记录了该区段的起始和结束柱面号码。
但是有时候却又不止能分成四个分区,那是因为在四组分区中被分为主要分区(Primary)和扩展分区(Extended)
扩展分区可以重新再被分区,被分出来的区块叫做逻辑分区(logical partition)
GRUB
GRUB是存在MBR前面的446字节当中的一个启动引导程序,启动引导程序可以指定使用哪个内核文件来启动,并实际加载内核到内存中解压缩与执行。
GRUB分类还有GRUB和GRUB2,目前CentOS7使用的是GRUB2版本,当然还存在其他类型的引导程序。目前来说GRUB2的引导分为三个阶段
1.1st stage:MBR的前446个字节
1.5 stage: mbr 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
2.secondary boot loader :2nd stage,分区文件/boot/grub/
现在来把第一阶段破坏看看会是怎么样子的。

1.先查看MBR分区的512字节是什么样。
[root@centos7 ~]# hexdump -C -n 512 /dev/sda
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 05 7c  |. ..d|<.t...R..||
00000090  b4 41 bb aa 55 cd 13 5a  52 72 3d 81 fb 55 aa 75  |.A..U..ZRr=..U.u|
000000a0  37 83 e1 01 74 32 31 c0  89 44 04 40 88 44 ff 89  |7...t21..D.@.D..|
000000b0  44 02 c7 04 10 00 66 8b  1e 5c 7c 66 89 5c 08 66  |D.....f..\|f.\.f|
000000c0  8b 1e 60 7c 66 89 5c 0c  c7 44 06 00 70 b4 42 cd  |..`|f.\..D..p.B.|
000000d0  13 72 05 bb 00 70 eb 76  b4 08 cd 13 73 0d 5a 84  |.r...p.v....s.Z.|
000000e0  d2 0f 83 de 00 be 85 7d  e9 82 00 66 0f b6 c6 88  |.......}...f....|
000000f0  64 ff 40 66 89 44 04 0f  b6 d1 c1 e2 02 88 e8 88  |d.@f.D..........|
00000100  f4 40 89 44 08 0f b6 c2  c0 e8 02 66 89 04 66 a1  |.@.D.......f..f.|
00000110  60 7c 66 09 c0 75 4e 66  a1 5c 7c 66 31 d2 66 f7  |`|f..uNf.\|f1.f.|
00000120  34 88 d1 31 d2 66 f7 74  04 3b 44 08 7d 37 fe c1  |4..1.f.t.;D.}7..|
00000130  88 c5 30 c0 c1 e8 02 08  c1 88 d0 5a 88 c6 bb 00  |..0........Z....|
00000140  70 8e c3 31 db b8 01 02  cd 13 72 1e 8c c3 60 1e  |p..1......r...`.|
00000150  b9 00 01 8e db 31 f6 bf  00 80 8e c6 fc f3 a5 1f  |.....1..........|
00000160  61 ff 26 5a 7c be 80 7d  eb 03 be 8f 7d e8 34 00  |a.&Z|..}....}.4.|
00000170  be 94 7d e8 2e 00 cd 18  eb fe 47 52 55 42 20 00  |..}.......GRUB .|
00000180  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
00000190  65 61 64 00 20 45 72 72  6f 72 0d 0a 00 bb 01 00  |ead. Error......|
000001a0  b4 0e cd 10 ac 3c 00 75  f4 c3 00 00 00 00 00 00  |.....<.u........|
000001b0  00 00 00 00 00 00 00 00  70 70 0e 00 00 00 80 20  |........pp..... |
000001c0  21 00 83 aa 28 82 00 08  00 00 00 00 20 00 00 aa  |!...(....... ...|
000001d0  29 82 8e fe ff ff 00 08  20 00 00 20 c0 03 00 00  |)....... .. ....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

2.再将磁盘MBR分区的前446字节取出来。
[root@centos7 ~]# dd if=/dev/sda of=f1.img bs=1 count=446

3.然后将MBR的前446个字节换为全0。
[root@centos7 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446

这是未归零之前的启动菜单。

image.png

这是归零后的启动菜单。
image.png

可以看到,启动时可以选择加载内核的选项不在了。这也就正是说明了GRUB引导程序无法正常启动,导致找不到内核文件了,现在我们将它还原。
选择上图中的Troubleshooting模式,然后进入救援模式。
image.png

再根据提示进入到shell交互界面
image.png

执行下面的命令。之后重启便恢复啦
image.png

又回到最初的画面。
image.png

不光是启动引导程序可能会出现错误,在服务器中,数据的重要性更加应该得到重视。下面来说说数据的安全性怎么保护。
在服务器中,数据的安全通常通过备份的方式来进行保证其有一定的冗余性,我们知道,数据都是存放在磁盘当中的,若是磁盘突然坏掉了,那数据便不可以使用了。当然,也存在着恢复的可能性,但那要花费更多的时间和金钱去做修复。但是RIAD技术可以帮助你缓解这种情况。

RAID

RAID(Redundant Arrays of Inexpensive Disks)中文名字叫做独立冗余磁盘阵列。
RAID可以通过软件或者硬件来将多个较小的磁盘组成一个较大的磁盘,这个被组成的磁盘不仅能够存放数据,还对数据的安全性有保护作用。常见的RAID模式有0,1,01,10,5

RAID 0 (等量模式)

RAID 0 (等量模式):性能最佳
这种模式下,最小需要两块硬盘,当拥有两块大小的磁盘来组成时,在该模式下RAID会将磁盘先切出等量的数据块(chunk,一般可设置为4KB-1MB),然后当一个文件要写入RAID时改文件根据chunk的大小切割好,之后再依序放到各个磁盘中,由于数据会交替的存放在磁盘中,所以,你的数据会被等量的放在各个磁盘上。
优点

  • 由于数据是先切割好,然后再放入到磁盘中,每个磁盘负责的数据量变小。磁盘的性能有所提升。
  • 磁盘的容量会增大,RAID 0 模式下的磁盘容量等于组成该模式磁盘的容量相加。
    缺点
  • 由于每个文件都是被切割等分放在磁盘当中的,一旦其中一块磁盘损坏,那所有的数据都不能使用了。

RAID 1(镜像模式)

RAID 1(镜像模式):完全备份
组成该模式的磁盘最好也是一模一样的磁盘。如果不是一样的,那组成后的容量是以最小的那块来决定的。
在RAID 1模式下会使同一份数据完整的保存在两块磁盘上面。RAID1 在写入数据的时候,同一份数据会被分别写入到不同的磁盘当中,这便会使磁盘的写入功能受到影响,写入能力会变差,但是使用硬件磁盘阵列卡的时候不会出现这样的情况,因为它会自动复制一份。但是读取数据的能力则还可以。因为数据存放在两块磁盘上,如果多个进程在读取同一条数据,RAID会自动平衡读写性能。
优点:

  • 由于两块磁盘中的数据一致,即使坏到一块磁盘也不必担心。
    缺点:
  • 由于两块磁盘放置的数据一样,磁盘的容量便只有全部磁盘容量的一半。

RAID 10 | 01

RAID 10 | 01就是RAID1+0,RAID 0+1
由于RAID0的数据安全不好,RAID1的写入性能不好,然后就可以通过组合的方式来将优点合并。
RAID1+0 就是先将两块磁盘组成RAID1,然后RADI1作为第一组,再取两块磁盘再做成RAID1,然后将其命名为第二组,最后将第一组和第二组再使用RADI的的方式组合起来。这便成了RAID1+0。如此一来,不管是那一组的RAID损坏,都不会有任何问题发生。反过来就是RAID01了。
优点

  • 读写性能提升很高。
    缺点
  • 费钱

RAID5 均衡考虑

RAID5至少需要3块以上的磁盘才能后组成,每个循环写入时,都会有部分的奇偶校验值被记录下来,并且每次都会记录在不同的磁盘当中。这个值会记录其他磁盘的备份数据,用于当磁盘损失时的恢复。
优点
1.RAID5的读写性能会有所增加
2.由于存在奇偶校验值,任何一块磁盘损坏后都可以恢复。
缺点
1.磁盘的容量会是整体磁盘减少一块后的容量。

热备份磁盘

为了让系统可以实时的在坏掉硬盘时主动的重建,因此就需要预备磁盘 (spare disk) 的辅 助。 所谓的 spare disk 就是一颗或多颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平 时并不会被磁盘阵列所使用, 当磁盘阵列有任何磁盘损毁时,则这颗 spare disk 会被主动的 拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列! 然后立即重建数据系统。若你的磁盘阵列有支持热拔插, 直接将坏掉的那颗磁盘 拔除换一颗新的,再将那颗新的设置成为 spare disk ,就完成了!

总结

image.png

文件系统

文件系统是建立在磁盘上的,在linux中,文件含有权限(rwx)和属性(属主,属组,时间等)。文件系统化将这两部分的数据分别存放在不同的区块,权限和属性放在Inode中,实际的数据则放置在数据区块中。另外还有一个超级区块记录着整个文件系统的整体信息。
每个 inode 与 block 都有编号,至于这三个数据的意义可以简略说明如下

  • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
  • block:实际记录文件的内容,若文件太大时,会占用多个 block;
    由于每个inode与block都有编号,而每个文件都会占用一个inode,inode中放置着block的号码。那么我们现在只需要找到文件的inode号就可以知道数据存放的block位置,就可以实际读出文件的实际信息了。
    如图,现在文件系统先格式化出inode和block的区块,假设某个文件的属性和权限放置在inode4号中(较小的格子),而4号中记录了文件数据的实际放置位置2,7,13,15这四个block块中,此时操作系统就可以按照此这样的排列来读取文件,一口气将4个block全部读出来。
    这种数据存取的方法我们称之为索引式文件系统。
image.png

但是简单像上面一样划分inode和block的话,当数据量很大的时候,所有的inode和block堆积在一起,不容易管理。所以linux的文件系统会在此基础上划分为多个区块群组,每个区块群组都有独立的inode/block/super block,就像是一个军营里面一个营分为几个连一样。
在区块群组的里面含有6个主要内容:

  1. data block(数据区块)
    这个区块是用来放置文件内容数据的地方,在ext2文件系统中所支持的block大小有1K,2K,4K三种。在格式化时block的大小就固定了,而且每个block都有编号,以方便inode的记录。由于block大小的差异,会导致文件系统能够支持的最大磁盘容量和单一文件大小并不相同。ext2文件系统的限制如下:


    image.png

    除此之外 Ext2 文件系统的 block 还有什么限制呢?有的!基本限制如下:

  • 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);
  • 每个 block 内最多只能够放置一个文件的数据;
  • 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
  • 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪 费)

2.inode table (inode表格)
如前所述 inode 的内容在记录文件的属性以及该文件实 际数据是放置在哪几号 block 内! 基本上,inode 记录的文件数据至少有下面这些:

  • 该文件的存取模式(read/write/excute);
  • 该文件的拥有者与群组(owner/group);
  • 该文件的容量;
  • 该文件创建或状态改变的时间(ctime);
  • 最近一次的读取时间(atime);
  • 最近修改的时间(mtime);
  • 定义文件特性的旗标(flag),如 SetUID...;
  • 该文件真正内容的指向 (pointer);

inode 的数量与大小也是在格式化时就已经固定了,除此之外 inode 还有些什么特色呢?

  • 每个 inode 大小均固定为 128 Bytes (新的 ext4 与 xfs 可设置到 256 Bytes);
  • 每个文件都仅会占用一个 inode 而已;
  • 承上,因此文件系统能够创建的文件数量与 inode 的数量有关;
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与使用者是否符合,若符 合才能够开始实际读取 block 的内容。

3.Superblock (超级区块)
Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了。他记录的信息主要有:

  • block 与 inode 的总量;
  • 未使用与已使用的 inode / block 数量;
  • block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128Bytes 或 256Bytes);
  • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间 等文件系统的相关信息;
  • 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

Superblock 是非常重要的,因为我们这个文件系统的基本信息都写在这里,因此,如果 superblock 死掉了, 你的文件系统可能就需要花费很多时间去挽救。一般来说, superblock 的大小为1024Bytes。相关的 superblock 信息我们会以 dumpe2fs 指令来 调用出来观察喔!

此外,每个 block group 都可能含有 superblock 喔!但是我们也说一个文件系统应该仅有一 个 superblock 而已,那是怎么回事啊? 事实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定含有 superblock , 而若含有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 的备份咯,这样可以进行 superblock 的救援 。

4.Filesystem Description (文件系统描述说明)
这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。这部份也能 够用 dumpe2fs 来观察的。
5.block bitmap (区块对照表)
如果你想要新增文件时总会用到 block 吧!那你要使用哪个 block 来记录呢?当然是选择“空 的 block ”来记录新文件的数据啰。 那你怎么知道哪个 block 是空的?这就得要通过 block bitmap 的辅助了。从 block bitmap 当中可以知道哪些 block 是空的,因此我们的系统就能够 很快速的找到可使用的空间来处置文件啰。 同样的,如果你删除某些文件时,那么那些文件原本占用的 block 号码就得要释放出来, 此 时在 block bitmap 当中相对应到该 block 号码的标志就得要修改成为“未使用中”啰!这就是 bitmap 的功能。

6.inode bitmap (inode 对照表)
这个其实与 block bitmap 是类似的功能,只是 block bitmap 记录的是使用与未使用的 block 号码, 至于 inode bitmap 则是记录使用与未使用的 inode 号码啰!

前面介绍了文件系统的相关概念,下面来看看文件系统的类型和相关的使用命令。

文件系统的类型

Linux 常用文件系统

  • ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
  • ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
  • ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件
    (16TB)、最大1EB的文件系统,以及速度的提升
  • xfs:SGI,支持最大8EB的文件系统
  • swap
  • iso9660 光盘
  • btrfs(Oracle)
  • reiserfs

Windows 常用文件系统

  • FAT32
  • NTFS
  • exFAT

网络文件系统:

  • NFS
  • CIFS

文件系统的相关命令和工具

创建文件管理工具
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
TYPE: 
     ext4
     xfs
     btrfs
     vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
 -L 'LABEL' 设定卷标
mke2fs:ext系列文件系统专用管理工具
常用选项:
    -t {ext2|ext3|ext4|xfs} 指定文件系统类型
    -b {1024|2048|4096} 指定块 block 大小
    -L ‘LABEL’ 设置卷标
    -j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
    -i   为数据空间中每多少个字节创建一个inode;不应该小于block大小
    -N  指定分区中创建多少个inode
    -I 一个inode记录占用的磁盘空间大小,128---4096
    -m  默认5%,为管理人员预留空间占总空间的百分比
    -O FEATURE[,...] 启用指定特性
    -O ^FEATURE 关闭指定特性

文件系统的修复

文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行下面命令修复
fsck: File System Check
注意:FS_TYPE 一定要与分区上已经文件类型相同  
    fsck.FS_TYPE
    fsck -t FS_TYPE 
  常用选项:
    -a 自动修复
    -r 交互式修复错误

e2fsck:ext系列文件专用的检测修复工具
  常用选项:
  -y 自动回答为yes
  -f 强制修复
  -p 自动进行安全的修复文件系统问题

xfs_repair:xfs文件系统专用检测修复工具
    -f 修复文件,而设备
    -n 只检查
    -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

挂载与卸载

一个文件系统想要使用,则必须要先格式化称为所需类型的文件系统之后,再进行挂载操作才可以正常存放东西。
挂载的目的就是在原本封闭的文件系统上面创建出一个入口,或者说是一扇门,这样就可以进入文件系统。
卸载就是关闭上这扇门

挂载的相关命令

格式:mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
    device:指明要挂载的设备
    设备文件:例如:/dev/sda5
    卷标:-L 'LABEL', 例如 -L 'MYDATA'
    UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
    伪文件系统名称:proc, sysfs, devtmpfs, configfs
注意:挂载点目录必须事先存在,建议使用空目录

常用选项:
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
     async   异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
     sync   同步模式,内存更改时,同时写磁盘,安全,但效率低下
     atime/noatime 包含目录和文件
     diratime/nodiratime 目录的访问时间戳
     auto/noauto 是否支持开机自动挂载,是否支持-a选项
     exec/noexec 是否支持将文件系统上运行应用程序
     dev/nodev 是否支持在此文件系统上使用设备文件
     suid/nosuid 是否支持suid和sgid权限
     remount 重新挂载
     ro/rw 只读、读写   
     user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
     acl/noacl 启用此文件系统上的acl功能
     loop 使用loop设备
     _netdev   当网络可用时才对网络资源进行挂载,如:NFS文件系统
     defaults 相当于rw, suid, dev, exec, auto, nouser, async

挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录

卸载命令:
  umount 设备名|挂载点

持久挂载

仅仅是在命令行界面键入挂载命令的话,那么下次开机便不会再自动挂载相关的文件系统了。想要将文件系统持久的挂载,保证下次开机启动也能顺利使用,那么久要将挂载规则写入到配置文件----/etc/fstab

每行定义一个要挂载的文件系统,,其中包括共 6 项
要挂载的设备或伪文件系统
设备文件
 LABEL:LABEL=""
 UUID:UUID=""
 伪文件系统名称:proc, sysfs
挂载点:必须是事先存在的目录
文件系统类型:ext4,xfs,iso9660,nfs,none
挂载选项:defaults ,acl,bind
转储频率:0:不做备份 1:每天转储 2:每隔一天转储
fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检 ,1:首先自检;一般只有rootfs才用 2:非rootfs使用

查看一下系统的挂载配置更加明确
[root@centos7 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sun Nov 22 18:06:45 2020
#
# 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=13d89062-b95e-4f08-aef6-7ed1c3be0a8c /boot                     xfs     defaults        0 0
/dev/mapper/centos-home /home                                       xfs     defaults        0 0
/dev/mapper/centos-swap swap                                        swap    defaults        0 0

UUID=7a5dd9a3-96c4-43f7-aa51-b2b0b5827805  /data/mysql              ext4    defaults        0 0  

现在创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统 ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

[root@centos7 ~]# mke2fs -t ext4 -L 'TEST' -m 1 -b 2048 /dev/sdb2 
[root@centos7 ~]# dumpe2fs /dev/sdb2
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   TEST
Last mounted on:          <not available>
Filesystem UUID:          a084c5d4-ede1-4ca8-9a53-d941f5d7fe8a
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              131072
Block count:              1048576
Reserved block count:     10485
Free blocks:              994651
Free inodes:              131061
First block:              0
Block size:               2048
Fragment size:            2048
Group descriptor size:    64
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Thu Jan 14 16:38:23 2021
Last mount time:          n/a
Last write time:          Thu Jan 14 16:38:24 2021
Mount count:              0
Maximum mount count:      -1
Last checked:             Thu Jan 14 16:38:23 2021
Check interval:           0 (<none>)
Lifetime writes:          65 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      6a2c3d78-920b-45c5-bb33-4bc9ba14202f
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             64M
Journal length:           32768
Journal sequence:         0x00000001
Journal start:            0


[root@centos7 ~]# vim /etc/fstab 
UUID="a084c5d4-ede1-4ca8-9a53-d941f5d7fe8a" /test        ext4   defaults,acl    0 0 

LVM(逻辑卷)

什么是逻辑卷?为什么需要逻辑卷?
当我们在存储数据到指定的目录或者分区下的时候,经过长时间的存储,就会出现目录或者分区的空间不够用,此时大都是选择在重新上一块磁盘,然后分区,格式化,然后将指定目录下为数据复制过来,将原来的目录卸载重新挂载新的文件系统。长此以往会显得很麻烦,不够灵动。
此时逻辑卷就产生了,逻辑卷是可以弹性的调整文件系统的容量,可以整合多个实体合并在一起。这并不像RAID,逻辑卷负责弹性的变更容量。通过组合然后再将这块组成的大的磁盘分区,就可以进行使用了。
逻辑卷的实现

  1. 首先将几块磁盘或者分区创建成物理卷(pv,文件系统的标识为8e)
pv管理工具
显示pv信息
    pvs:简要pv信息显示
    pvdisplay
创建pv
    pvcreate /dev/device
删除pv
    pvremove /dev/device
搜索pv
    pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
  1. 然后再将创建的物理卷组成一个卷组(vg)
卷组管理工具
显示pv信息
    vgs:简要pv信息显示
    vgdisplay
创建vg
    vgcreate vg_name  pv
    选项与参数  
         -s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)
删除vg
    先做pvmove
    在做vgremove
扩展删除
    vgextend :在 VG 内增加额外的 PV ;
    vgreduce :在 VG 内移除 PV;
  1. 最终的卷组(vg)会被切割成逻辑卷(lv),lv就类似分区,lv的大小是根据PE总数来决定的。
lv管理工具
   lvcreate :创建 LV 啦!
        选项与参数:
         -L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必须要是 PE 的倍数,若不相符 ,
              系统会自行计算最相近的容量。 
         -l :后面可以接 PE 的“个数”,而不是数量。若要这么做,得要自行计算 PE 数。 
         -n :后面接的就是 LV 的名称啦!
   lvscan :查询系统上面的 LV ;
   lvdisplay :显示系统上面的 LV 状态啊! 
   lvextend :在 LV 里面增加容量! 
   lvreduce :在 LV 里面减少容量;
   lvremove :删除一个 LV !
   lvresize :对 LV 进行容量大小的调整!

注意:在逻辑卷中,PE是最小的储存单位,文件的数据写入都是靠写入PE来处理的,默认的PE大小是4MB。
PE的理解如下图:


捕获.PNG

实例:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
以sdb为例

扫描添加的磁盘
[root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan 
[root@centos7 ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   30G  0 part 
  ├─centos-root 253:0    0   15G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0    5G  0 lvm  /home
sdb               8:16   0   60G  0 disk 
分区并改标识
[root@centos7 ~]# fdisk /dev/sdb 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   8e  Linux LVM
/dev/sdb2        41945088    83888127    20971520   8e  Linux LVM

[root@centos7 ~]# lsblk 
sdb               8:16   0   60G  0 disk 
├─sdb1            8:17   0   20G  0 part 
└─sdb2            8:18   0   20G  0 part 

1.创建物理卷
[root@centos7 ~]# pvcreate /dev/sdb1 
  Physical volume "/dev/sdb1" successfully created.
[root@centos7 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
2.创建卷组
[root@centos7 ~]# vgcreate -s 16M testvg /dev/sdb1 /dev/sdb2
  Volume group "testvg" successfully created
[root@centos7 ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <39.97 GiB
  PE Size               16.00 MiB
  Total PE              2558
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2558 / <39.97 GiB
  VG UUID               qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO
3.创建逻辑卷
[root@centos7 ~]# lvcreate -L 5G -n testlv testvg
[root@centos7 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
  LV Write Access        read/write
  LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
4 挂载
[root@centos7 ~]# mkdir /users
[root@centos7 ~]# mount /dev/mapper/testvg-testlv /users
mount: /dev/mapper/testvg-testlv is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
发现lv还没有进行格式化,没有文件系统,没法使用。
[root@centos7 ~]# mkfs.ext4 /dev/mapper/testvg-testlv 
[root@centos7 ~]# mount /dev/mapper/testvg-testlv /users
/dev/mapper/testvg-testlv  4.8G   20M  4.6G   1% /users

至此,lv就可以使用了。
关于扩展和缩减
在进行扩展之前,先要确保vg卷组中有足够的的PE可以使用。

[root@centos7 ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <39.97 GiB
  PE Size               16.00 MiB
  Total PE              2558
  Alloc PE / Size       320 / 5.00 GiB
  Free  PE / Size       2238 / <34.97 GiB     ------>还有很多的空余的PE未使用,可以对lv进行扩展。
  VG UUID               qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO5

[root@centos7 ~]# lvresize -L +2G /dev/mapper/testvg-testlv 
[root@centos7 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
  LV Write Access        read/write
  LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
  LV Status              available
  # open                 1
  LV Size                7.00 GiB
  Current LE             448
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
[root@centos7 ~]# df -h
/dev/mapper/testvg-testlv  4.8G   20M  4.6G   1% /users  注意到文件系统没有变化,而lv确实变大了
#针对ext
resize2fs /dev/VG_NAME/LV_NAME
#针对xfs 
xfs_growfs MOUNTPOINT
[root@centos7 ~]# resize2fs /dev/testvg/testlv 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.
/dev/mapper/testvg-testlv  6.8G   23M  6.4G   1% /users  ------>这就变成正常的了

缩减:XFS文件系统不支持缩减,对lv缩减有一定的风险性。

1.卸载文件系统
[root@centos7 ~]# umount /users/
[root@centos7 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M   14M  473M   3% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   15G  1.4G   14G  10% /
/dev/sda1               1014M  137M  878M  14% /boot
/dev/mapper/centos-home  5.0G   33M  5.0G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0
2.检查文件系统的完整性
[root@centos7 ~]# e2fsck /dev/mapper/testvg-testlv 
e2fsck 1.42.9 (28-Dec-2013)
/dev/mapper/testvg-testlv: clean, 11/458752 files, 67327/1835008 blocks
3.缩小文件系统
[root@centos7 ~]# resize2fs -f /dev/mapper/testvg-testlv 2G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/testvg-testlv to 524288 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 524288 blocks long.
4.缩小lv大小
[root@centos7 ~]# lvreduce -L 2G /dev/mapper/testvg-testlv 
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 2.00 GiB (128 extents).
  Logical volume testvg/testlv successfully resized.

[root@centos7 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
  LV Write Access        read/write
  LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             128
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

扩展卷组

[root@centos7 ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@centos7 ~]# vgextend testvg /dev/sdb3
  Volume group "testvg" successfully extended
[root@centos7 ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               41.95 GiB
  PE Size               16.00 MiB
  Total PE              2685
  Alloc PE / Size       128 / 2.00 GiB
  Free  PE / Size       2557 / 39.95 GiB
  VG UUID               qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO5

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容