概述
我们管理的服务器可能会随着业务量的不断增长造成磁盘空间不足的情况,在这个时候我们就需要增加磁盘空间,本章主要介绍如何使用fdisk分区工具创建磁盘分区和挂载分区,介绍两种情况一种是对原有的磁盘的剩余空间增加分区,第二种是对新添加的磁盘进行分区操作。
扩展空间
fdisk: invalid option -- '-'
Usage:
fdisk [options] <disk> change partition table
fdisk [options] -l <disk> list partition table(s)
fdisk -s <partition> give partition size(s) in blocks
Options:
-b <size> sector size (512, 1024, 2048 or 4096)
-c switch off DOS-compatible mode
-h print help
-u <size> give sizes in sectors instead of cylinders
-v print version
-C <number> specify the number of cylinders
-H <number> specify the number of heads
-S <number> specify the number of sectors per track
查看当前分区信息
fdisk -l
上图的红色标记显示当前sda总共有3916个柱面,而目前只使用了2611个柱面,现在就将剩下的柱面创建分区。
创建分区
使用:fdisk 磁盘文件
fdisk /dev/sda
a :设置可引导标记
b :修改bsd的磁盘标签
c :设置DOS操作系统兼容标记
d :删除一个分区
l :显示已知的分区类型,其中82为Linux swap分区,83为Linux分区
m :显示帮助信息
n :增加一个新的分区
o :创建一个新的空白的DOS分区表
p :显示磁盘当前的分区表
q :退出fdisk程序,不保存任何修改
s :创建一个新的空白的Sun磁盘标签
t :改变一个分区的系统号码(比如把Linux Swap分区改为Linux分区)
u :改变显示记录单位
v :对磁盘分区表进行验证
w :保存修改结果并退出fdisk程序
x :特殊功能
2.输入n创建分区
询问我们是要创建主分区还是扩展分区,主分区最多只能创建4个,如果创建了扩展分区那么扩展分区需要占用一个主分区。
这里我们创建扩展分区,输入e
需要我们输入起始柱面,默认是2611开始,这里可以输入2611也可以直接enter。
最后输入3916,这样就创建好了扩展分区。
3.创建逻辑分区
输入p,查看分区创建情况
可以发现sda4的文件系统类型是扩展分区,扩展分区是无法使用的,必须在扩展分区的基础上创建逻辑分区
输入n创建逻辑分区,因为这里只剩下刚才创建的逻辑分区需要创建,所以不需要选择输入开始和结束柱面即可。
再输入p显示所有分区,可以看到创建了sda5这个逻辑分区
4.输入w保存
当然刚才也可以直接创建主分区,不创建逻辑分区。
5.格式化逻辑分区
如果是使用虚拟机,需要重启才可以对分区进行格式化,否则会提示找不到分区文件。
mkfs -t ext3 /dev/sda5
6.挂载分区
先创建分区挂载的文件夹
mkdir /newpar
将sda5挂载到/newpar文件下
mount /dev/sda5 /newpar
7.查看挂载情况
df -h
这个挂载只是临时的,重启服务器之后又需要重新挂载,通过修改/etc/fstab文件使挂载永久有效
8.永久挂载
在编写的时候可以使用tab键写下一项。
概念
通过前面的预热,现在来讲概念理解起来会容易一点。
磁盘
sda:第一块硬盘,如果对磁盘进行了分区会有sda1(第一个分区),sda2等。
sdb:第二个硬盘,同样对硬盘分区后有sdb1,sdb2等。
分区
分区的目的就是便于管理,比如在windows系统我们一般会分C盘,D盘,E盘等。
在讲主分区和扩展分区前先看张图片。
这是我的当前windows系统的分区情况,从这里可以很好的理解主分区和扩展分区的概念,同时也有柱面的概念,当前主分区是C盘,扩展分区包括D盘、E盘、F盘。同时D盘、E盘、F盘也叫逻辑分区。
其实我们也可以不创建扩展分区,在windows里面如果不创建扩展分区的话对程序的管理会不方便,只有一个分区。但是在linux中如果刚才在创建分区的是有留言会发现linux只能创建4个主分区,如果需要创建更多的分区那么久必须创建逻辑分区,其中逻辑分区需要占用一个主分区。
文件系统
linux中的文件系统也就是分区类型,在windows中有NTEF,FAT32等,linux中常见的有Ext2、Ext3、Ext4、Linux swap、proc、sysfs、tmpfs等,可以通过mount命名查看当前已挂载的文件系统。
格式化
在前面创建完分区后有一步是要对分区进行格式化,其实在windows系统中也是一样,在创建好一个分区后也需要将分区格式化,只有格式化成具体的文件类型才能使用。
挂载
在windows中分区格式化后就可以使用,但是在linux系统中必须将分区挂载到具体的路径下才可以。
接下来演示增加一个新磁盘的完整过程。
新增硬盘
在当前虚拟机中增加一块20G的硬盘
1.使用fdisk -l查询当前系统分区情况
可以看到新增加的sdb磁盘还没有分区
2.创建主分区
fdisk /dev/sdb
输入n
重启之后会发现,sdb1,sdb6都已经生效了,而且swap也变成了6G(sda3+sdb5)
补充
格式化分区还可以使用带参数的mke2fs命令
mke2fs [-c|-l filename] [-b block-size] [-f fragment-size]
[-i bytes-per-inode] [-I inode-size] [-J journal-options]
[-G meta group size] [-N number-of-inodes]
[-m reserved-blocks-percentage] [-o creator-os]
[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
[-T fs-type] [-U UUID] [-jnqvFKSV] device [blocks-count]
-b:指定区块大小,单位为字节。
-c:检查是否有损坏的区块。
-f:指定不连续区段的大小,单位为字节。
-F:不管指定的设备为何,强制执行mke2fs。
-i:指定"字节/inode"的比例。
-N:指定要建立的inode数目。
-l:从指定的文件中,读取文件西中损坏区块的信息。
-L:设置文件系统的标签名称。
-m:指定给管理员保留区块的比例,预设为5%。
-M:记录最后一次挂入的目录。
-q:执行时不显示任何信息。
-r:指定要建立的ext2文件系统版本。
-R:设置磁盘阵列参数。
-S:仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap。
-v:执行时显示详细信息。
-V:显示版本信息。
-T:指定文件系统类型
dumpe2fs命令
查看分区的详细信息
dumpe2fs /dev/sdb1
cd conf # 进入conf目录
vi settings.xm # settings.xm文件
<localRepository>/usr/local/apache-maven-3.6.3/ck</localRepository>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
1、部署前的准备工作
2、从零开始,把MVC3网站应用程序部署到Mono中
3、从部署MVC3中启发,把MVC4部署到Mono中
4、另外一种与前面部署方式“相逆”的MVC4部署方式
1、系统约定——部署前的准备工作
最近一段时间,许多朋友都纷纷发帖发博客表示已经成功的在Mono中成功的部署了最新版的MVC框架,相当的喜闻乐见。MVC是什么,我想各位读者一定知道,它作为微软推出的重要建站模式,其地位与WebForm相当,重要性也是不容忽视的。试想一下,如果MVC无法在Mono中部署,那我们的Linux.NET仿佛就是一只折翼了的小鸟——“想要飞也飞不高?“不对,直接是飞不起来了。因此,MVC能够正常的在Mono中运行似乎已经就是Linux.NET的一项”理所当然“的事情。
好的进入我们的正题,在部署MVC之前,我们需要新建一个Jexus的网站配置:
添加上我们配置的内容
最后保存退出,然后再重启我们的Jeuxs即可。
在这里,特别值得注意的地方:
2、部署MVC3网站应用程序
Mono中部署MVC3应用程序,这不是我们本回合的终极目标,但是确实本回合最重要的内容,因为只要学会了在Mono中部署MVC3,部署MVC4也就是那么一回事了。其实,在Mono中成功部署MVC3也不是一件新鲜的事情,早前就已经有不少成功的案例,园子中也有一些关于如何在Mono中部署MVC3的文章,各位读者如有兴趣,可以自行查阅,当然,读者们也可以从本文中直接找到方法,我们在这里采用的是Step By Step的讨论学习方法,一步一步的说明白如何操作,并指出当中需要注意的地方和解析原因。
好的,我们先新建一个MVC3应用程序”MVC31“,并选择”空模板“和”Razor视图引擎“
由于这个是一个空模板,里面没有任何现成的Controller,我们简单的新建一个HomeController,并添加上一个Index Action和相关的视图。然后在windows中运行:
那是没有问题的,但如果我们发布到Linux中,效果就不一样了:
没错,正如所想的一样,无法正常运行,按照上面的提示,我们设置”CustomError“节点,把它设置为”OFF“,重新发布,看看那里出了问题:
第一个问题出现了,很明显,是由于Entity Framework引起的。没错,如果有认真读过我前一篇文章《Linux.NET学习手记(4)》 的读者大概已经明白其中的原因和知道解决办法了。正如我上回合为什么没有使用EF(我最喜欢的ORM)而改为使用PetaPoco的原因一样,Mono中的EF版本已经是6.0并且还不支持低于此版本的EF框架,恰好微软正式发布的EF版本最高只有5.0,于是这就造成了我们这里的第一个错误。不过这里的问题也只是暂时性的,随着微软将来EF6.0的发布,这个问题,将会得到解决。
我们通过NuGet卸载所有的Entity Framework。
然后再清除Web.Config和Global中的一些残留项,然后再次发布。
然后顺利的进入到我们的第二个问题,这里我解释一下出现此问题的原因,由于mono 3.0.X对语言文化的支持暂时还没有对中文支持(2.X中则可以支持中文),因此系统默认所使用的”zh-CN“让Mono无法识别。此问题的解决办法就是:在WebConfig的”system.web“节点中添加上”globalization“节点,并把当中的”uiCulture“设置成”en-US“。在这里我们推荐的配置为”<globalization culture="zh-CN" uiCulture="en-US"/>“,这样就可以让我们的程序本身以”英语“语法来运行,但是显示时却能够以”中文“语法来显示。
我们添加上这个节点,并重新发布:
非常不幸的,我们继续进入到了一个新的错误,到这里,各位读者有什么感觉了?抓狂了?想想放弃了?俗话说:”行百里者半九十“,这时千万别放弃,因为成功就在眼前了。通过从网上翻阅大量的资料,我们找到这这次问题的真凶,没错,作怪的就是”Microsoft.Web.Infrastructure.dll“,我们把Windows中”Microsoft.Web.Infrastructure.dll“和Mono中的”Microsoft.Web.Infrastructure.dll“反编译:
可以看出,Windows中的Infrastructure和Mono中的Infrastructure还不是同一回事,那这就好办了,我们把MVC3项目中的Infrastructure剔除,让程序使用Mono自带的动态库,或许就可以解决我们现有的问题。我们删除这个动态库后,再次发布:
终于看到了我们一直努力想要看到的”Index“,MVC3成功的在Mono中跑起来了。
趁热打铁,我们再结合上PostgreSQL数据库和PetaPoco快速的建立一个CRUD的小应用。
我们先新建一个商品表”Goods“,其表结构如下:
然后在新建相关的Controller、Model、View等,这里就不再介绍当中的代码如何编写和实现,有兴趣的读者可以在代码演示中查看。
把做好的站点发布到Mono中:
页面能够正常显示,没有问题,我们在试试添加一个新的商品:
添加商品时报了一个错,同时在“Details”中提示有一个程序集找不到。
通过排错,我们发现了我们引用的一个DLL文件在Mono中是没有的:
再次添加数据,OK!成功添加!
出现了“Linux.NET学习手记”这个商品。至此,MVC3的简单部署已经完成~!!
这里做一些小提示:
(1)、由于我采用了的是虚拟机,因此我结合了一个Linux的Samba服务来直接发布,各位读者也可以采用Ftp或者发布到本地再上传的方式进行网站的发布,发布后记得重启一下Jexus。
(2)、“Infrastructure”动态库除了可以采用发布会删除的方式进行处理,也可以采用“不复制”的属性才处理
(3)、读者们也可以参考《在mono3.0.10+Jexus5.3上运行MVC4和WebApi的要点》这篇文章,上面的方法与这里有师出同门之道。
3、Mono中部署MVC4
上一小节中,我们历尽艰辛“取得真经”,成功的把一个MVC3网站应用部署到了Mono中,在这取得重要的成功之后,我们向我们本回合的终极目标继续推进——在Mono中部署一个MVC4应用。其实,无论是MVC3还是MVC4,它们的部署方法都是类似的,我们在上小节中详讲了MVC3的部署就是为了能够在部署MVC4起到一定的参考作用。
好的,心动不如行动,我们马上的新建一个MVC4的网站应用: