扩展Linux根目录分区

扩展用lvm方式创建的分区是非常简单的操作,但是因为之前没有操作过,简单的记录一下。

我不喜欢只有步骤的文章,但是因为是简单记录我又不想在这里写太多的理论知识,所以在看这篇文章之前,我希望你最好知道什么是lvm,也清楚lvm一些关键的词汇。

首先我们要知道,调整物理分区的大小是很麻烦的,所以调整虚拟分区的大小实际上是通过增加物理分区实现的。

之前用来做实验的虚拟机觉得不会用太多存储空间,就只添加了一个8G的硬盘,在根目录空间紧张的情况下,需要在虚拟机上扩容这块虚拟磁盘。新增的空间不能直接使用,需要到虚拟机中将根目录扩容才可以。

开机后可以看到,sda的空间已经扩大到20G了,需要通过添加分区将额外的12G利用起来。

简单的可以使用fdisk指令添加分区,创建新的主分区就可以了。选择分区编号和大小那里我都是选择默认的。

有些文章提到要使用t指令修改分区类型,我觉的其实是没有必要的,后面的pvcreate指令会替我们做这件事情的,但是我也是第一次做扩容的操作,所以还没有实验。

然后我们要使用这个分区创建pv, 使用命令 pvcreate [分区]。

现在将新创建的pv添加到vg中,使用命令vgextend [vg] [pv]。

最后扩展根目录的lv,使用命令 lvextend -l [pe 数量] [lv]。

扩展lv最好使用按照PE数量操作。

现在我用的/dev/centos/root这个虚拟分区的体积已经增大了,但是df -h查看一下。

根分区的大小并没有变化,因为这里显示的是文件系统的格式话后的分区大小,我们还需要扩展文件系统分区的大小。

最后的最后,使用xfs_growfs 指令扩展文件系统大小。

刚开始,我看的教程使用的是resize2fs指令,我试了几遍也没有用,然后我反应过来应该是文件系统不同,查询了一下,果然resize2fs指令是用来调整ext系列格式分区的。

 

Windows Server 2008 R2 创建 soft Raid5

很多人觉得用Windows创建软Raid的情况很少,但实际上Windows的软Raid软件已经很完善了,只是很少有人提,而且用Windows创建软Raid确实很简单,很方便。

当然我已经不推荐使用2008这种老版本的系统了,但是正好有客户询问,所以录制了一段简单的视频。

Node.js 学习笔记

因为之前对Node.js有一定的了解,所以很多基础已经有了,很多简单的入门的东西不会放在这里,更多的是一些自己原来的疑惑的梳理。

Node.js类的定义:

因为Node.js是弱类型的语言,相比其他弱类型语言,可以说是“将一切是对象”发挥到了极致,并且关键字里面也没有class,所以严格上说Node.js并没有定义类的机制。

Node.js 中的类都声明为函数,通过new 关键字创建对象。

function Hello() {
  this.name = '';
  this.set = function(name) {
    this.name = name;
  }
  this.get = function() {
    return this.name;
  }
}

创建实例

hello = new Hello();

除了标准的定义方法我们还可以通过定义一个返回一个对象的函数实现。

我推荐用函数创建一个完整的对象并返回

function Hello() {
  hello = {};
  hello.set = function(name) {
    this.name = name;
  };
  hello.get = function() {
    return this.name;
  };
  return hello;
}

通过 hello = Hello(); 的方式实例化对象。

另外一种方式是利用闭包实现的

function Hello() {
  var name = '';
  function setName(newName) {
     name = newName;
  }
  function getName() {
    return name;
  }
  return {
    set: setName,
    get: getName,
  };
}
function Hello(name='', way='') {
  if (name!='') {
    this.name = name;
    this.greet = function () {
    console.log('hello ' + name);
  };
  } else {
    if (way == '') {
    this.way = 'wave';
  } else {
    this.way = way;
  }
  this.greet = function () {
    console.log(way + ' to everyone!');
  };
  }
}

同样通过 hello = Hello(); 的方式实例化对象。

第二种方式有一个问题就是 hello.name 并不是set函数和get函数操作的那个name,而且新定义hello的函数也没法直接操作set函数和get函数中操作的name,这就是闭包的特点,如果你想保护什么变量,当然可以采用这种方式,不过这种方式实在太繁琐了,而且新手很难理解。
其实Node.js定义类的方式类似与其他语言的构造函数,即使是静态语言,创建实例化对象都是通过执行构造函数实现的,只不过有些语言的构造函数是隐式声明和执行的罢了。
所以我们也可以在构造函数中加一些判断,以适应不同的情况。
比如:

参数传递顺序:

继上面的例子

function Hello(name='', way='') {
  if (name!='') {
    this.name = name;
    this.greet = function () {
      console.log('hello ' + name);
    };
  } else {
    if (way == '') {
      this.way = 'wave';
    } else {
      this.way = way;
    }
    this.greet = function () {
      console.log(way + ' to everyone!');
    };
  }
}

如果我们示例化对象的时候使用

shakeman =new Hello(name=”, way=’shake’);

bowman = new Hello(way=’bow’, name=”);

结果一样不一样呢?

结果是不一样的,通过这个例子我发现Node.js并不是通过参数的左值进行确定值赋给谁,而是按照传参的顺序确定的。

前者定义的对象是

Hello { way: ‘shake’, greet: [Function] }

后者定义的对象是

Hello { name: ‘bow’, greet: [Function] }

用过python的人看到这里可能会觉得难受了。

双引号和单引号有没有区别:

几乎所有文档里都说单引号和双引号功能上没有区别,但是我在生成query语句的时候却发现并不相同。

比如

var query =’select * from test where name =”my name”‘.;

打印出的语句是

select * from test where name =”my name”。

var query =”select * from test where name =’my name'”;

打印出来却是

select * from test where name =\’my name\’

也就是说使用双引号,node会假设创建的字符串是原始字符串,并对需要转义的字符使用转义字符。

当然,这只是我测试的结果,我还没有找到证据证明我的这个观点。

restify API框架 学习笔记

终止处理链:

res.send(false)

返回错误:

res.send(err)

返回错误,错误码来自于:

err.statusCode

停止服务器:

next.ifError(err)

使用正则表达式设置路由:

server.get(/^\/([a-zA-Z0-9_\.~-]+)\/(.*)/, function(req, res, next) {

// params获取参数列表
  console.log(req.params[0]);
  console.log(req.params[1]);
  res.send(200);
  return next();
});