2002-01-15 21:17:57 +03:00
/*
2008-01-30 17:00:02 +03:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2009-05-13 17:02:52 +04:00
* Copyright ( C ) 2004 - 2009 Red Hat , Inc . All rights reserved .
2002-01-15 21:17:57 +03:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2004-03-30 23:35:44 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2002-01-15 21:17:57 +03:00
*/
# include "tools.h"
2002-02-11 23:50:53 +03:00
int vgcfgrestore ( struct cmd_context * cmd , int argc , char * * argv )
2002-01-15 21:17:57 +03:00
{
2011-02-18 17:47:28 +03:00
const char * vg_name = NULL ;
2003-01-18 00:02:04 +03:00
2007-06-09 02:38:48 +04:00
if ( argc = = 1 ) {
vg_name = skip_dev_dir ( cmd , argv [ 0 ] , NULL ) ;
if ( ! validate_name ( vg_name ) ) {
log_error ( " Volume group name \" %s \" is invalid " , vg_name ) ;
return ECMD_FAILED ;
}
} else if ( ! ( arg_count ( cmd , list_ARG ) & & arg_count ( cmd , file_ARG ) ) ) {
2009-07-16 00:02:46 +04:00
log_error ( " Please specify a *single* volume group to restore. " ) ;
2002-01-15 21:17:57 +03:00
return ECMD_FAILED ;
}
2002-02-11 14:43:17 +03:00
/*
* FIXME : overloading the - l arg for now to display a
* list of archive files for a particular vg
*/
2002-02-12 00:00:35 +03:00
if ( arg_count ( cmd , list_ARG ) ) {
2007-06-09 02:38:48 +04:00
if ( ! ( arg_count ( cmd , file_ARG ) ?
2009-09-15 02:47:49 +04:00
archive_display_file ( cmd ,
arg_str_value ( cmd , file_ARG , " " ) ) :
archive_display ( cmd , vg_name ) ) ) {
stack ;
2002-02-11 14:43:17 +03:00
return ECMD_FAILED ;
2009-09-15 02:47:49 +04:00
}
2003-10-22 02:06:07 +04:00
return ECMD_PROCESSED ;
2002-02-11 14:43:17 +03:00
}
2012-02-23 17:11:07 +04:00
lvmcache_seed_infos_from_lvmetad ( cmd ) ;
2009-05-13 17:02:52 +04:00
if ( ! lock_vol ( cmd , vg_name , LCK_VG_WRITE ) ) {
2003-01-18 00:02:04 +03:00
log_error ( " Unable to lock volume group %s " , vg_name ) ;
2002-11-18 17:04:08 +03:00
return ECMD_FAILED ;
}
2009-07-11 00:10:18 +04:00
if ( ! lock_vol ( cmd , VG_ORPHANS , LCK_VG_WRITE ) ) {
log_error ( " Unable to lock orphans " ) ;
2009-08-13 21:16:38 +04:00
unlock_vg ( cmd , vg_name ) ;
2009-07-11 00:10:18 +04:00
return ECMD_FAILED ;
}
2009-10-16 21:41:49 +04:00
cmd - > handles_unknown_segments = 1 ;
2002-02-12 00:00:35 +03:00
if ( ! ( arg_count ( cmd , file_ARG ) ?
2003-01-18 00:02:04 +03:00
backup_restore_from_file ( cmd , vg_name ,
2002-02-12 00:00:35 +03:00
arg_str_value ( cmd , file_ARG , " " ) ) :
2003-01-18 00:02:04 +03:00
backup_restore ( cmd , vg_name ) ) ) {
2007-11-02 23:40:05 +03:00
unlock_vg ( cmd , VG_ORPHANS ) ;
2009-08-13 21:16:38 +04:00
unlock_vg ( cmd , vg_name ) ;
2009-07-16 00:02:46 +04:00
log_error ( " Restore failed. " ) ;
2002-01-15 21:17:57 +03:00
return ECMD_FAILED ;
}
config: add silent mode
Accept -q as the short form of --quiet.
Suppress non-essential standard output if -q is given twice.
Treat log/silent in lvm.conf as equivalent to -qq.
Review all log_print messages and change some to
log_print_unless_silent.
When silent, the following commands still produce output:
dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck, pvdisplay,
pvs, version, vgcfgrestore -l, vgdisplay, vgs.
[Needs checking.]
Non-essential messages are shifted from log level 4 to log level 5
for syslog and lvm2_log_fn purposes.
2012-08-25 23:35:48 +04:00
log_print_unless_silent ( " Restored volume group %s " , vg_name ) ;
2003-01-18 00:02:04 +03:00
2007-11-02 23:40:05 +03:00
unlock_vg ( cmd , VG_ORPHANS ) ;
2009-07-11 00:10:18 +04:00
unlock_vg ( cmd , vg_name ) ;
2003-10-22 02:06:07 +04:00
return ECMD_PROCESSED ;
2002-01-15 21:17:57 +03:00
}