一块全新的数据盘挂载到ECS实例后,还不能直接存储数据,通常您需要在数据盘进行分区、文件系统格式化、挂载文件系统等初始化操作后,才能供系统读写数据。本文介绍如何在Linux系统中初始化一块小于等于2 TiB的数据盘。

前提条件

数据盘已挂载到ECS实例。具体操作,请参见挂载数据盘

背景信息

本文示例使用的配置如下所示,您需要根据实际环境进行操作。
操作系统 资源 描述
Linux系统 ECS实例的镜像 公共镜像Alibaba Cloud Linux 3.2104 64位
数据盘
说明 如果您使用的云盘容量大于2 TiB,初始化操作请参见初始化大于2 TiB数据盘

操作指导

步骤一:登录ECS实例并查看数据盘

  1. 远程连接ECS实例。
  2. 运行以下命令,获取数据盘的设备名称。
    fdisk -lu
    运行结果如下所示,表示当前ECS实例有两块云盘,/dev/vda是系统盘,/dev/vdb是新增数据盘。数据盘信息
  3. 为数据盘创建分区。

步骤二:为数据盘创建GPT分区

按以下步骤为小于等于2 TiB的数据盘创建GPT分区,GPT分区也支持2 TiB以上容量。
重要 MBR分区不支持2 TiB以上容量。如果您使用的云盘容量大于2 TiB或者后续有可能会扩容到2 TiB以上,分区时请采用GPT分区格式。
  1. 运行以下命令,安装Parted工具。
    yum install -y parted
    说明 此步骤中yum命令适用于CentOS等Linux发行版本。其他Linux发行版本,请根据实际使用的包管理软件修改安装命令。例如Debian或Ubuntu,请使用apt-get install <软件包名称>
  2. 使用Parted工具为数据盘进行分区。
    1. 运行以下命令,开始分区。本操作以数据盘/dev/vdb为例。
      parted /dev/vdb
      其中,/dev/vdb是数据盘的设备名称,请您根据实际环境替换。
    2. 在Parted交互命令行输入以下内容,设置GPT分区格式。
      mklabel gpt
    3. 输入以下内容,划分一个主分区,并设置分区的开始位置和结束位置。
      本操作以划分一个主分区、分区名为primary且100%容量给到第一个分区为例。
      mkpart primary 1 100%
    4. 运行以下命令,检查分区是否对齐。
      其中,1是对应的分区号,通常建议您做分区对齐,以获取更好的云盘性能。
      align-check optimal 1
      如果分区是对齐的,结果如下所示:
      1 aligned
      说明 如果返回的是1 not aligned,表示分区未对齐。如何处理,请参见初始化云盘FAQ
    5. 输入以下内容,查看分区表。
      print
    6. 输入以下内容,退出Parted工具。
      quit
    分区过程如下所示。parted分区
  3. 运行以下命令,使系统重读分区表。
    partprobe
  4. 运行以下命令,查看新分区信息。本操作以数据盘/dev/vdb为例。
    fdisk -lu /dev/vdb
    其中,/dev/vdb是数据盘的设备名称,请您根据实际环境替换。
    运行结果如下所示,如果出现gpt的相关信息,表示新分区已创建完成。gpt

步骤二:为数据盘创建MBR分区

按以下步骤为小于等于2 TiB的数据盘创建MBR分区。
重要 MBR分区不支持2 TiB以上容量。如果您使用的云盘容量大于2 TiB或者后续有可能会扩容到2 TiB以上,分区时请采用GPT分区格式。
  1. 创建一个MBR分区。
    1. 运行以下命令,对数据盘进行分区。本操作以数据盘/dev/vdb为例。
      fdisk -u /dev/vdb
      其中,/dev/vdb是数据盘的设备名称,请您根据实际环境替换。
    2. 在fdisk交互命令行,输入p查看数据盘的分区情况。
    3. 输入n创建一个新分区。
    4. 输入p选择分区类型为主分区。
      说明 创建一个单分区数据盘可以只创建主分区。如果要创建四个以上分区,您应该至少选择一次e(extended),创建至少一个扩展分区。
    5. 输入分区编号,按回车键。
      本示例中,仅创建一个分区,直接按回车键,采用默认值1
    6. 输入第一个可用的扇区编号,按回车键。
      本示例中,直接按回车键,采用默认值2048
    7. 输入最后一个扇区编号,按回车键。
      本示例中,仅创建一个分区,直接按回车键,采用默认值。
    8. 输入p查看该数据盘的规划分区情况。
    9. 输入w开始分区,并在完成分区后退出。
    分区过程如下所示。创建分区执行结果
  2. 运行以下命令,查看新分区信息。本操作以数据盘/dev/vdb为例。
    fdisk -lu /dev/vdb
    其中,/dev/vdb是数据盘的设备名称,请您根据实际环境替换。
    运行结果如下所示,如果出现/dev/vdb1的相关信息,表示新分区已创建完成。分区结果

步骤三:为分区创建文件系统

在新分区上创建一个文件系统。不同文件系统支持的分区大小不同,请您根据实际需求创建文件系统。

  1. 运行以下命令,安装e2fsprogs工具。
    yum install -y e2fsprogs
    说明 此步骤中yum命令适用于CentOS等Linux发行版本。其他Linux发行版本,请根据实际使用的包管理软件修改安装命令。例如Debian或Ubuntu,请使用apt-get install <软件包名称>
  2. 运行以下命令,创建文件系统。以下示例命令介绍如何创建ext4和xfs文件系统。
    • 创建一个ext4文件系统
      mkfs -t ext4 /dev/vdb1
      其中,/dev/vdb1是数据盘的分区名称,请您根据实际环境替换。
      重要
      • 当数据盘容量为16 TiB,在创建ext4文件系统报错时,您需要检查e2fsprogs工具包的版本是否高于1.42,并安装高版本的e2fsprogs工具包。具体操作,请参见如何升级e2fsprogs工具包?
      • ext4文件系统的lazy init功能会影响数据盘的I/O性能,您可以关闭ext4文件系统的lazy init功能。具体操作,请参见如何关闭Linux实例的lazy init功能?
    • 创建一个xfs文件系统
      mkfs -t xfs /dev/vdb1
      其中,/dev/vdb1是数据盘的分区名称,请您根据实际环境替换。
    示例信息表示为数据盘分区/dev/vdb1创建一个ext4文件系统。创建文件系统

(可选)步骤四:配置/etc/fstab文件并挂载分区

如果您需要设置开机自动挂载云盘,需要在/etc/fstab中写入新分区信息,启动开机自动挂载分区。
重要 建议您在/etc/fstab中使用全局唯一标识符UUID来引用新分区。由于释放云盘等操作可能会导致其他云盘的设备名变动,如果在/etc/fstab中直接使用设备名,当设备名变动时可能影响您的存储数据。
  1. 运行以下命令,备份/etc/fstab文件。
    cp /etc/fstab /etc/fstab.bak
  2. /etc/fstab里写入新分区信息。
    • 如果您使用root用户,可以运行以下命令修改/etc/fstab文件。
      echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /mnt ext4 defaults 0 0 >> /etc/fstab
      其中:
      • /dev/vdb1:数据盘的分区名称,您需要根据实际环境进行替换。
      • /mnt:分区的挂载点,您需要根据实际环境进行替换。
      • ext4:分区的文件系统类型,您需要根据创建的文件系统类型修改。
      说明 Ubuntu 12.04系统不支持barrier,您需要运行echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /mnt ext4 barrier=0 0 0 >> /etc/fstab命令。如果您的操作系统不是Ubuntu 12.04,请忽略该说明信息。
    • 如果您是普通用户,可以手动修改/etc/fstab文件。具体操作,请参见在fstab文件中配置UUID方式自动挂载数据盘
  3. 运行以下命令,查看/etc/fstab中的新分区信息。
    cat /etc/fstab
    结果如下所示。查询fstab
  4. 运行以下命令,挂载/etc/fstab配置的文件系统。如果无报错输出,表示您的/etc/fstab配置无误。
    mount -a
  5. 运行以下命令,检查挂载结果是否符合您的预期。
    df -h
    结果如下所示,如果出现新建文件系统的信息,表示文件系统挂载成功。查询挂载结果

初始化云盘FAQ

创建GPT分区时,分区未对齐如何解决?

  1. 运行以下命令,查看云盘参数。
    cat /sys/block/vdb/queue/optimal_io_size
    cat /sys/block/vdb/queue/minimum_io_size
    cat /sys/block/vdb/alignment_offset
    cat /sys/block/vdb/queue/physical_block_size
  2. 运行以下命令,重新划分一个主分区。
    mkpart primary <推荐扇区值>s 100%
    其中,<推荐扇区值>=(<optimal_io_size>+<alignment_offset>)/<physical_block_size>。例如,1024为计算得出的推荐扇区值,则您可以运行mkpart primary 1024s 100%重新划分一个主分区。

Linux实例如何升级e2fsprogs工具包?

如果数据盘容量为16 TiB,您需要使用1.42及以上版本的e2fsprogs工具包完成ext4文件系统格式化。如果e2fsprogs版本低于1.42,会出现如下错误信息。
mkfs.ext4: Size of device /dev/vdb too big to be expressed in 32 bits using a blocksize of 4096.            

您需要按以下方式安装高版本的e2fsprogs,例如本示例中使用的1.42.8。

  1. 运行以下命令,检查e2fsprogs当前的版本。
    rpm -qa | grep e2fsprogs

    运行结果如下所示。

    查询版本

    如果当前版本低于1.42,按以下步骤安装软件。

  2. 运行以下命令,下载1.42.8版本的e2fsprogs。
    您也可以在 e2fsprogs找到最新的软件包。
    wget https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.8/e2fsprogs-1.42.8.tar.gz --no-check-certificate
  3. 编译高版本的工具。
    1. 运行以下命令,解压软件包。
      tar xvzf e2fsprogs-1.42.8.tar.gz
    2. 运行以下命令,进入软件包目录。
      cd e2fsprogs-1.42.8
    3. 运行以下命令,生成Makefile文件。
      ./configure
    4. 运行以下命令,编译e2fsprogs。
      make
    5. 运行以下命令,安装e2fsprogs。
      make install
  4. 运行以下命令,检查是否成功更新版本。
    rpm -qa | grep e2fsprogs

如何关闭Linux实例的lazy init功能?

ext4文件系统默认开启lazy init功能。该功能开启时,实例会发起一个线程持续地初始化ext4文件系统的metadata,从而延迟metadata初始化。所以在格式化数据盘后的近期时间内,云盘的IOPS性能会受到影响,IOPS性能测试的数据会明显偏低。

如果您需要在格式化以后马上测试数据盘性能,请运行以下命令在格式化文件系统时关闭lazy_init功能。
mke2fs -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize -E lazy_itable_init=0,lazy_journal_init=0   /dev/vdb1
说明 关闭lazy init功能后,格式化的时间会大幅度地延长,格式化32 TiB的数据盘可能需要10分钟~30分钟。请您根据自身的需要选择是否使用lazy init功能。