centos hal?ubuntu centos debian
其实centos hal的问题并不复杂,但是又很多的朋友都不太了解ubuntu centos debian,因此呢,今天小编就来为大家分享centos hal的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
阿里云主机centos系统如何挂载和扩展多块硬盘(非目录挂载)步骤
笔记最近买了个阿里云主机(也是听说不错才买的),操作系统是CentOS,后来又新买了硬盘,在新硬盘如何挂载和扩展折腾了不少时间,所幸操作成功,现在把操作步骤记录分享给大家。
新买的阿里云主机默认硬盘没有挂载,如果是挂载那块没有挂载的默认硬盘,可以直接看看阿里云给的教程。但是我感觉硬盘不够用,后来又买了一块硬盘,又不想单独挂载到一个目录里,想扩展现有的硬盘,或者在挂载唯一那块硬盘又想留出以后扩展这块硬盘的余地,那么用阿里云给出的教程就不行了。
折腾了半天,终于挂载成功,不过这样的操作不建议你直接折腾在系统盘下面!不然你会后悔的!
1.阿里云的centos系统6系列的好像没装LVM2,需要先安装LVM2,上网搜搜教程,自己装,5.4 32位已经安装了LVM2,所以不需要这个步骤
2.如果你已经用阿里云给出的教程挂载过一块硬盘,可以先将这块盘里的数据备份出来(数据安全,别忘这一步,因为要格式化的),然后解绑
#umount-a
接着编辑启动项
#vi/dev/fstab
将之前/dev/xvdb1/mnt ext3 defaults 0 0这条加入进去的启动项去掉
然后保存
接着用fdisk删除分区假设你之前绑定的是/dev/xvdb1
#fdisk/dev/xvdb
#d
#wq
接着在用 fdisk-l
查看,是不是发现xvdb1已经解绑了
3.如果你是第一次挂载,或者不想折腾已经用阿里云官方给出的办法挂载的话,就略去上面过程
#fdisk-l
假设你看看到有两个盘还没挂载
/dev/xvdb
/dev/xvdc
先处理/dev/xvdb按下面顺序输入
#fdisk/dev/xvdb
#n
#p
#1
#t
#8e
#wq
然后按同样办法处理/dev/xvdc
#fdisk/dev/xvdc
#n
#p
#1
#t
#8e
#wq
如果你没第二块,就不用搞了
4.再用fdisk-l看看是不是已经出现/dev/xvdb1/dev/xvdc1这两个分区了
下面分别为这两个分区创建物理卷
#pvcreate/dev/xvdb1
#pvcreate/dev/xvdc1
如果你没有/dev/xvdc1,只是想以后为增加xvdb1容量,请自动忽略关于xvdc1的操作步骤
5.接着创建卷组
#vgcreate mygroup/dev/xvdb1
mygroup是卷组名,自己起
6.激活卷组
#vgchange-ay mygroup
还记得mygroup是你自己起的卷组名么,激活卷组是懒得重启VPS
7.扩展卷组
vgextend mygroup/dev/xvdc1
如果没有,请直接忽略这一步
8.创建逻辑卷
#vgdisplay mygroup| grep"Total PE"
先使用上面这个命令,得到
Total PE 15357
15357就是该卷组的逻辑数
#lvcreate-l15357 mygroup-n wwwroot
wwwroot是逻辑卷的卷名,自己起
8.格式化逻辑卷
#“mkfs.ext3/dev/mygroup/wwwroot
9.创建一个你要绑定的目录,比如/www(话说WDCP默认使用的就是/www)
mkdir/www
10.加入启动项
echo'/dev/mygroup/wwwroot/www ext3 defaults 0 0'>>/etc/fstab
11.挂载
mount-a
12.最后用df-hal看一下,是不是已经成功了?
用了这个办法,如果你以后想再次扩展增加这个分区,也很容易的
假设你用fdisk-l看到/dev/xvdd是你新买硬盘,需要扩展到之前的分区上
#fdisk/dev/xvdd
#n
#p
#1
#t
#8e
#wq
#reboot重启
得到/dev/xvdd1,接着
#/pvcreate/dev/xvdd1
#vgextend mygroup/dev/xvdd1
#vgdisplay mygroup| grep"Total PE"
这个命令得到总PE数 Total PE 10240
#lvresize-l10240/dev/mygroup/wwwroot
#resize2fs/dev/mygroup/wwwroot
喝杯茶然后运行df-hal,看看成功没
题外话,阿里云的centos的系统盘并没有使用LVM2分区,所以无法扩展/dev/hda1盘,如果你的网站很有前途,就别把数据库文件指定到系统盘上了,如果你是很有前途的图片站,也不要把站点放在系统盘上,也不要用阿里云给出的官方挂载方式,不然到时候做不到无隙增容,就蛋疼了。
不过曾经在某个网站上看到过别人的一个解决办法,就是把系统盘完全克隆到两外一个盘里,然后改启动方式,原系统和复制系统的启动文件都要改(都改成副盘启动),然后重启,然后让副盘起作用当做主系统使用,接着用LVM2分区原来的那个系统盘,弄好以后,再次把副盘里的系统克隆到原系统盘,再次更改两个系统的启动文件(都改成原盘启动),重启后,系统盘就变为LVM2分区,就可以进行扩展增容,然后就可以把副盘里的系统文件删除,该怎么折腾怎么折腾。
忘了在哪看的了,折腾了两次没成功,阿里云重装系统重启都太慢,就不想折腾了。
总体来说,阿里云的主机还是不错的,不要自己考虑备份问题,运行也稳定,就是宽带有点小贵。
如何从Docker Registry中导出镜像
一、目录结构
Registry的配置文件中可以指定registry的运行目录(实验用本地文件系统作为后端存储),registry会在这个目录中建立相应的目录结构,我在本地启动一个registry服务,然后只push一个centos镜像上去。镜像名称是localhost:5000/library/centos:latest,然后registry在本地创建了如图1所示的目录。
图 1 registry目录
为了显示方便,我只截取了64位ID的前一部分。可以看到,目录大体分为两个:一个是blobs,一个是repositories。blobs中主要存放数据文件,可以看出都是经过sha256计算后的ID。repositories目录中放镜像的描述信息,记录了一个镜像有哪些layer,tag对应的manifest文件,link文件是一个文本文件,内容是一个形如“sha256:cf34a09a90b54c…”的64位ID,这个ID对应在blob中的文件其实就是这个image的manifest文件。
二、Manifest文件
manifest文件描述了一个镜像的元信息,包括了layer的数据ID,layer的配置等,文件格式是json形式的文本文件。
docker镜像可以分为V1和V2,在1.9以后镜像格式有一些变化。为了向前兼容V1版本的docker,docekr
registryV2使用的manifest也对应地分为Schema1和Schema2,两者可以通过官方对于manifest的解释可以参考[1]和[2]。这里实验都是在schema1上做的。
Schema1主要包含如下信息:
name:image的仓库(repository)名,比如localhost:5000/library/centos:latest这个镜像的repository name是library/centos
tag:该镜像的tag
architecture:指该镜像的宿主机的操作系统架构,如“amd64”
fsLayers:该字段是一个数组,数组中的元素分别指明了各层对应的数据文件的sha256ID,数组的第1个就是镜像的最顶层,第2个是次顶层…以此类推,值得注意的是,不同层的fsLayer
ID
有可能一样,是因为有些层是空的,只有一些配置信息。当执行了一个不涉及文件操作的命令,这时候就会形成空fsLayer,空fsLayer计算出来的sha256ID也都是一样的了。镜像的一个layer,是由文件系统(比如新增的文件)fsLayer以及配置信息构成的,layer在docker的代码层面又被称为image,因为任意一个layer都可以作为顶层layer,被docker
image信息引用,从而成为一个image。所以需要区分fsLayer与layer。
history:该字段也是一个数组,是为了兼容v1而设置的,指明了每个layer的配置信息,数组第一项对应的是镜像的最顶层,与fslayer一起构成了一个layer。数组元素是一个json格式的map对象,key为“v1Compatibility”,值为一个字符串,该字符串就是layer的配置信息,可以直接用json.Unmrashal成为一个V1Image结构体(定义可以参考代码github.com/docker/docker/image/image.go
L31)
schemaVersion:该manifest的版本,一个int型,如 1。
三、Tar包形式的镜像
Docker中有个save和load命令。save命令可以将一个docker镜像导出,把这个镜像从最顶层到最底层的所有layer一起导出到一个tar包中,然后就可以随意拷贝、发送这个tar包到别的机器,最后可以用load命令把这个镜像重新加载进docker。
如果我们把一个镜像从registry里拿出来,按照save成的tar包格式来组织,然后使用load命令加载,这样就实现了不通过docker pull命令来下载镜像,可以根据这个原理做第三方镜像下载工具。
所以我们先来看一下镜像的tar包形式是什么样的,我使用save命令导出了centos镜像,解压后目录结构如图2所示:
图 2镜像tar包解压后的目录
下面对各文件进行解释:
根目录下的repositories文件,描述了这个镜像的名字,tage,还有顶层layer的id
不同的文件夹代表了不同的layer。
json:layer的配置信息,如创建时间,执行命令等。
layer.tar:layer中包含的文件,如果是空layer,layer.tar解压后就是空的。
VERSION:版本信息。
四、从registry导出镜像
我们对比tar包中的文件和registry中的文件,不难发现其中的对应关系,json、VERSION还有repositories文件都是可以从manifest中导出。
json文件其实就是之前提到的history字段中v1Compatibilitiy,不同的是manifest中的这个字段中有很多转义符,我们需要去掉这些转义符,方法是先Unmarshal成为一个V1Image结构体,然后在json.Marshal转回字符串就好。
layer.tar其实就是blobs中对应的data文件,直接复制出来然后改个名字就可以。
VERSION是manifest中的schemaVersion。
repositories文件内容很简单,格式是{“imageName”:{“tag”:”topLayerID”}},所以按照这个格式从manifest中找到对应的数据填进去就ok。
这些文件都准备好了以后,就可以准备打包成tar包了,直接使用linux中自带的tar命令,这里需要注意的一点是,应该使用“只打包不压缩”的选项。生成tar包后就可以直接使用docker load命令导入了。
我这么做了,是可以成功地导入一个镜像。但是发现存在一个问题:使用上述方式导入的镜像,每个layer的ID和我直接用docker
pull命令下载下的不一样,而且docker
pull得到的ID从未在manifest和registry中的任何地方出现过。而且不管我使用新的机器还是重新pull,得到的ID都是一样的。经过阅读docker的代码我才发现,layerID不是随机生成的,也不是manifest中写道的id,而是算出来的。下面就说一下计算过程。
我们最终需要的layerID在docker源码中叫做StrongID,StrongID是把一个byte数组做Hash后得到的,这个byte数组的生成需要三个对象:v1Compatibility,blobSum(manifest中的fsLayerID),parent(父layer的StrongID),数组生成方法参考image.go中的MakeImageConfig方法(docker
1.9),基本操作就是把一个json对象转成字节数组。因为有parent字段的存在,需要从最底层的layer开始计算,逐步迭代,最终的到top
layer的ID。最后要做的工作就是替换json文件中的id字段和parent字段成为新计算出来的ID即可。同样地,文件夹名也要做相应改变。
增量导入:如果本地已经存在某些layer的情况,我们只用打包新的layer即可,因为导入时候docker会检测这个layer是否存在,而且有parent信息来保证layer之间的关系。
如何在CentOS中添加Swap
1、检查 Swap空间
在设置 Swap文件之前,有必要先检查一下系统里有没有既存的 Swap文件。
运行以下命令:
swapon-s
如果返回的信息概要是空的,则表示 Swap文件不存在。
2、检查文件系统
在设置 Swap文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap。运行以下命令:
df-hal
检查返回的信息,还剩余足够的硬盘空间即可。
3、创建并允许 Swap文件
下面使用 dd命令来创建 Swap文件。
ddif=/dev/zeroof=/swapfilebs=1024count=512k
参数解读:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file>
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file>
bs=bytes:同时设置读入/输出的块大小为bytes个字节
count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。
4、格式化并激活 Swap文件
上面已经创建好 Swap文件,还需要格式化后才能使用。运行命令:
mkswap/swapfile
激活 Swap,运行命令:
swapon/swapfile
以上步骤做完,再次运行命令:
swapon-s
你会发现返回的信息概要:
FilenameTypeSizeUsedPriority
/swapfilefile5242840-1
如果要机器重启的时候自动挂载 Swap,那么还需要修改 fstab配置。
用 vim打开/etc/fstab文件,在其最后添加如下一行:
/swapfileswapswapdefaults00
最后,赋予 Swap文件适当的权限:
chownroot:root/swapfile
chmod0600/swapfile