月度归档:2014年11月

磁盘管理2:用inode的知识理解软链接与硬链接

本文主要介绍如何用inode的知识来理解软链接与硬链接,如果对于inode不是很理解,请先阅读本系列的前一篇文章:《磁盘管理1:存储设备结构与inode》


1.何为硬链接

硬链接:直接指向同一个inode的不同路径的文件彼此叫做硬链接。

命令:ln 源文件 目标文件

我们来画图说明一下:

由图可以看出不同路径的两个文件名的inode号相同,这个inode号指向了同一个inode节点,此为硬链接。换句话说,硬链接就是同一个文件使用了多个别名。

也就是说链接的目标文件的inode号与源文件相同,我们可以验证一下,首先创建一个一个文件a.txt,然后为它创建一个硬链接a.ln,命令如下:

[root@localhost ~]# ln a.txt a.ln

接着我们来看一下a.txt与a.ln的inode号是否相同,使用如下命令:

继续阅读

Docker初体验1 —几个概念的理解

本文从一种使用场景来引出docker,并讨论了什么是镜像,容器,仓库,以及docker的相关概念。

试想一种使用场景:

我的wordpress 博客网站现在部署在阿里云服务器上,但是在后期的使用中我有可能有这样一种需求,阿里云太贵,我可能实在付不起每月月租,想把我的服务迁到其他的云服务上,而又想完整的将我的wordpress服务和数据从阿里云迁出,并将其部署到另外的云服务上。那么我怎样解决这个问题?

第一种方案:在新主机上部署一套环境,然后将项目目录和mysql服务倒出,这种方法比较费力,而且由于相关依赖包比价复杂,容易出错。

第二种方案:在主机上安装一个KVM之类的虚拟机,可以将wordpress服务部署在KVM的虚拟机上,当我想迁出服务时我就将虚拟机的相关文件倒出,但是由于云服务主机的配置不是很高,才1核1G。这样就会耗费我很多的资源,我的wordpress明明可以跑在宿主机上,但是现在却要跑在虚拟机里。那么有没有什么方法可以解决我的问题?

方案四:使用Docker:Build, Ship and Run Any App, Anywhere!


什么是 Docker与Docker官方相关技术简介(可略读):

Docker是一套轻量级操作系统虚拟化解决方案,它由go语言编写。它基于Linux容器技术(LXC),Namespace,Cgroup,UnionFS(联合文件系统)等技术。

namespace(命名空间):命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。docker实际上一个进程容器,它通过namespace实现了进程和进程所使用的资源的隔离。使不同的进程之间彼此不可见。我们可以把Docker容器想像成进程+操作系统除内核之外的一套软件。

cgroup(控制组)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组技术最早是由 Google 的程序员 2006 年起提出,Linux 内核自 2.6.24 开始支持。控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。

UnionFS(联合文件系统)Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对 文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。Docker 中使用的 AUFS(AnotherUnionFS)就是一种 Union FS。 AUFS 支持为每一个成员目录(类似 Git 的分支)设定只读(readonly)、读写(readwrite)和写出(whiteout-able)权限, 同时 AUFS 里有一个类似分层的概念, 对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。

Docker 目前支持的 Union 文件系统种类包括 AUFS, btrfs, vfs 和 DeviceMapper。


谈谈我的理解

1.Docker的生命周期:

Docker的生命周期包含三个部分,镜像,容器,仓库,我们可以把镜像,容器想像成java的类和对象,即容器是由镜像实例化而来的。也就是说我们想使用装有相关软件的镜像,首先要把镜像创建成容器。现在是不是对镜像,容器,仓库这些概念还存在一些困惑?那么让我们动手体验一下docker的神奇,然后慢慢理解这些概念

继续阅读

磁盘管理1:存储设备结构与inode

本文简单的介绍了MBR的结构与inode的相关知识

说到磁盘管理我首先要了解一下存储设备的结构:我们大体上可以将存储设备的结构分为两部分。第一部分是MBR(Master Boot Record)即主引导分区,它在磁盘的前512字节,它独立于操作系统之外,也就是说MBR与你用什么操作系统实际上是无关的。MBR的结构如下图所示,它的前446字节叫做引导加载器(BootLoader),实际上这是一段程序,这段程序可以在内核加载到内存之前做一些准备工作,具体的细节可以自行谷歌。之后64字节的每16字节标识一个分区,共标示4个分区,但可以让其中一个分区保存额外分区表的指针,这种分区就是所谓的扩展分区。还有2个字节叫做魔数。用于标记MBR是否有效。MBR结构图如下:

MBR

我们知道当电脑开机的时候bios中的数据是存储在ROM中的一段代码,这些代码是进行系统自检的,它会在开机的时候将ROM中的程序映射到内存中,并运行这些系统自检指令。当自检完成后,会根据bios的启动顺序去寻找各设备的MBR,比如他会去找光盘的MBR,如果没有找到就会去找硬盘的,但此处注意:如果光盘的MBR出错,他就会报错,但是不会接着去找下一个设备。当bios发现设备是硬盘,他就会把硬盘的BootLoader加载到内存中,同时BIos退出内存,而Boot Loader这段程序又会去读取那64byte的分区表,并根据相应的配置,将分区上的操作系统内核加载到内存中,当内核加载到内存并解压缩完毕之后,BootLoader又会从内存中退出,此时内核就会去加载应用程序。

        现在我们的内核已经开始接手整个磁盘,那么磁盘那么大,内核如何进行管理呢?

继续阅读

博客由来,不知从何说起,工作一周年的礼物

今天是2014年11月15日,今天对于北京来说是一个特殊的日子,因为北京开始供暖了,睡觉终于不冻脸了。。。当然今天对我来说有另外的意义,因为今天是我在北京工作一周年的日子,这一年对我来说意义非凡,我从学生变成实习生,之后又变成了一条运维狗。。。这一年让我逐渐认清自己,逐渐的明白了一些事情,也经历了人生的一段抑郁的低谷,至今我也不知道为什么会出现这样的问题,虽然现在好了,但仍然还有很多困惑,但值得庆幸的是我已经开始读书了,以后有空可以谈谈我读的那些有关心理学的书。

技术上绝对谈不上什么突飞猛进,反倒是彻底被颠覆,从头再来,因为我从一个“准java程序员”变成了一名运维人员,所以几乎是重建了我的知识体系。当然也发现运维这行真的非常繁杂,所涉及的知识无穷无尽。所以我现在连菜鸟都算不上,最多算一颗刚刚有点裂缝的蛋。

继续阅读