背景

在云厂商提供廉价的 Linux ECS 方案中,往往只配了单颗虚拟硬盘。一般来说,这类廉价ECS搭配的硬盘的容量都非常小,仅能满足系统本身运行。为了满足日常所需,往往还需要加购第二颗硬盘,为此,我需要了解一点磁盘分区知识。

文件系统的概念

文件系统是存储和管理文件的方法。文件系统使得用户保存数据时,不必关心数据实际保存在硬盘(或者光盘)的数据块地址,只需要记住这个文件的所属目录和文件名。

不同的文件系统具有不同的特性,例如性能、安全性和兼容性。

常见的文件系统有:

  • ext4:常用于Linux系统,具有良好的性能和可靠性。
  • NTFS:常用于Windows系统,支持大文件和权限控制。
  • FAT32:用于跨平台兼容性,但不支持大文件和权限。

磁盘和分区

在Linux中设备出现在/dev/路径下。一个虚拟磁盘往往用vdx表示,其中x=a,b,c,...。比如/dev/vda/dev/vdb、...等。

一块磁盘往往会被划分成多个分区来用作不同的用途。硬盘的第一个扇区(512 字节),包含分区表引导代码,称之为主引导记录(MBR)。其中,分区表记录了磁盘各个分区的起始位置。

随着技术的发展,GPT(GUID 分区表)逐渐取代了MBR 分区表。GPT允许更多的分区,没有主分区和扩展分区的概念,它支持数千个分区。

不过,为了简单起见,我们这里不谈论GPT

分区是将硬盘划分为不同的逻辑部分的过程。每个分区可以被视为一个独立的“逻辑”磁盘。

由于MBR分区表的设计限制,一个磁盘驱动器最多可以包含四个主分区或三个主分区和一个扩展分区。

  • 主分区:用于操作系统、应用程序和用户数据。在Windows中,这通常是您的 C 盘。
  • 扩展分区:本身不包含文件系统,而是用于容纳逻辑分区。逻辑分区没有直接的设备名称,而是通过扩展分区来访问。

操作系统中,往往有多块磁盘,而每个磁盘又可以划分成多个分区。注意,每个分区都会视作一个单独的设备,例如:

  • /dev/vdb: 表示当前机器中第二个虚拟磁盘设备
  • /dev/vdb/1:表示虚拟磁盘/dev/vdb上的第1个虚拟磁盘

此外,不同的分区可以使用不同的文件系统。换言之,同一块磁盘,可以创建不同的文件系统。

分区管理与创建文件系统

管理分区表

我们可以使用fdisk管理一块磁盘的分区表:

sudo fdisk /dev/vdb

注意,fdisk管理的其实是磁盘的分区表,这意味着它操作的是磁盘的第一个扇区!

该命令是一个交互式的环境,可以使用m提示菜单:

~$ sudo fdisk /dev/vdb
[sudo] password for itminus:

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help):

其中,最基本的几个命令是:

  • p: 打印分区表
  • d: 删除一个分区
  • n: 创建一个新分区
  • w: 把变更写入磁盘分区表

创建文件系统

仅仅只管理分区表是不够的,我们还需要在磁盘分区上创建文件系统。Linux中提供了mkfs.<fs-type>系列命令来创建文件系统。

比如,我们想要在刚刚更新的磁盘上的第1个分区创建.ext4文件系统,可以使用如下命令:

sudo mkfs.ext4 /dev/vdb1

注意,这里的设备名是/dev/vdb1而非/dev/vdb,这表示是/dev/vdb上的第一个分区,而不是在整个磁盘设备上创建文件系统!

挂载文件系统

创建了文件系统后,还必须进行挂载到对应路径上,才能进行操作。

Linux中,文件/etc/fstab用于配置静态的文件系统,记录在这其中的文件系统会被操作系统自动挂载。该配置文件有固定6列:

  • Device:设备名,比如UUID,或者/dev/vdb1之类(注意不是/dev/vdb)。
  • Mount Point:挂载点,即挂载到的文件路径
  • File System Type:文件系统类型,比如 ext4
  • Options:选项,多个选项之间用,分隔。
  • Backup Operation:备份操作。
  • File System Check Order:文件系统检查顺序。0表示不检查,根文件系统应设置为 1,其他分区应设置为 2。

示例:

# /etc/fstab: static file system information.
UUID=ed2ccb2c-d03a-486c-b726-64ddd3f54030       /       ext4    errors=remount-ro       0       1

/dev/vdb1    /www    ext4    defaults    0 2

现在,我们可以使用lsblk列出块设备:

~$ lsblk -o NAME,TYPE,MOUNTPOINT,LABEL,SIZE,UUID
NAME   TYPE MOUNTPOINT LABEL   SIZE UUID
sr0    rom             cidata  386K 2024****
vda    disk                     50G
└─vda1 part /                   50G ed2c****
vdb    disk                     30G
└─vdb1 part /www                30G 933d****

标签: fdisk, mkfs.ext, 磁盘分区, 文件系统, Linux

添加新评论