Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4066466
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2009-08-29 21:55:19


 使用lvm2整合系统磁盘资源


1, 如果是逻辑分区,先在其上创建新的分区

fdisk /dev/sdc        //新建的分区为sdc6

2, 创建物理卷 

pvcreate /dev/sdc6

pvdisplay显示物理卷信息

3, 创建卷组

vgcreate  dnfs   /dev/sdc6

如果卷组已经存在,可使用vgextend/dev/sdc6加入。

vgextend dnfs /dev/sdc6

4,创建逻辑卷

   lvcreate –n osd –L 500G dnfs //dnfs逻辑卷中创建osd逻辑卷,大小为200G

   可使用lvextend动态改变逻辑卷的容量

   lvextend –L +200G /dev/dnfs/osd  //osd的空间增加200G

5, 创建文件系统

   osd逻辑卷上使用mkfs创建文件系统

   mkfs –t ext3 /dev/dnfs/osd

    mkfs.ext3 /dev/dnfs/osd

6, 挂载文件系统

   mount –t ext3 /dev/dnfs/osd /mnt/osd

 

系统开机自动挂载,在/etc/fstab中加入

/dev/dnfs/osd   /mnt/osd  ext3 defaults  0 0

 

df /mnt/osd 即可查看挂载的逻辑卷的信息

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/dnfs-osd 743128848    201720 705178392   1% /mnt/osd

 

 

这样DNFS系统就能使用/dev/dnfs/osd的空间作为实际文件数据的存储空间,可以灵活的加入磁盘扩展容量。

 

 

改变ext3文件系统大小

# resize2fs /dev/dnfs/osd

这样会改变osd逻辑卷上的ext3文件系统的大小到osd逻辑卷的总大小,resize2fs也可以指定大小, resize2fs支持在线改变ext3文件系统大小,不需卸载即可调整大小。

 

删除操作

如果不想用逻辑卷管理器了,可以从LVVGPV逐层删除

# lvremove /dev/dnfs/osd

dnfs转为休眠状态:

# vgchange -an dnfs

# lvremove dnfs

# pvremove /dev/sdc6

 

 

由于osd需要获取磁盘信息(可用空间,可用空间),这可以通过

df /mnt/osd完成,而popen可以帮助我们在C程序中获取shell命令的输出。

 

#include
FILE *popen(const char *cmdstring, const char *type) ;
函数popen 先执行fork,然后调用exec以执行cmdstring,并且返回一个标准I/O文件指针。
如果type是"r", cmdstring进程的输出端从stdout重定向到管道的写端,并返回管道的读端。

如果type是"w", cmdstring进程的输入端从stdin重定向到管道的读端,并返回管道的写端。

 

// getspace.c

#include
#include
#include
#include

#define LV  "/dev/mapper/dnfs-osd"


/* used space used K   
 * available space used K
 */

typedef struct space
{
 uint64_t used;
 uint64_t avail;
}space;


int spaceinfo(space *sinfo)
{

 FILE *fp;
 if((fp = popen("df /mnt/osd", "r")) == NULL)
 {
  perror("popen failed");
  return -1;
 }

 char buf[256];
 int i;
 for(i = 0; i < 2; i++)
 {
  fgets(buf, sizeof(buf)-1, fp);
 }
 
       
 char *p = strstr(buf, LV);
        if(p == NULL)
 {
  perror("LV not found");
  return -3;
 }
 
 p += strlen(LV);
 while(*p == ' ') p++;
 sscanf(p, "%*u %u %u", &sinfo->used, &sinfo->avail);

 if(pclose(fp) == -1)
 {
  perror("pclose error");
  return -1;
 }

 return 0;
}

int main()
{
 space s;
 spaceinfo(&s);
 printf("%u %u\n", s.used, s.avail);
 return 0;
}

 

#gcc -o getspace getspace.c

#./getspace

201720 705178392  //即为逻辑卷的已用空间 和 可用空间

 

#include <stdio.h>
#include <unistd.h>

int main()
{
    FILE *fp = popen("bc -q", "w");
    fwrite("2+5\n", 4, 1, fp);
    pclose(fp);
}
//bc的输入被连接到管道的读端,往管道的写端写数据,会输出计算结果

阅读(2724) | 评论(1) | 转发(0) |
0

上一篇:标准I/O缓冲区详解

下一篇:守护进程编程

给主人留下些什么吧!~~

chinaunix网友2010-01-05 08:24:59

上海泰丰泵业制造有限公司 www.shtaifeng.com 上海嘉定区嘉行公路1558号 张婉君,13918877392 电话:021-39901886/39901883 传真:021-39901886 公司简况 上海泰丰泵业制造有限公司是一家集科研、开发、设计、生产销售为一体的股份制企业。座落于上海嘉定徐行经济城。 产品和应用范围 公司引进国际先进的管理经验,不断进行科技创新,以ISO8402质量标准为准则,成功地开发以具国际先进水平的TFL、TFW等泰丰品牌的清水、污水泵及其它成套设备。本公司已建立符合 ISO900质保体系,并取得认证证书。确保产品质量长期、稳定、可靠。产品广泛应用了高层供水、消防、暖通、制冷、城市给排水等领域,已成功地为浦东机场、上海可口可乐、兰州炼化、大庆油田、青岛海尔等提供成套供水设备,产品屡获奖励。 服务承诺 开拓前进的上海泰丰,奉行以人为本,始终秉承”开拓创新、追求卓越”的企业宗旨,以勇攀科技高峰,力求最高质量为发展核心。严格技术管理,建立完整的管理体系和完善的质量控制手段。泰丰公司以强有力的销售网络和完整的售后服务体系,使