0x00 前言背景
云服务器的硬盘满了该怎么办?
放心,在腾讯云的服务器上,不论是加块硬盘还是扩容已有硬盘的大小,都是轻松又简单的。
本文将讲解如何在腾讯云服务器(CentOS系统)下挂载新创建的云硬盘,以及如何实现云硬盘的在线扩容。
0x01 增加硬盘数量
通过增加新的硬盘是常见的扩容存储的方式:通常需要创建/挂载云硬盘、创建分区表、格式化分区、以及挂载新分区,总共4步。我们依次来介绍。
1、挂载云硬盘
云硬盘(CBS,Cloud Block Storage)可以简单地理解为:一块插在云服务器(CVM实例)上的硬盘。
它和一般的硬盘(块设备存储)在概念理解以及操作上几乎没有区别,同样地支持插拔(挂载/卸载)、分区创建管理、格式化等等。不过,这种云服务化的块存储设备,无非是多了更丰富的硬盘种类选择、更便捷的扩容、灵活的计费模式、快照备份恢复、详细的实时用量监控以及越来越低的费用成本。最关键的是,由于多副本存储,完全不用担心底层硬件的故障,9个9的可靠性,真是数据想丢都丢不了。唉,云计算就是这么稳定且无趣。
云硬盘(Cloud Block Storage,CBS)是一种高可用、高可靠、低成本、可定制化的块存储设备,可以作为云服务器的独立可扩展硬盘使用,为云服务器实例提供高效可靠的 存储设备。云硬盘提供数据块级别的持久性存储,通常用作需要频繁更新、细粒度更新的数据(如文件系统、数据库等)的主存储设备,具有高可用、高可靠和高性能的特点。云硬盘采用三副本的分布式机制,将您的数据备份在不同的物理机上,避免单点故障引起的数据丢失等问题,提高数据的可靠性。
等不及的小伙伴可以看一段视频预热一下:
当然,一块硬盘的价值需要通过一台服务器来实现,存储的数据需要读取才更有意义。在开始本文的实验前,一定要先准备个CVM实例哦。然后,我们开始创建第一块云盘吧。
新建云盘
在云服务器的云硬盘标签页下,我们可以方便地新建云盘:
如上图,创建一块云硬盘实例,主要需要选择可用区、类型、容量和计费模式等参数。
这里有个限制需要注意,CBS云硬盘只能挂载在相同可用区的CVM云服务器上,即使在相同VPC下也不可以。也就是说,咱们不能把硬盘带出机房。
至于高性能云盘还是SSD云盘,可以根据业务类型所需的选择。可以参考这里, SSD云盘性能(IOPS、吞吐量等)上是高性能云盘的数倍,当然价格也相对更高。
容量上,虽然这里写的是GB,但实际上GiB,(1GiB约等于1.07GB)。这是行业标准,无需担心,我们买不了吃亏。而付费类型,通常建议选择包年包月,因为数据存储相对周期长,相对划算。
挂载云盘
创建完我们将在云硬盘列表页,看到云硬盘实例信息。通过最右边的操作->更多->挂载,即可选择所需挂载的云服务器。
选择想要挂载的目标服务器,下一步->开始挂载,即可完成。云硬盘的创建和挂载基本是秒级,体验很不错。
在CVM实例的详情页(基本信息),也可以查到,新的云硬盘已经作为数据盘挂载信息,如图:
可以看到,通过控制台,我们可以随心所欲地将云盘挂载到任何一台本可用区的云服务器,以及卸载甚至销毁。相信你也体会到:云盘的生命周期与其挂载的云服务器完全无关。的确,存储与计算本应分离。
2、创建分区表
对于一块新挂载的硬盘,第一件事就是为其创建分区表并规划分区大小。这里我们推荐用parted工具来完成。你你或许曾经听说或使用过fdisk工具,但parted功能比fdisk更强大且适用更多场景,且在目前Linux主流发行版中都已经默认安装。已经熟悉fdisk的开发者上手parted更加容易。直观感受一下:
在控制台挂载云硬盘后,服务器上会出现对应的/dev/vdX(X依次为b/c/d…对应不同的云硬盘)设备文件,通过parted工具创建分区表(partition table)以及硬盘分区(disk partition)。
parted /dev/vdb # 进入parted工具
# 创建GPT分区表
(parted) mklabel gpt
# 创建名为`primary`的ext4分区,区间为整个硬盘
(parted) mkpart primary ext4 0% 100%
我们可以通过print子命令验证分区创建,退出后可以看到出现硬盘设备的分区文件/dev/vdb1,完成。
注意,此时仅创建了分区,并没有进行文件系统的格式化,还不能查到该设备的UUID。
这里,我们小结下parted工具的常用子命令:
- print(或p):显示当前的分区表信息。
- mklabel(或mktable):创建分区表。参数是分区表的类型,可以选择gpt(GPT分区表,推荐)或msdos(MBR分区表,需要兼容时可以用)等。
- mkpart:创建分区。参数包括分区的名字,对于gpt分区可以取任意的名字,单一分区习惯上取名为primary,其实无所谓;可选的文件系统类型,如ext4等,注意这里仅是个标识作用;分区的起止点,其单位可以是百分比(%),是比较推荐的,当然也可以用s/GB/GiB等。
- resizepart:调整分区大小。通常用来扩容,参数是分区编号和要调整的大小的终止点,百分比或者具体数值均可。该命令也可以用来缩容(shrink),因为该操作会造成数据的不可读,parted也会有特别提示。
- unit:设置单位显示,默认是GB,可以根据习惯选择GiB(df、fdisk等工具以及云硬盘存储的所用单位),或者s(sector扇区)。
- quit(或Ctrl+D):退出parted程序。如果对分区表有写入更新,parted会提示需要更新/etc/fstab文件。
在parted工具诞生之前,硬盘分区主要fdisk工具来完成,不过后者对于大于2T的硬盘无能为力,是个硬伤,初学掌握parted即可。本质上,是因为parted对与GPT(GUID Partition Table)——目前硬盘分区表布局的标准——支持得更好。在GPT之前MBR(Master Boot Record)分区用得最多,但由于其扩展性(比如分区数量)有限,现在基本很少用了。
3、格式化分区
格式化分区非常简单,通过mkfs即可。
mkfs.ext4 /dev/vdb1
注意,此时我们可以查到硬盘设备的UUID,这个值后续编辑/etc/fstab文件时需要。
4、挂载新分区
等一下,怎么又出来一个“挂载”?这里需要解释下,此处的挂载不同于第一节的云硬盘挂载,云硬盘的挂载(attach)是指将云硬盘和CVM云服务器连接上;而本节的挂载(mount)是操作系统里的概念,将格式化过的文件系统(此例中就是刚才的云盘分区)挂到某一个文件系统目录上。
我们当然可以通过mount命令挂载,如下:
[root@VM-2-3-centos ~]# mount /dev/vdb1 /data/disk1
[root@VM-2-3-centos ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 24K 3.9G 1% /dev/shm
tmpfs 3.9G 456K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda1 50G 2.6G 45G 6% /
tmpfs 781M 0 781M 0% /run/user/0
/dev/vdb1 98G 61M 93G 1% /data/disk1
不过这种通过mount命令挂载的文件系统时临时性的,服务器重启后就失效了。如果需要开机自动挂载文件系统,则需要编辑/etc/fstab文件了,类似:
# 已有的内容容,如系统盘挂载点设置
UUID=659e6f89-71fa-463d-842e-ccdf2c06e0fe / ext4 defaults 1 1
# 新增内容,云硬盘挂载
UUID=54c2e89e-1a32-4beb-999f-6bb1faa0bdb0 /data/disk-1 ext4 defaults 0 2
fstab文件介绍
/etc/fstab文件中包含了系统可挂载的文件系统的描述信息。这个文件只会被程序读取而不用担心会被改写。正确无误地创建该文件是系统管理员的职责。其中的内容顺序非常重要,因为fsck、mount(在系统boot时),以及umount(在系统shutdown时)等程序会按fstab中的顺序来工作。 fstab每行6个字段说明:
- fs_spec:待挂载的块设备或远端文件系统描述符,如UUID=<uuid>,或者NFS的host:dir。设备的uuid可以通过blkid命令查询到。直接用设备名称(如:/dev/vdb1类似的形式)也可以,但由于这种名称与硬盘探测顺序相关且增减硬盘时会变化,非常不灵活,现已经过时不推荐。
- fs_file:文件系统的挂载点,即指定的挂载目录。
- fs_vfstype:文件系统类型, 主流的如ext4、btrfs、xfs、ntfs等。
- fs_mntop:挂载选项,一般选择defaults就可以。(相当于rw,suid,dev,exec,auto,nouser,async) ,常见选项还有noauto(不自动挂载)、user(普通用户挂载)等。
- fs_freq:是否需要dump,系统盘写1,数据盘写0即可。
- fs_passno: fsck的顺序,系统盘写1,数据盘写2或0均可以。
那么,如果万一不小心,fstab文件如果写错会有什么问题?最差的情况是服务器无法重启。不过也不用紧张,通过控制台的VNC方式登录,输入root密码就可以进入紧急恢复模式(emergency mode),修改文件重启即可。
0x02 增加硬盘容量
另一个方法是增加已挂载的硬盘的容量。完全没问题,仅需3步:硬盘扩容、分区表更新、文件系统更新。
1、扩容云硬盘
还是在云硬盘实例列表页,通过最右边的操作->更多->扩容,选择扩容大小,然后一键秒级扩容,非常方便。
云盘扩容成功,服务器内部不会有任何直接的变化,我们继续下一步。
2、更新分区表
进入parted后,会有如下提示,告之发现有多余的空间,并建议我们修改:
Warning: Not all of the space available to /dev/vdb appears to be used, you can fix the GPT to use all of the space (an extra 167772160 blocks) or
continue with the current setting?
(过程中如果有提示需要Fix,则选Fix即可)
这时通过resizepart子命令(或者删了重建也可)来更新分区表信息:
我们完成了硬盘分区表的更新。
3、扩容文件系统
最后,我们来在线扩展文件系统。
什么是在线扩容?就是无需卸载(umount)文件系统,直接正在挂载的文件系统。现代Linux可以在线扩容(on-line resize)ext4文件系统,通过resize2fs命令来完成:
resize2fs /dev/vdb1
对于ext4文件系统的扩容,执行起来也是秒级的,输出大致如下:
至此我们完成了云盘的扩容,大功告成!
0x04 总结对比
至此,我们完成了创建并挂载云硬盘,并完成了扩容已有的云盘,你都学会了嘛?两种增加存储的方法,各有各自特点,往往需要根据特定的需求,在不同场景下选择适合你的方式。另外,其实腾讯云CBS(云硬盘)产品还有很多好玩又使用的功能,比如快照回滚和恢复,实时用量的监控等等。不要让你的硬盘闲着,多多体验这些功能吧!
欢迎订阅专栏:巫山跬步,关注本文作者:溪歪歪,持续获取云服务技术的最佳实践讲解。感谢点赞支持!