2002-01-15 21:17:57 +03:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
* Copyright ( C ) 2004 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
* of the GNU General Public License v .2 .
*
* You should have received a copy of the GNU General Public License
* 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
{
2003-01-18 00:02:04 +03:00
char * vg_name ;
2002-01-15 21:17:57 +03:00
if ( argc ! = 1 ) {
log_err ( " Please specify a *single* volume group to restore. " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
vg_name = argv [ 0 ] ;
if ( ! strncmp ( vg_name , cmd - > dev_dir , strlen ( cmd - > dev_dir ) ) )
vg_name + = strlen ( cmd - > dev_dir ) ;
2003-02-03 23:09:58 +03:00
if ( ! validate_name ( vg_name ) ) {
2003-09-15 19:01:00 +04:00
log_error ( " Volume group name \" %s \" is invalid " , vg_name ) ;
2003-01-18 00:02:04 +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 ) ) {
2003-01-18 00:02:04 +03:00
if ( ! archive_display ( cmd , vg_name ) )
2002-02-11 14:43:17 +03:00
return ECMD_FAILED ;
2003-10-22 02:06:07 +04:00
return ECMD_PROCESSED ;
2002-02-11 14:43:17 +03:00
}
2002-11-18 17:04:08 +03:00
if ( ! lock_vol ( cmd , ORPHAN , LCK_VG_WRITE ) ) {
log_error ( " Unable to lock orphans " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
if ( ! lock_vol ( cmd , vg_name , LCK_VG_WRITE | LCK_NONBLOCK ) ) {
log_error ( " Unable to lock volume group %s " , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
return ECMD_FAILED ;
}
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 ) ) ) {
unlock_vg ( cmd , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
2002-01-15 21:17:57 +03:00
log_err ( " Restore failed. " ) ;
return ECMD_FAILED ;
}
2003-01-18 00:02:04 +03:00
log_print ( " Restored volume group %s " , vg_name ) ;
unlock_vg ( cmd , vg_name ) ;
2002-11-18 17:04:08 +03:00
unlock_vg ( cmd , ORPHAN ) ;
2003-10-22 02:06:07 +04:00
return ECMD_PROCESSED ;
2002-01-15 21:17:57 +03:00
}