0x01 前言

因为磁盘空间太大,我T620的存储空间高达25.86TB,目前只用了11.22TB,所以…任性了一把。

因我有家里有媒体服务器,这服务器得有媒体资源才能称得上媒体服务器,所以我会时不时从PT站下载热门的资源存放在服务器里,而这些资源的大小每个都在10G以上。

媒体资源完成它的使命之后总是不舍得删,除非容量捉襟见肘的时候才会挪腾他们,这是因为目前用于存放文件的磁盘空间仅有2TB,今天我决定重新给这虚拟机挂载一个5TB的磁盘空间用于替换现有的2TB磁盘空间。

0x02 虚拟磁盘

首先通过vcenter给虚拟机分配一个磁盘空间,配置如下:

  • 磁盘空间:5TB
  • 置备模式:精简置备
  • 份额:低
  • 读缓存:5G

为了能最大限度使用host的磁盘空间,我所有的虚拟机都使用精简置备这种磁盘置备模式,但这会对虚拟机的IO稍有影响;因为这是媒体服务器,在某些情况下会占用极大的磁盘带宽,为了不影响其他重要的虚拟机IO,我特意将其份额设为低;而读取缓存则是字面上的意思,但我觉得这个值对我现在的情况没多大性能提升,但我的SSD空间太大,使用率太低,所以给它分配5G的读缓存。

完成配置后即可启动虚拟机:

0x03 分区

如果尝试用fdisk对大于2TB的磁盘进行分区时会报错,大致意思是DOS格式分区表不能用于容量大于2TB。这时候需要使用parted这个命令。

首先使用fdisk列出所以磁盘:

[root@b60280 ~]# fdisk -l

磁盘 /dev/sda:17.2 GB, 17179869184 字节,33554432 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009e3d2

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200     6293503     2097152   82  Linux swap / Solaris
/dev/sda3         6293504    33554431    13630464   83  Linux

磁盘 /dev/sdb:5497.6 GB, 5497558138880 字节,10737418240 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到/dev/sdb就是我需要的磁盘。然后使用parted进行分区操作:

[root@b60280 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)

先使用print检查磁盘信息:

(parted) print                                                            
错误: /dev/sdb: unrecognised disk label
Model: VMware Virtual disk (scsi)                                         
Disk /dev/sdb: 5498GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

错误信息提示该磁盘尚未分配磁盘标签,同时分区表也是unknown,而容量为5498GB,扇区大小为512B。

为了方便后续的操作,这里先做一些设定:

(parted) unit GB                                                         
(parted) mklabel gpt

为了方面后续的操作,我将磁盘空间的单位设为MiB,分区表类型为GPT。然后再print信息看看:

(parted) print 
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 5498GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志

可以发现显示的容量单位变成了MiB,而分区表类型为GPT,但目前没有任何分区。而接下来我需要创建一个分区:

(parted) mkpart primary 0GB 5498GB

mkpart后面紧跟着分区名称,这只是一个名字;再后面是其实空间,至于扇区则会根据指定的空间自动生成,最后是结束空间,它也会对应一个扇区。

如果需要在同一个磁盘建立多个分区,只需设定合适的空间大小并为其分配一个辨识度高的名字即可。

最后再进行信息打印:

(parted) print                                                            
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 5498GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      0.00GB  5498GB  5498GB               primary

至此,所以分区工作已完成,输入quit即可推出parted:

(parted) quit                                                             
信息: You may need to update /etc/fstab.

0x04 挂载

挂载磁盘前需要对其进行格式化,先检查分区信息:

[root@b60280 ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

磁盘 /dev/sdb:5497.6 GB, 5497558138880 字节,10737418240 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 7DB83A46-7643-4A99-B647-A8BE686FB023


#         Start          End    Size  Type            Name
 1         2048  10737416191      5T  Microsoft basic primary

这里有个告警,说告诉你fdisk对于GPT的支持是试验性的,崩了别赖我,忽略即可。

可以看到sdb磁盘中有一个分区,大小为5TB,还有扇区等等的信息。紧接着通过mkfs进行格式化:

[root@b60280 ~]# mkfs.xfs /dev/sdb1

因为磁盘空间太大,所以分区需要的时间特别长,而这个时长需要根据你服务器单核心CPU和磁盘IO性能来判断的,在我的测试环境中花了将近3分钟。最后的结果如下:

[root@b60280 ~]# mkfs.xfs /dev/sdb1 
meta-data=/dev/sdb1              isize=512    agcount=5, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1342176768, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

格式化之后即可将其挂载到指定的目录,首先建立挂载的目标文件夹:

# 创建文件夹
[root@b60280 ~]# mkdir /mnt/5tb_datastore

# 挂载磁盘
[root@b60280 ~]# mount /dev/sdb1 /mnt/5tb_datastore/

最后检查挂载情况:

[root@b60280 ~]# df -h | grep 5tb
/dev/sdb1       5.0T   33M  5.0T    1% /mnt/5tb_datastore

至此,挂载工作已全部完成。为了实现开机挂载,建议将它加入到系统配置文件fstab中:

[root@b60280 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Fri Jun 21 07:20:07 2019
#
# 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
#
UUID=ae182751-dd37-489e-87f9-1113aad41aec /                       xfs     defaults        0 0
UUID=724768ff-c5e5-4b91-be47-8dcde8f3a78a /boot                   xfs     defaults        0 0
UUID=97262c2c-2abd-447c-9528-166db2a61170 swap                    swap    defaults        0 0
/dev/sdb1 /mnt/5tb_datastore/ xfs defaults 0 0

0x05 结语

资源多就是任性。