使用lvm2整合系统磁盘资源1, 如果是逻辑分区,先在其上创建新的分区fdisk /dev/sdc   …     //新建的分区为sdc62, 创建物理卷 pvcreate /dev/sdc6pvdisplay显示物理卷信息3, 创建卷组vgcreate  dnfs   /dev/sdc6如果卷组已经存在,可使用vgextend将/dev/sdc6加入。vgextend dnfs /dev/sdc64,创建逻辑卷   lvcreate –n osd –L 500G dnfs //在dnfs逻辑卷中创建osd逻辑卷,大小为200G   可使用lvextend动态改变逻辑卷的容量   lvextend –L +200G /dev/dnfs/osd  //将osd的空间增加200G5, 创建文件系统   在osd逻辑卷上使用mkfs创建文件系统   mkfs –t ext3 /dev/dnfs/osd   或 mkfs.ext3 /dev/dnfs/osd6, 挂载文件系统   mount –t ext3 /dev/dnfs/osd /mnt/osd系统开机自动挂载,在/etc/fstab中加入/dev/dnfs/osd   /mnt/osd  ext3 defaults  0 0 这样DNFS系统就能使用/dev/dnfs/osd的空间作为实际文件数据的存储空间,可以灵活的加入磁盘扩展容量。改变ext3文件系统大小# resize2fs /dev/dnfs/osd这样会改变osd逻辑卷上的ext3文件系统的大小到osd逻辑卷的总大小,resize2fs也可以指定大小, resize2fs支持在线改变ext3文件系统大小,不需卸载即可调整大小。删除操作如果不想用逻辑卷管理器了,可以从LV,VG到PV逐层删除# 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  {  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#./getspace201720 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的输入被连接到管道的读端,往管道的写端写数据,会输出计算结果
01-19 06:44
查看更多