【IT168 专稿】用户使用文件系统的时候,经常会发生两类问题:一是由于硬盘容量有限,随着用户数据量的增加,文件系统剩余的空间也就越来越小,可能会导致系统越来越慢或者无法继续使用;二是虽然硬盘容量足够,但是由于用户开始并不了解需求,导致某些分区容量过大而有些关键的分区空间不足,如果重新分区又会丢失现有的数据,停用现在的服务。当用户遇到这些问题的时候,一般的做法就会是买一个新的更大的硬盘,把现有的数据保存其中,然后继续使用。然而,这个办法首先会给影响用户正常服务的使用,给用户带来不便。二来,数据的增加是无穷无尽的,多大的硬盘的都不能让用户一劳永逸,而不断购买更大的硬盘也势必会消耗用户更多的金钱。
今天的主题是讲述如何利用Storage Foundation来管理磁盘和文件系统,使之能够充分的利用用户现有的资源。即使现有资源已经全部耗尽,用户只要增加有效的资源即可,不需要一定增加更大更多的资源。毕竟,用户需要的是性价比最好的东西,而不是那些最先进的。此外,动态的意思就是我们的操作不需要影响用户的使用,一切工作都是对用户透明的,这用处可是够大的吧!
参考链接:
用Storage Foundation管好存储系统-安装 用Storage Foundation管好存储系统-入门 用Storage Foundation管好存储系统-进阶
用Storage Foundation管好存储系统-高级
管理磁盘和文件系统
在Storage Foundation中,是有一个依赖关系的。文件系统依赖卷,卷依赖与磁盘组,如图所示:
图1,文件系统、卷和磁盘组之间的依赖关系
有图1可知,如果想要扩大一个文件系统,必须先保证卷有足够的空间,卷需要扩大也需要磁盘组有足够的空间,如果磁盘组空间不足,那么就需要添加硬盘,加入多大的硬盘就能扩充多大的空间;反过来说就是,如果需要从一个磁盘组删除一个硬盘,不想保证该硬盘不属于任何卷,而如果想让卷不占用该硬盘,必须保证卷上的文件系统没有占用该硬盘,如果某个文件系统已经占用了这个硬盘,那么就需要由Storage Foundation把其上的数据移到其他硬盘上面。闲话少述,现在开始实际演示如何动态扩大和缩小文件系统。文中假设环境是由disk1、disk2和disk3组成的TestDG,其上创建了卷TestVol和挂载在/mnt下的文件系统TestFS,需要移动的磁盘为disk4。
一, 扩大文件系统
1, 扩大磁盘组空间
如前面所说,如果扩大一个文件系统,首先需要保证磁盘组的空间足够:
a) 检查磁盘组空间大小:
# vxdg -g TestDG free
如果磁盘有足够的剩余空间,可以不用添加新硬件设备。
(注;即使该命令显示没有磁盘空间剩余,那么可以先查看一下卷的使用情况,因为有可能是卷已经占用了所有磁盘空间,但是尚未被使用。具体命令见下文)。
b) 增加新硬盘到该磁盘组
# vxdg -g TestDG adddisk TestDG04=disk4;
这样就可以把disk4加入到该磁盘组,之后可以用上文的命令查看磁盘组的剩余空间,此时能够看见新的磁盘组的空间增大。
c) 如果磁盘用的是存储阵列上的LUN,那么不需要增加硬盘,仅仅需要扩大该磁盘组所包含的LUN的大小,然后让Storage Foundation扩大disk的容量即可:
vxdisk -g TestDG resize TestDG01 length=2GB
这样磁盘组的剩余空间也会变大。
2, 扩大卷空间
a) 在扩大卷空间前,需要先查看一下该卷支持的最大容量以及还能够扩展多少空间:
1 查看卷最大的容量大小:
# vxassist -g TestDG maxsize layout=raid5
Maximum volume size: 4096000 (2GB)
该命令说明该磁盘组如果做成raid5的卷,最大可以有2GB空间。
(注:Storage Foundation命令中的大小都是以512B为单位,所有需要乘以2换算成KB)
2 查看卷能够扩大多少:
# vxassist -g TestDG maxgrow TestVol
Volume TestVol can be extended by 366592 to
4096000 (2GB)
该命令说明TestVol原来的大小是179MB,最大可以扩容到2GB
b) 增大卷空间,(假设原来的卷是179MB)
1 将卷空间增加到900MB
# vxassist -g TestDG growto TestVol 900m
新的卷将会变成900M;
或者vxsize达到同样效果:
# vxresize -g TestDG myvol 900m
2 将卷空间增加900M
# vxassist -g TestDG growby TestVol 900m
或者vxsize达到同样效果:
# vxresize -g TestDG myvol +900m
这样,新的卷大小为179+900=1079MB。
c) 增大卷空间的另一种方法
大家知道,如果磁盘做了镜像,那么会有一半的空间用以保存数据镜像,其实就牺牲了磁盘利用率来提高硬盘可靠性。但是如果硬盘空间真的不够用的时候,我们还可以把镜像卷删除,把这部分空间拿出来使用。
# vxassist -g TestDG remove mirror TestVol TestDG03
这样TestDG3就不再是镜像盘了,而可以拿出来存放新的数据。
3, 扩大文件系统
a) 查看现有文件系统的大小
# df –F vxfs -k /mnt
b) 扩大现有的文件系统
# fsadm -F vxfs -b 1024000 –r dev/vx/rdsk/TestDG/TestVol /mnt
这样,文件系统就被扩展到了1GB。我们扩大文件系统的工作也就完成了。
二、缩小文件系统
缩小文件系统的目的有很多,可能是因为现有的文件系统占用了太多的资源;也可能是因为别的文件系统的优先级更高,所以在有限的情况下,不得不把该盘现有的资源“暂借”给另外的文件系统。不管怎样,如何保证在文件系统缩小的同时,不能丢失数据,这个才是缩小的核心意义所在。事实上,除了Storage Foundation的文件系统以外,很少听说有文件系统能够支持这个特性的,起码AIX和HP自带的文件系统就不支持,而Red hat Linux和Suse也不支持这个特性。哈哈,这个就不多说了,现在来给大家介绍一下缩小文件系统的详细用法。
1. 缩小文件系统
a) 确定如果移走硬盘后,文件系统有足够的空间存放所有数据。也就是说文件系统的剩余空间应该大于要移走硬盘的总容量。否则转移数据会失败。
# df –F vxfs -k /mnt
b) 缩小文件系统
# fsadm -F vxfs -b 512000 –r dev/vx/rdsk/TestDG/TestVol /mnt
缩小文件系统到512M,这是卷里面会有500M空余。
2. 缩小卷空间
a) 将卷空间减小到500MB
# vxassist -g TestDG shrinktoTestVol 500m
新的卷将会变成500M;
或者vxsize达到同样效果:
# vxresize -g TestDG myvol 500m
b) 将卷空间减小500M
# vxassist -g TestDG shrinkbyTestVol 500m
或者vxsize达到同样效果:
# vxresize -g TestDG myvol -500m
这样,新的卷大小为1000-500=500MB
3. 把卷数据移出要删除的盘(关键) 如果要把盘从一个卷中移走,必须保证该盘上面没有卷的信息,否则可能会造成数据丢失。命令如下:
# vxevac -g TestDG TestDG TestDG04
该命令可以将disk4的数据移到其他的盘。
4. 把盘从磁盘组删除
a) 把盘从磁盘组删除
# vxdg -g TestDG rmdisk disk4
b) 在Storage Foundation中注销该盘
# vxdiskunsetup -C Disk4
c) 检查磁盘组状态
# vxdisk list
小结 学习本文后,用户可以随心所欲的控制磁盘和卷的大小,完成用户特殊的工作。这功能可不是什么文件系统都能有的呢。最后需要提醒的是,该过程并不是按部就班,一成不便的。用户为了扩大空间,不一定非要从添加硬盘开始,也许卷里就有空间呢;同理,删除的时候不一定要腾出整个硬盘,腾出一点空间就可以分给其他的卷使用。现在已经是新社会了,我们要学会追求自由和自主了,幸运的是,Storage Foundation也是这样想的。