云服务中的系统盘和数据盘
当我们在阿里云上购买云服务器时,这个ECS实例已经包含了一个默认的存储容量,也就是用于承载操作系统相关文件系统的系统盘。
当用户有更多的数据存储需求时,比如需要更大的硬盘来存放数据库数据时,就可以选择给ECS实例另外挂载若干个数据盘。
磁盘分区与分区表
有时候我们一次性给服务器添加容量足够大的硬盘,但是实际使用中希望它一部分用于存放数据,一部分用于存放日志,而它们又位于不同的文件路径下。这时候就需要把硬盘先进行分区,每个磁盘分区在操作系统中都被当作一个独立的磁盘来看待。
磁盘与磁盘分区、分区表、文件系统的关系
磁盘分区除了可以将一块磁盘当多块使用,增加了磁盘管理的灵活性,还有助于提高数据的安全性,比如当某个分区的磁盘容量占满或者对应的文件系统受病毒感染时,并不会影响到其他的磁盘分区。
每块磁盘的分区信息都保存在一个分区表里, 分区表主要有两种类型,MBR和GPT,其中GPT作为新一代的磁盘分区表标准,可以支持容量大于2TB的磁盘进行分区操作。因此在部署数据存储需求大的软件时,磁盘分区标准一定要选用GPT。
在linux系统中,磁盘分区都可以通过软件来操作,比如MBR分区常用的fdisk命令和GPT分区常用的parted命令。下面以 fdisk 命令为例介绍下如何对磁盘进行分区。
1.进入磁盘 /dev/sda 的分区相关操作界面
fdisk /dev/sda
2.输入p查看磁盘当前的分区信息,因为还没有分区所以此时只看到磁盘的描述信息,看不到分区信息
p
# 磁盘描述信息
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00099f6a
#分区信息这一栏还是空的
Device Boot Start End Blocks Id System
3.输入n创建新的分区,分区类型选p(primary 主分区),分区编号选1,分区起始扇区直接敲回车选择默认,分区结束扇区可以按需要填写,比如500G的磁盘需要分200G和300G两个分区,则第一个分区的结束扇区填写 +300G
n
p
1
<回车>
+300G
4.创建第二个磁盘分区,步骤和上面差不多,如果只是创建两个分区,则起始扇区和结束扇区处都可以直接敲回车,默认会从上一个分区的边界一直划分到磁盘的最后一个扇区
n
p
2
<回车>
<回车>
5.输入p查看刚创建的两个磁盘分区
p
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00099f6a
#此时可以看到两个磁盘分区的信息
Device Boot Start End Blocks Id System
/dev/sda1 ... ... ... ... ...
/dev/sda2 ... ... ... ... ...
6.输入w使分区操作生效
w
由于MBR的特性,主分区只能有4个,所以在需要创建超过4个分区时,需要考虑使用拓展分区和逻辑分区。
fdisk在用户输入w后,会触发内核重新读取磁盘的分区表,以使磁盘分区生效,也就是可以在文件系统中看到 /dev/sda1 和 /dev/sda2 这两个设备文件。但是这一步偶尔也会不生效,用户可以输入 partprobe 命令,手动触发内核读取所有磁盘的分区表。
文件系统
文件系统本质上是就是文件和目录的数据库,而磁盘则是文件系统中数据的存储介质。
如同我们熟悉的关系型数据库一样,文件系统在插入数据前也需要定义表结构,所以我们在磁盘分区挂载之前通常要对其进行格式化的操作,例如 mkfs.ext4 /dev/sda,就是将 /dev/sda 格式化为ext4类型的文件系统,使其后续可以接受文件或目录等数据。常用的文件系统类型有 ext4 和 xfs。
挂载
当用户需要使用磁盘分区中的数据时,需要将其与一个已存在的目录文件进行关联,这个关联动作就是挂载。
挂载命令十分简单:
mount <磁盘分区对应的设备文件> <需要挂载的文件路径>
例如将 /dev/sda1 挂载到 /var/log 路径下
mount /dev/sda1 /var/log
挂载成功后,用户就可以在 /var/log 路径下访问磁盘分区 /dev/sda1 中的数据了。
但是这种挂载只是一种临时行为,操作系统重启后这一关联就会失效,解决办法就是在文件 /etc/fstab 末尾添加相应的挂载记录:
/dev/sda1 /var/log ext4 defaults 0 0
这样每次系统启动时都会读取这个文件并自动执行对应的挂载操作,免去了每次手动挂载的麻烦。