# SaaS-storage **Repository Path**: Dench991228/SaaS-storage ## Basic Information - **Project Name**: SaaS-storage - **Description**: 一个简易的网盘系统,允许App Server上的主机挂载,并且允许用户在浏览器端管理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-13 - **Last Updated**: 2022-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 网盘底层技术解决方案 #### 核心需求 我将从两个角度来描述这个网盘的核心需求: - app server上的云计算机一经启动,就能自动挂载云盘 - 通过浏览器进行云盘内容管理 - 文件的上传和下载 - 云盘使用情况 - 云盘扩容 #### 关键技术难题与解决方案 ##### 云计算机挂载云盘 这个技术难题的关键在于允许用户像是访问自己电脑上的磁盘一样,访问远程存储空间。为了解决这个难题,我们将采用samba技术,这个技术可以将一个远程的文件夹向一个特定用户开放,并且允许他将其挂载到计算机上,映射成一个本地磁盘,并且允许其打开/修改位于上面的文件,而不用像百度网盘或者ftp一样先下载下来修改,之后再上传。 ##### 用户云盘容量限制 考虑到用户看到的网盘,在服务器上其实是一堆文件夹,因此需要想一个办法来控制每一个文件夹的大小。在这里,我们采用曲线救国的方式,使用quota技术限制一个文件系统上各个用户的空间,因为用户的资源都在某个文件系统的一个文件夹下,因此这个技术完全可以实现对用户的云盘容量限制。 - 云盘扩容问题:有了quota技术,我可以通过修改quota的配额,轻松实现对用户云盘的扩配和减配 ##### 底层存储资源管理 底层资源的管理面临的核心问题有两个: 1. 假设一个用户有5GB的存储空间,那么n个用户将会占用5nGB的空间,可是并不是每个人的5G都被完全占满,有没有可能在一个比较小的空间上,给每个人5GB,实现“超卖”。 - 这个问题上面的quota技术其实已经解决了,它可以在不影响挂在之后显示的容量的情况下,给磁盘上的每个用户不超过磁盘物理大小的限额。如果超过容量大小,挂在以后显示的磁盘大小将会是物理大小,比如5G硬盘上给10G配额,显示出来就是5G 2. 在上面所述的“超卖”的基础上,怎样保证存放用户信息的物理磁盘被占满之后,可以扩充磁盘的空间,让整个网盘的使用不受影响。 - 为了解决这个问题,我将使用 logical volume manager 技术实现对底层资源的管理,这项技术涉及到这么几个基础概念 - PV(Physical Volume):也叫实体卷轴,可以将一个实体硬盘上的若干个分区抽象成一个实体卷轴,并且可以通过增加/减少同一个实体硬盘上分区来实现伸缩。 - VG(Volume Group):也叫卷轴群组,可以将多个实体卷轴组合在一起使他们看起来像是一个巨型磁盘,并且可以通过增加/减少实体卷轴来实现“磁盘”的伸缩。 - LV(Logical Volume):也叫逻辑卷轴。在卷轴群组的基础之上,可以划分很多逻辑卷轴,逻辑卷轴使用起来就像是一个普通的磁盘,可以被挂载到任何地方,也可以在上面创建文件系统,并且可以在卷轴群组上很轻松的调整大小。 - 在实际操作中,我会把所有空闲的物理硬盘都归为一个卷轴群组,并且在上面创建一个逻辑卷轴,容纳所有的用户信息,一旦逻辑卷轴爆满,我会优先扩充逻辑卷轴的大小,如果卷轴群组无法容纳,则可以通过增加更多的物理磁盘来实现扩容。一言以蔽之,只要物理磁盘管够,我就能有无穷无尽的空间给用户。 ![](http://cn.linux.vbird.org/linux_basic/0420quota_files/lvm.gif)