亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? raidlib.c

?? create raid tool at linux
?? C
字號:
/*   raidlib.c : Multiple Devices tools for Linux               Copyright (C) 1994-96 Marc ZYNGIER	       <zyngier@ufr-info-p7.ibp.fr> or	       <maz@gloups.fdn.fr>	       Copyright (C) 1998 Erik Troan	       <ewt@redhat.com>   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.      You should have received a copy of the GNU General Public License   (for example /usr/src/linux/COPYING); if not, write to the Free   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */#include "common.h"#include "parser.h"#include "raidlib.h"#include "version.h"#include <string.h>#include <popt.h>#include <asm/page.h>#include <sys/sysmacros.h>#ifndef PAGE_SIZE#define PAGE_SIZE (sizeof(long)*1024)#endifmdu_version_t md_ver;#define OLD_MDTOOLS ((md_ver.major == 0) && (md_ver.minor < 0.50))static int save_errno = 0;md_cfg_entry_t *cfg_head = NULL, *cfg = NULL;int do_quiet_flag = 0;int open_or_die (char *file){  int fd;  fd = open(file, O_RDWR);  if (fd == -1) {    if (errno == EACCES)        fprintf(stderr, "need to be run as root.\n");    else if (errno == ENOSYS)        fprintf(stderr, "kernel has no RAID support.\n");    else if (errno == EEXIST)        fprintf(stderr, "device already running!\n");    else if (errno == ENOENT)        fprintf(stderr, "no MD device file in /dev.\n");    else    	perror (file);    exit (EXIT_FAILURE);  }  return fd;}int getpageshift(void){   int i,pagesize,pageshift=0;   pagesize=getpagesize();   for (i=1; i <= 8*sizeof(int); i++) {       if( pagesize & (1UL << i)) {           pageshift += i;       }   }   return pageshift;}/* * converts a size in bytes to 'factor' metrics, which is a * kernel-internal way of dealing with chunk sizes and stuff. * It's the number of pages within the given number. */static int s2f (int bytes){    int factor, c, i;    int kbytes, pageshift;    if (bytes % 1024) {	fprintf (stderr, "chunk_size must be an integral number of k\n");	return 0;    }    kbytes = bytes >> 10;       pageshift=getpageshift();    factor = kbytes >> (pageshift - 10);     for (i=1, c=0; i<kbytes; i*=2)	if (factor & i) c++;        if ((kbytes*MD_BLK_SIZ) % PAGE_SIZE || c!=1) {	fprintf (stderr, "Cannot handle %dk chunks. Defaulting to %dk\n",		 kbytes, 1 << (pageshift-10));	return (0);    }    for (i=0; !(factor & (1 << i)); i++);    return (i);}__u32 get_random(void){        __u32 num;        int fd;        fd = open("/dev/urandom", O_RDONLY);        if (fd != -1 && read(fd, &num, 4) == 4) {#if DEBUG                printf("raid set magic: %x\n", num);#endif                close(fd);        } else {                num = rand();#if DEBUG                printf("raid set magic (pseudo-random): %x\n", num);#endif        }        return num;}static int do_mdrun (int fd, char *dev, mdu_param_t *param) {    int rc;    int pers;	/* Old versions of md (< 0.50) used this instead. Thank Ingo	   for fixing it. */#define MD_PERSONALITY_SHIFT    16/* These are the ioctls for md versions < 0.50 */#define REGISTER_MD_DEV         _IO (MD_MAJOR, 1)#define START_MD                _IO (MD_MAJOR, 2)#define STOP_MD                 _IO (MD_MAJOR, 3)	if (OLD_MDTOOLS) {	    pers = param->personality << MD_PERSONALITY_SHIFT;	    if ((param->personality == LINEAR || param->personality == RAID0)		&& param->chunk_size)		    pers |= s2f(param->chunk_size);	    rc = ioctl (fd, START_MD, (unsigned long)pers);	    return 0;	}    if ((rc = ioctl (fd, RUN_ARRAY, (unsigned long)param))) {	    save_errno=errno;	    switch (save_errno) {	      case EBUSY:		fprintf(stderr,"%s: already running\n",dev);		break;		/* fall through */	      default:		perror (dev);	    }	    errno=save_errno;	    return 1;    }    return 0;}static int do_mdstart (int fd, char *dev, dev_t rdev) {    int rc;    if ((rc = ioctl (fd, START_ARRAY, (unsigned long)rdev))) {	    save_errno=errno;	    switch (save_errno) {	      case EEXIST:	      case EBUSY:		fprintf(stderr,"%s: already running\n",dev);		break;		/* fall through */	      default:		perror (dev);	    }	    errno=save_errno;	    return 1;    }    return 0;}int do_raidstart_rw (int fd, char *dev){    int func = RESTART_ARRAY_RW;    int rc;    struct stat s;    fstat (fd, &s);        if (major (s.st_rdev) != MD_MAJOR) {	fprintf(stderr,"%s: not an MD device!\n",dev);        exit(EXIT_FAILURE);    }    if (OLD_MDTOOLS)        exit(EXIT_FAILURE);    if ((rc = ioctl (fd, func, 0UL))) {	    save_errno = errno;	    switch (save_errno) {	      case EBUSY:		fprintf(stderr,"%s: device already read-write!\n",dev);		break;	      case ENXIO:		fprintf(stderr,"%s: not running!\n",dev);		break;	      case EINVAL:		fprintf(stderr,"%s: old kernel?\n",dev);		/* fall through */	      default:		perror (dev);	    }	    errno = save_errno;	    return 1;    }    return 0;}int do_raidstop (int fd, char *dev, int ro){    int func = ro ? STOP_ARRAY_RO : STOP_ARRAY;    int rc;    struct stat s;    fstat (fd, &s);        if (major (s.st_rdev) != MD_MAJOR) {	fprintf(stderr,"%s: not an MD device!\n",dev);        exit(EXIT_FAILURE);    }    if (OLD_MDTOOLS)	if (func == STOP_ARRAY) {		rc = ioctl(fd, STOP_MD, 0UL);    		return 0;	}    if ((rc = ioctl (fd, func, 0UL))) {	    save_errno = errno;	    switch (save_errno) {	      case ENODEV:	      case ENXIO:		fprintf(stderr,"%s: device already stopped\n",dev);		break;	      case EINVAL:		if (func == STOP_ARRAY_RO) {			fprintf(stderr,"%s: old kernel!\n",dev);			break;		}		/* fall through */	      default:		perror (dev);	    }	    errno = save_errno;	    return 1;    }    return 0;}int do_raidhotadd (int md_fd, char * disk_name, char * md_name){    int rc;    struct stat s;    if (OLD_MDTOOLS) {	fprintf(stderr,"kernel does not support hot-add!\n");        exit(EXIT_FAILURE);    }	    fstat (md_fd, &s);    if (major (s.st_rdev) != MD_MAJOR) {	fprintf(stderr,"%s: not an MD device!\n",md_name);        exit(EXIT_FAILURE);    }    stat (disk_name, &s);    rc = ioctl (md_fd, HOT_ADD_DISK, (unsigned long)s.st_rdev);    if (rc) {	    save_errno = errno;  	    fprintf(stderr,"%s: can not hot-add disk: ", md_name);	    switch (save_errno) {	      case ENXIO:		fprintf(stderr,"disk does not exist!\n");		break;	      case EBUSY:		fprintf(stderr,"disk busy!\n");		break;	      case ENOSPC:		fprintf(stderr,"too small disk!\n");		break;	      case ENODEV:		fprintf(stderr,"array not running!\n");		break;	      case EINVAL:		fprintf(stderr,"invalid argument.\n");		break;	      default:		perror (md_name);	    }	    errno = save_errno;	    return 1;    }    return 0;}int do_raidhotgenerateerror (int md_fd, char * disk_name, char * md_name){    int rc;    struct stat s;    if (OLD_MDTOOLS) {	fprintf(stderr,"kernel does not support hot-generate-error!\n");        exit(EXIT_FAILURE);    }	    fstat (md_fd, &s);    if (major (s.st_rdev) != MD_MAJOR) {	fprintf(stderr,"%s: not an MD device!\n",md_name);        exit(EXIT_FAILURE);    }    stat (disk_name, &s);    rc = ioctl (md_fd, HOT_GENERATE_ERROR, (unsigned long)s.st_rdev);    if (rc) {	    save_errno = errno;  	    fprintf(stderr,"%s: can not hot-generate-error disk: ", md_name);	    switch (save_errno) {	      case ENXIO:		fprintf(stderr,"disk not in array!\n");		break;	      case EBUSY:		fprintf(stderr,"disk busy!\n");		break;	      case ENOSPC:		fprintf(stderr,"too small disk!\n");		break;	      case ENODEV:		fprintf(stderr,"array not running!\n");		break;	      case EINVAL:		fprintf(stderr,"invalid argument.\n");		break;	      default:		perror (md_name);	    }	    errno = save_errno;	    return 1;    }    return 0;}int do_raidhotremove (int md_fd, char * disk_name, char * md_name){    int rc;    struct stat s;    if (OLD_MDTOOLS) {	fprintf(stderr,"kernel does not support hot-remove!\n");        exit(EXIT_FAILURE);    }	    fstat (md_fd, &s);    if (major (s.st_rdev) != MD_MAJOR) {	fprintf(stderr,"%s: not an MD device!\n",md_name);        exit(EXIT_FAILURE);    }    stat (disk_name, &s);    rc = ioctl (md_fd, HOT_REMOVE_DISK, (unsigned long)s.st_rdev);    if (rc) {	    save_errno = errno;  	    fprintf(stderr,"%s: can not hot-remove disk: ", md_name);	    switch (save_errno) {	      case ENXIO:		fprintf(stderr,"disk not in array!\n");		break;	      case EBUSY:		fprintf(stderr,"disk busy!\n");		break;	      case ENOSPC:		fprintf(stderr,"too small disk!\n");		break;	      case ENODEV:		fprintf(stderr,"array not running!\n");		break;	      case EINVAL:		fprintf(stderr,"invalid argument.\n");		break;	      default:		perror (md_name);	    }	    errno = save_errno;	    return 1;    }    return 0;}int do_raidsetfaulty (int md_fd, char * disk_name, char * md_name){	int rc;	struct stat s;	if (OLD_MDTOOLS) {		fprintf(stderr,"kernel does not support hot-add!\n");		exit(EXIT_FAILURE);	}	fstat (md_fd, &s);	if (major (s.st_rdev) != MD_MAJOR) {		fprintf(stderr,"%s: not an MD device!\n",md_name);		exit(EXIT_FAILURE);	}	stat (disk_name, &s);	rc = ioctl (md_fd, SET_DISK_FAULTY, (unsigned long)s.st_rdev);	if (rc) {		save_errno = errno;		fprintf(stderr,"%s: can not set disk faulty: ", md_name);		switch (save_errno) {			case ENXIO:				fprintf(stderr,"disk does not exist!\n");				break;			case EBUSY:				fprintf(stderr,"disk busy!\n");				break;			case ENOSPC:				fprintf(stderr,"too small disk!\n");				break;			case ENODEV:				fprintf(stderr,"array not running!\n");				break;			case EINVAL:				fprintf(stderr,"invalid argument.\n");				break;			default:				perror (md_name);		}		errno = save_errno;		return 1;	}	return 0;}int handleOneConfig(enum raidFunc func, md_cfg_entry_t * cfg) {    int rc = 0;    int fd = -1;    mdu_param_t param;    switch (func) {      case raidstart:      {	struct stat s;	stat (cfg->device_name[0], &s);	fd = open_or_die(cfg->md_name);	if (do_mdstart (fd, cfg->md_name, s.st_rdev)) rc++;	break;      }      case raidrun:	memset(&param,0,sizeof(param));	switch (cfg->array.param.level) {	  case -4: param.personality = MULTIPATH; break;	  case -3: param.personality = HSM; break;	  case -2: param.personality = TRANSLUCENT; break;	  case -1: param.personality = LINEAR; break;	  case 0:  param.personality = RAID0; break;	  case 1:  param.personality = RAID1; break;	  case 4:	  case 5:  param.personality = RAID5; break;	  default: exit (EXIT_FAILURE);	}	param.chunk_size = cfg->array.param.chunk_size;	fd = open_or_die(cfg->md_name);	if (do_mdrun (fd, cfg->md_name, &param)) rc++;	break;      case raidstop:	return 1;      case raidstop_ro:	return 1;      case raidhotremove:	return 1;      case raidhotadd:	return 1;      case raidhotgenerateerror:	return 1;      case raidsetfaulty:        return 1;    }    close (fd);    return rc;}int prepare_raidlib (void){    if (getMdVersion(&md_ver))        return EXIT_FAILURE;    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区在线播放| 亚洲一区二区在线观看视频| 欧洲日韩一区二区三区| 91老师国产黑色丝袜在线| 成人av免费在线观看| 国产.精品.日韩.另类.中文.在线.播放| 蜜臀av国产精品久久久久| 青椒成人免费视频| 久久精品久久综合| 国产精一区二区三区| 国产91精品一区二区麻豆亚洲| 久久99国产精品久久99果冻传媒| 日本午夜精品视频在线观看 | 美腿丝袜在线亚洲一区| 免费观看成人鲁鲁鲁鲁鲁视频| 美女性感视频久久| 国产91丝袜在线18| 在线观看一区二区视频| 欧美一区二区三区视频在线| 久久毛片高清国产| 国产精品久久久久久久久免费丝袜 | 国产一区二区精品久久99| 国产一区亚洲一区| 99精品久久只有精品| 欧美性猛片xxxx免费看久爱| 日韩欧美一二三区| 18成人在线观看| 日韩一区精品字幕| 成人天堂资源www在线| 欧美日韩一区二区三区在线| 久久综合网色—综合色88| 欧美国产激情一区二区三区蜜月 | 欧美电影免费观看高清完整版在| 国产人久久人人人人爽| 亚洲一区二区在线观看视频| 国产中文一区二区三区| 欧美视频一区在线观看| 精品国产免费人成在线观看| 成人免费小视频| 精品在线播放午夜| 91污在线观看| 久久久噜噜噜久噜久久综合| 亚洲五码中文字幕| 国产精品一区二区果冻传媒| 欧美亚一区二区| 国产区在线观看成人精品| 日韩精品国产精品| 色哟哟一区二区三区| 久久麻豆一区二区| 日本三级韩国三级欧美三级| 91在线精品一区二区| 久久青草欧美一区二区三区| 视频一区二区三区在线| 91亚洲资源网| 中文字幕免费一区| 精品综合久久久久久8888| 欧美在线视频你懂得| 国产精品免费丝袜| 韩国成人福利片在线播放| 91精品国产品国语在线不卡 | 欧美日韩国产天堂| 亚洲欧美经典视频| 国产91精品欧美| 精品国产一区久久| 青青草国产成人99久久| 欧美色精品在线视频| 亚洲精品久久嫩草网站秘色| 国产不卡视频一区| 国产区在线观看成人精品| 久久国产欧美日韩精品| 制服丝袜亚洲精品中文字幕| 亚洲自拍偷拍麻豆| 欧美性感一类影片在线播放| 亚洲成a人v欧美综合天堂下载| 99久久综合精品| 中文字幕中文字幕一区| 成人妖精视频yjsp地址| 欧美国产一区在线| 国产·精品毛片| 国产精品看片你懂得| 国产成人av网站| 国产目拍亚洲精品99久久精品| 国产99久久久精品| 国产精品毛片久久久久久久| 91蝌蚪国产九色| 一区二区三区在线视频观看58| 在线免费观看不卡av| 亚洲成在人线免费| 欧美一区二区国产| 国产激情一区二区三区| 亚洲欧洲国产日本综合| 一本色道综合亚洲| 日韩—二三区免费观看av| 精品久久一二三区| 国产主播一区二区三区| 亚洲欧美自拍偷拍色图| 91国在线观看| 日本sm残虐另类| 久久久久9999亚洲精品| 99国产精品一区| 视频一区中文字幕国产| 国产亚洲精品7777| 色悠悠久久综合| 美女视频黄a大片欧美| 国产日产精品一区| 欧美日本国产一区| 国产成人av影院| 亚洲高清视频在线| 国产日韩欧美精品电影三级在线 | 丝袜亚洲精品中文字幕一区| 欧美精品一区二区三区高清aⅴ| 99久久精品国产麻豆演员表| 日本欧美一区二区三区乱码| 国产精品久久久久一区二区三区共| 欧美日韩一卡二卡三卡| 国产美女视频91| 亚洲一区在线免费观看| 国产欧美日韩卡一| 91精品国产综合久久精品麻豆 | 欧美国产亚洲另类动漫| 欧美日韩一区二区欧美激情| 国产成人精品午夜视频免费| 亚洲国产视频网站| 国产精品美女久久久久高潮| 91精品国产麻豆国产自产在线| 99视频一区二区三区| 国产综合色产在线精品| 三级一区在线视频先锋| 中文字幕一区二区三区精华液| 日韩欧美一级二级三级久久久| 一本到高清视频免费精品| 国产一区二区不卡| 精品亚洲免费视频| 亚洲午夜免费福利视频| 国产精品久久久久婷婷| 久久色成人在线| 精品国产髙清在线看国产毛片| 欧美色图一区二区三区| 色猫猫国产区一区二在线视频| 高清av一区二区| 国产成人av电影在线播放| 国产一区二区久久| 国产主播一区二区三区| 激情文学综合插| 九色|91porny| 美美哒免费高清在线观看视频一区二区| 亚洲精品成人a在线观看| 国产精品伦一区| 国产精品久久久久一区| 成人免费一区二区三区视频 | 欧美精品一区二区不卡| 精品久久人人做人人爰| 久久久久久久久久久久久久久99 | 亚洲综合成人在线| 亚洲一区二区视频| 亚洲小说欧美激情另类| 亚洲午夜在线电影| 偷偷要91色婷婷| 日韩激情av在线| 国内精品国产三级国产a久久| 国产一区二区视频在线| 国产一区91精品张津瑜| 国产成人午夜高潮毛片| 成人精品一区二区三区中文字幕| aa级大片欧美| 欧洲一区在线电影| 欧美狂野另类xxxxoooo| 日韩欧美三级在线| 国产女人18水真多18精品一级做 | 亚洲日本乱码在线观看| 亚洲欧美激情在线| 亚洲1区2区3区视频| 久久精品国产精品青草| 国产精品一区久久久久| 91麻豆精品秘密| 欧美一区二区视频网站| 久久综合色鬼综合色| 18成人在线视频| 日产欧产美韩系列久久99| 国产 日韩 欧美大片| 91久久免费观看| 精品免费视频一区二区| 亚洲欧洲国产日韩| 欧美aaa在线| youjizz久久| 日韩欧美的一区| 中文字幕亚洲区| 免费看欧美女人艹b| 丁香亚洲综合激情啪啪综合| 欧美视频完全免费看| 国产午夜精品在线观看| 亚洲福利视频一区二区| 懂色av一区二区在线播放| 欧美性色黄大片| 国产日韩高清在线| 日本不卡高清视频| 91久久人澡人人添人人爽欧美| 久久精品人人做| 日欧美一区二区| 91麻豆免费观看|