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

阅读剩余
THE END