⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amadmin.c

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 C
📖 第 1 页 / 共 4 页
字号:
	    tp->reuse = 1;	    g_printf(_("%s: marking tape %s as reusable.\n"),		   get_pname(), argv[count]);	} else {	    g_fprintf(stderr, _("%s: tape %s already reusable.\n"),		    get_pname(), argv[count]);	}    }    if(write_tapelist(conf_tapelist)) {	error(_("could not write tapelist \"%s\""), conf_tapelist);	/*NOTREACHED*/    }}voidnoreuse(    int		argc,    char **	argv){    tape_t *tp;    int count;    if(argc < 4) {	g_fprintf(stderr,_("%s: expecting \"no-reuse <tapelabel> ...\"\n"),		get_pname());	usage();    }    for(count=3; count< argc; count++) {	tp = lookup_tapelabel(argv[count]);	if ( tp == NULL) {	    g_fprintf(stderr, _("no-reuse: tape label %s not found in tapelist.\n"),		argv[count]);	    continue;	}	if( tp->reuse == 1 ) {	    tp->reuse = 0;	    g_printf(_("%s: marking tape %s as not reusable.\n"),		   get_pname(), argv[count]);	} else {	    g_fprintf(stderr, _("%s: tape %s already not reusable.\n"),		    get_pname(), argv[count]);	}    }    if(write_tapelist(conf_tapelist)) {	error(_("could not write tapelist \"%s\""), conf_tapelist);	/*NOTREACHED*/    }}/* ----------------------------------------------- */static int deleted;voiddelete_one(    disk_t *	dp){    char *hostname = dp->host->hostname;    char *diskname = dp->name;    info_t info;    if(get_info(hostname, diskname, &info)) {	g_printf(_("%s: %s:%s NOT currently in database.\n"),	       get_pname(), hostname, diskname);	return;    }    deleted++;    if(del_info(hostname, diskname)) {	error(_("couldn't delete %s:%s from database: %s"),	      hostname, diskname, strerror(errno));        /*NOTREACHED*/    } else {	g_printf(_("%s: %s:%s deleted from curinfo database.\n"),	       get_pname(), hostname, diskname);    }}voiddelete(    int		argc,    char **	argv){    deleted = 0;    diskloop(argc, argv, "delete", delete_one);   if(deleted)	g_printf(	 _("%s: NOTE: you'll have to remove these from the disklist yourself.\n"),	 get_pname());}/* ----------------------------------------------- */voidinfo_one(    disk_t *	dp){    info_t info;    int lev;    struct tm *tm;    stats_t *sp;    get_info(dp->host->hostname, dp->name, &info);    g_printf(_("\nCurrent info for %s %s:\n"), dp->host->hostname, dp->name);    if (ISSET(info.command, FORCE_FULL))	g_printf(_("  (Forcing to level 0 dump at next run)\n"));    if (ISSET(info.command, FORCE_BUMP))	g_printf(_("  (Forcing bump at next run)\n"));    if (ISSET(info.command, FORCE_NO_BUMP))	g_printf(_("  (Forcing no-bump at next run)\n"));    g_printf(_("  Stats: dump rates (kps), Full:  %5.1lf, %5.1lf, %5.1lf\n"),	   info.full.rate[0], info.full.rate[1], info.full.rate[2]);    g_printf(_("                    Incremental:  %5.1lf, %5.1lf, %5.1lf\n"),	   info.incr.rate[0], info.incr.rate[1], info.incr.rate[2]);    g_printf(_("          compressed size, Full: %5.1lf%%,%5.1lf%%,%5.1lf%%\n"),	   info.full.comp[0]*100, info.full.comp[1]*100, info.full.comp[2]*100);    g_printf(_("                    Incremental: %5.1lf%%,%5.1lf%%,%5.1lf%%\n"),	   info.incr.comp[0]*100, info.incr.comp[1]*100, info.incr.comp[2]*100);    g_printf(_("  Dumps: lev datestmp  tape             file   origK   compK secs\n"));    for(lev = 0, sp = &info.inf[0]; lev < 9; lev++, sp++) {	if(sp->date < (time_t)0 && sp->label[0] == '\0') continue;	tm = localtime(&sp->date);	if (tm) {	    g_printf(_("          %d  %04d%02d%02d  %-15s  %lld %lld %lld %jd\n"),		   lev, tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,		   sp->label,		   (long long)sp->filenum,		   (long long)sp->size,		   (long long)sp->csize,		   (intmax_t)sp->secs);	} else {	    g_printf(_("          %d  BAD-DATE  %-15s  %lld %lld %lld %jd\n"),		   lev,		   sp->label,		   (long long)sp->filenum,		   (long long)sp->size,		   (long long)sp->csize,		   (intmax_t)sp->secs);	}    }}voidinfo(    int		argc,    char **	argv){    disk_t *dp;    if(argc >= 4)	diskloop(argc, argv, "info", info_one);    else	for(dp = diskq.head; dp != NULL; dp = dp->next)	    info_one(dp);}/* ----------------------------------------------- */voiddue_one(    disk_t *	dp){    am_host_t *hp;    int days;    info_t info;    hp = dp->host;    if(get_info(hp->hostname, dp->name, &info)) {	g_printf(_("new disk %s:%s ignored.\n"), hp->hostname, dp->name);    }    else {	days = next_level0(dp, &info);	if(days < 0) {	    g_printf(_("Overdue %2d day%s %s:%s\n"),		   -days, (-days == 1) ? ": " : "s:",		   hp->hostname, dp->name);	}	else if(days == 0) {	    g_printf(_("Due today: %s:%s\n"), hp->hostname, dp->name);	}	else {	    g_printf(_("Due in %2d day%s %s:%s\n"), days,		   (days == 1) ? ": " : "s:",		   hp->hostname, dp->name);	}    }}voiddue(    int		argc,    char **	argv){    disk_t *dp;    time(&today);    if(argc >= 4)	diskloop(argc, argv, "due", due_one);    else	for(dp = diskq.head; dp != NULL; dp = dp->next)	    due_one(dp);}/* ----------------------------------------------- */voidtape(    int		argc,    char **	argv){    tape_t *tp, *lasttp;    int runtapes, i, j;    int nb_days = 1;    if(argc > 4 && strcmp(argv[3],"--days") == 0) {	nb_days = atoi(argv[4]);	if(nb_days < 1) {	    g_printf(_("days must be an integer bigger than 0\n"));	    return;	}	if (nb_days > 10000)	    nb_days = 10000;    }    runtapes = getconf_int(CNF_RUNTAPES);    tp = lookup_last_reusable_tape(0);    for ( j=0 ; j < nb_days ; j++ ) {	for ( i=0 ; i < runtapes ; i++ ) {	    if(i==0)		g_printf(_("The next Amanda run should go onto "));	    else		g_printf("                                   ");	    if(tp != NULL) {		g_printf(_("tape %s or a new tape.\n"), tp->label);	    } else {		if (runtapes - i == 1)		    g_printf(_("1 new tape.\n"));		else		    g_printf(_("%d new tapes.\n"), runtapes - i);		i = runtapes;	    }		    tp = lookup_last_reusable_tape(i + 1);	}    }    lasttp = lookup_tapepos(lookup_nb_tape());    i = runtapes;    if(lasttp && i > 0 && strcmp(lasttp->datestamp,"0") == 0) {	int c = 0;	while(lasttp && i > 0 && strcmp(lasttp->datestamp,"0") == 0) {	    c++;	    lasttp = lasttp->prev;	    i--;	}	lasttp = lookup_tapepos(lookup_nb_tape());	i = runtapes;	if(c == 1) {	    g_printf(_("The next new tape already labelled is: %s.\n"),		   lasttp->label);	}	else {	    g_printf(_("The next %d new tapes already labelled are: %s"), c,		   lasttp->label);	    lasttp = lasttp->prev;	    c--;	    while(lasttp && c > 0 && strcmp(lasttp->datestamp,"0") == 0) {		g_printf(", %s", lasttp->label);		lasttp = lasttp->prev;		c--;	    }	    g_printf(".\n");	}    }}/* ----------------------------------------------- */voidbalance(    int		argc,    char **	argv){    disk_t *dp;    struct balance_stats {	int disks;	off_t origsize, outsize;    } *sp;    int conf_runspercycle, conf_dumpcycle;    int seq, runs_per_cycle, overdue, max_overdue;    int later, total, balance, distinct;    double fseq, disk_dumpcycle;    info_t info;    off_t total_balanced, balanced;    int empty_day;    time(&today);    conf_dumpcycle = getconf_int(CNF_DUMPCYCLE);    conf_runspercycle = getconf_int(CNF_RUNSPERCYCLE);    later = conf_dumpcycle;    overdue = 0;    max_overdue = 0;    if(argc > 4 && strcmp(argv[3],"--days") == 0) {	later = atoi(argv[4]);	if(later < 0) later = conf_dumpcycle;    }    if(later > 10000) later = 10000;    if(conf_runspercycle == 0) {	runs_per_cycle = conf_dumpcycle;    } else if(conf_runspercycle == -1 ) {	runs_per_cycle = guess_runs_from_tapelist();    } else	runs_per_cycle = conf_runspercycle;    if (runs_per_cycle <= 0) {	runs_per_cycle = 1;    }    total = later + 1;    balance = later + 2;    distinct = later + 3;    sp = (struct balance_stats *)	alloc(SIZEOF(struct balance_stats) * (distinct+1));    for(seq=0; seq <= distinct; seq++) {	sp[seq].disks = 0;	sp[seq].origsize = sp[seq].outsize = (off_t)0;    }    for(dp = diskq.head; dp != NULL; dp = dp->next) {	if(get_info(dp->host->hostname, dp->name, &info)) {	    g_printf(_("new disk %s:%s ignored.\n"), dp->host->hostname, dp->name);	    continue;	}	if (dp->strategy == DS_NOFULL) {	    continue;	}	sp[distinct].disks++;	sp[distinct].origsize += info.inf[0].size/(off_t)unitdivisor;	sp[distinct].outsize += info.inf[0].csize/(off_t)unitdivisor;	sp[balance].disks++;	if(dp->dumpcycle == 0) {	    sp[balance].origsize += (info.inf[0].size/(off_t)unitdivisor) * (off_t)runs_per_cycle;	    sp[balance].outsize += (info.inf[0].csize/(off_t)unitdivisor) * (off_t)runs_per_cycle;	}	else {	    sp[balance].origsize += (info.inf[0].size/(off_t)unitdivisor) *				    (off_t)(conf_dumpcycle / dp->dumpcycle);	    sp[balance].outsize += (info.inf[0].csize/(off_t)unitdivisor) *				   (off_t)(conf_dumpcycle / dp->dumpcycle);	}	disk_dumpcycle = (double)dp->dumpcycle;	if(dp->dumpcycle <= 0)	    disk_dumpcycle = ((double)conf_dumpcycle) / ((double)runs_per_cycle);	seq = next_level0(dp, &info);	fseq = seq + 0.0001;	do {	    if(seq < 0) {		overdue++;		if (-seq > max_overdue)		    max_overdue = -seq;		seq = 0;		fseq = seq + 0.0001;	    }	    if(seq > later) {	       	seq = later;	    }	    	    sp[seq].disks++;	    sp[seq].origsize += info.inf[0].size/(off_t)unitdivisor;	    sp[seq].outsize += info.inf[0].csize/(off_t)unitdivisor;	    if(seq < later) {		sp[total].disks++;		sp[total].origsize += info.inf[0].size/(off_t)unitdivisor;		sp[total].outsize += info.inf[0].csize/(off_t)unitdivisor;	    }	    	    /* See, if there's another run in this dumpcycle */	    fseq += disk_dumpcycle;	    seq = (int)fseq;	} while (seq < later);    }    if(sp[total].outsize == (off_t)0 && sp[later].outsize == (off_t)0) {	g_printf(_("\nNo data to report on yet.\n"));	amfree(sp);	return;    }    balanced = sp[balance].outsize / (off_t)runs_per_cycle;    if(conf_dumpcycle == later) {	total_balanced = sp[total].outsize / (off_t)runs_per_cycle;    }    else {	total_balanced = (((sp[total].outsize/(off_t)1024) * (off_t)conf_dumpcycle)			    / (off_t)(runs_per_cycle * later)) * (off_t)1024;    }    empty_day = 0;    g_printf(_("\n due-date  #fs    orig %cB     out %cB   balance\n"),	   displayunit[0], displayunit[0]);    g_printf("----------------------------------------------\n");    for(seq = 0; seq < later; seq++) {	if(sp[seq].disks == 0 &&	   ((seq > 0 && sp[seq-1].disks == 0) ||	    ((seq < later-1) && sp[seq+1].disks == 0))) {	    empty_day++;	}	else {	    if(empty_day > 0) {		g_printf("\n");		empty_day = 0;	    }	    g_printf(_("%-9.9s  %3d %10lld %10lld "),		   seqdatestr(seq), sp[seq].disks,		   (long long)sp[seq].origsize,		   (long long)sp[seq].outsize);	    if(!sp[seq].outsize) g_printf("     --- \n");	    else g_printf(_("%+8.1lf%%\n"),			(((double)sp[seq].outsize - (double)balanced) * 100.0 /			(double)balanced));	}    }    if(sp[later].disks != 0) {	g_printf(_("later      %3d %10lld %10lld "),	       sp[later].disks,	       (long long)sp[later].origsize,	       (long long)sp[later].outsize);	if(!sp[later].outsize) g_printf("     --- \n");	else g_printf(_("%+8.1lf%%\n"),		    (((double)sp[later].outsize - (double)balanced) * 100.0 /		    (double)balanced));    }    g_printf("----------------------------------------------\n");    g_printf(_("TOTAL      %3d %10lld %10lld %9lld\n"),	   sp[total].disks,	   (long long)sp[total].origsize,	   (long long)sp[total].outsize,	   (long long)total_balanced);    if (sp[balance].origsize != sp[total].origsize ||        sp[balance].outsize != sp[total].outsize ||	balanced != total_balanced) {	g_printf(_("BALANCED       %10lld %10lld %9lld\n"),	       (long long)sp[balance].origsize,	       (long long)sp[balance].outsize,	       (long long)balanced);    }    if (sp[distinct].disks != sp[total].disks) {	g_printf(_("DISTINCT   %3d %10lld %10lld\n"),	       sp[distinct].disks,	       (long long)sp[distinct].origsize,	       (long long)sp[distinct].outsize);    }    g_printf(plural(_("  (estimated %d run per dumpcycle)\n"),		  _("  (estimated %d runs per dumpcycle)\n"),		  runs_per_cycle),	   runs_per_cycle);    if (overdue) {	g_printf(plural(_(" (%d filesystem overdue."),		      _(" (%d filesystems overdue."), overdue),	       overdue);	g_printf(plural(_(" The most being overdue %d day.)\n"),	              _(" The most being overdue %d days.)\n"), max_overdue),	       max_overdue);    }    amfree(sp);}/* ----------------------------------------------- */voidfind(    int		argc,    char **	argv){    int start_argc;    char *sort_order = NULL;    find_result_t *output_find;    char *errstr;    if(argc < 3) {	g_fprintf(stderr,		_("%s: expecting \"find [--sort <hkdlpbf>] [hostname [<disk>]]*\"\n"),		get_pname());	usage();    }    sort_order = newstralloc(sort_order, DEFAULT_SORT_ORDER);    if(argc > 4 && strcmp(argv[3],"--sort") == 0) {	size_t i, valid_sort=1;	for(i = strlen(argv[4]); i > 0; i--) {	    switch (argv[4][i - 1]) {	    case 'h':	    case 'H':	    case 'k':	    case 'K':	    case 'd':	    case 'D':	    case 'f':	    case 'F':	    case 'l':	    case 'L':	    case 'p':	    case 'P':	    case 'b':	    case 'B':		    break;	    default: valid_sort=0;	    }	}	if(valid_sort) {	    sort_order = newstralloc(sort_order, argv[4]);	} else {	    g_printf(_("Invalid sort order: %s\n"), argv[4]);	    g_printf(_("Use default sort order: %s\n"), sort_order);	}	start_argc=6;    } else {	start_argc=4;    }    errstr = match_disklist(&diskq, argc-(start_argc-1), argv+(start_argc-1));    if (errstr) {	g_printf("%s", errstr);	amfree(errstr);    }    output_find = find_dump(&diskq);    if(argc-(start_argc-1) > 0) {	free_find_result(&output_find);	errstr = match_disklist(&diskq, argc-(start_argc-1),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -