服务器故障
最近实验室的一台机子崩了,开机直接进入GRUB引导页面无法正常启动,网上查询解决方案说是由于grub无法找到操作系统的引导文件,需要找到放置了boot文件对应的磁盘分区并手动配置即可,但是手动配置的时候发现物理磁盘上的都是LVM的文件系统,无法被正常识别因此无法被挂载,而真正的LV逻辑卷通过ls
命令又显示不出来,无奈之下使用U盘启动了一个新的Ubuntu系统,然后通过lvdisplay
命令找到了真正的LV逻辑卷,再在GRUB命令行中,通过linux /boot/vmlinuz-4.15.0-20-generic root=<逻辑卷设备>
以及initrd /boot/initrd.img-4.15.0-20-generic
命令手动启动才解决了上述问题,究其根本主要还是因为装机的时候对于磁盘分区没有搞清楚,直接按照默认配置执行的缘故,因此这里重新温故了一遍Linux的磁盘分区以及LVM的相关概念并记录如下:
磁盘分区
在 Linux 系统中磁盘设备文件的命名规则为:主设备号 + 次设备号 + 磁盘分区号,对于目前常见的磁盘,一般表示为: sd[a-z]x,可以使用命令fdisk -l
查询所有的磁盘设备,或者在/dev
目录下也可以看到所有的设备
目前常用的分区结构有两种:1.MBR磁盘分区 2. GPT分区,以下主要详细讲解MBR磁盘分区
MBR分区中使用位于磁盘的0号扇区(一扇区等于512字节),来表示整个磁盘的整体分区情况,整个0号扇区简称为MBR扇区,MBR扇区由引导代码、MBR分区表、MBR结束标志3部分构成,一共占用512个字节。其中引导代码占用446个字节,MBR分区占用64个字节,MBR结束标志占用2个字节,MBR扇区一共占用512个字节。各个块意义如下:
- 引导代码:占MBR分区的前446字节,负责整个系统的启动。如果引导代码被破坏,系统将无法启动
- MBR分区:占引导代码后面的64个字节,是整个硬盘的分区表。每个分区使用的字节为16个,所以这确定了MBR分区方式最多只有4个主分区(包含扩展分区在内)
- MBR结束标志:占用最后2个字节,一直为"55AA"
MBR的分区结构由主分区、扩展分区和逻辑分区组成, 在一块磁盘上,MBR主分区的最大个数是 4,其中扩展分区也是一个主分区,并且最多只能有一个扩展分区,但可以在扩展分区上创建多个逻辑分区。因此主分区(包括扩展分区)的范围是 1-4,逻辑分区从 5 开始。对于逻辑分区,Linux 规定它们必须建立在扩展分区上,而不是建立在主分区上。主分区的作用是用来启动操作系统的,主要存放操作系统的启动或引导程序,因此建议操作系统的引导程序都放在主分区,比如 Linux 的 /boot 分区,最好放在主分区上(本次服务器启动失败就是因为没有做好相应的分区,将/boot目录也挂载在了LV逻辑卷上)
具体分区可以使用命令fdsick /dev/xxx
完成,在完成了设备分区之后,对于每个分区都要使用命令mkfs /dev/xxx
进行文件系统的格式化,然后才可以通过mount
命令进行挂载使用
GPT分区是更加新一代的分区结构,相较于MBR分区而言,有以下区别:
- MBR分区表最多只能识别2TB左右的空间,大于2TB的容量将无法识别从而导致硬盘空间浪费;GPT分区表则能够识别2TB以上的硬盘空间。
- MBR分区表最多只能支持4个主分区或三个主分区+1个扩展分区(逻辑分区不限制);GPT分区表在Windows系统下可以支持128个主分区。
- 在MBR中,分区表的大小是固定的;在GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。
LVM
对于多个磁盘以及分区,往往会使用LVM将它们整合在一起统一为卷组管理,从而可以方便的加入或移走分区以扩大或减小卷组的可用容量,同时文件系统不再是建立在分区上,而是建立在LVM上,因此可以跨分区方便使用并动态分配空间
在LVM中主要有3个核心概念:
- PV(Physical Volume):物理卷,也即底层的物理硬盘或者磁盘分区,通过命令
pvcreate /dev/xxx
进行创建 - VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个的PV,通过命令
vgcreate /dev/xxx /dev/xxx /dev/xxx
进行创建 - LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来的分区的概念,不过大小可以动态改变,通过命令
lvcreate -L XXXG -n XXX <VG>
从VG卷组中进行创建
在完成了LV逻辑卷的创建之后,每个LV逻辑卷都相当于一个尚未初始化的分区,接下来可以参照上文使用命令mkfs /dev/xxx/xxx
命令对于逻辑卷进行文件系统的格式化,其中逻辑卷具体位置可以通过命令lvdisplay
进行查询,在完成了格式化之后,就可以通过mount
命令挂载到对应目录上并使用