Changeset 576 in MondoRescue for branches/2.0.8/mondo
- Timestamp:
- May 25, 2006, 2:00:37 PM (19 years ago)
- Location:
- branches/2.0.8/mondo
- Files:
-
- 1 deleted
- 54 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2.0.8/mondo/ChangeLog
r438 r576 2 2 3 3 MONDO CHANGES 4 5 2.0.8 (2006-05-25) 6 - new build process (Bruno Cornec) 7 - Fix a bug in .spec for RPM build (%attr now unused) 8 (Bruno Cornec) 9 - Support of dm and LVM v2 (Andree Leidenfrost) 10 - New mr_strtok functionn added and used for dm support (Andree Leidenfrost) 11 - Complete doc is now a separate package. mondo still contains the 12 man pages and howto in minimal useful formats 13 (Bruno Cornec) 14 - HOWTO now contains a new chapter on unattended support for mondo 15 - Increase size (4 times) of include|exclude variables 16 - Fix a bug on -I and -E not working with multiple parameters 17 - Fix a bug in verify for NFS by swapping nfs_remote_dir and isodir when 18 assembling name for image file to verify 19 (Andree Leidenfrost) 20 - Fix mondo when restoring filenames containing blanks 21 (still a problem for filenames with ') 22 (Bruno Cornec) 23 - Fix a RPM generation bug for rh7.3 (i386-redhat-linux prefix for binaries) 24 (Bruno Cornec) 4 25 5 26 2.0.7 (2006-03-10) -
branches/2.0.8/mondo/configure.in
r519 r576 1 1 dnl Autoconfigure file for Mondo Rescue v2.0x 2 dnl Mondo by Hugo Rabson2 dnl Mondo by Mondo dev team 3 3 dnl This script by Joshua Oreman 4 4 dnl -
branches/2.0.8/mondo/distributions/gentoo/mondo.ebuild
r535 r576 1 # Copyright 1999-200 5Gentoo Foundation1 # Copyright 1999-2004 Gentoo Foundation 2 2 # Distributed under the terms of the GNU General Public License v2 3 # $Header: $ 4 3 5 # $Id$ 4 6 … … 7 9 DESCRIPTION="The premier GPL disaster recovery solution." 8 10 HOMEPAGE="http://www.mondorescue.org" 9 SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV} .tgz"11 SRC_URI="ftp://ftp.mondorecue.org/src/${PN/-rescue/}-${PV}-${PR}.tgz" 10 12 11 13 LICENSE="GPL-2" … … 27 29 >=sys-boot/syslinux-1.52" 28 30 29 S=${WORKDIR}/${PN/-rescue/}-${PV} 31 S=${WORKDIR}/${PN/-rescue/}-${PV}-${PR} 30 32 31 33 src_unpack() { … … 38 40 elibtoolize 39 41 econf || die "Configuration failed" 40 emake || die "Make failed" 41 #make VERSION=VVV CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT" 42 emake VERSION=VVV || die "Make failed" 42 43 } 43 44 44 45 src_install() { 45 #make install DESTDIR=${D} || die "make install failed"46 einstall || die "Install failed"46 make install DESTDIR=${D} || die "make install failed" 47 #einstall || die "Install failed" 47 48 exeinto /usr/share/mondo 48 49 doexe mondo/autorun … … 54 55 einfo "Or visit the website @ ${HOMEPAGE}" 55 56 echo 56 ewarn "This package is still in unstable."57 ewarn "This package is a new version after a long gap." 57 58 ewarn "Please report bugs to http://bugs.gentoo.org/" 58 59 ewarn "However, please do an advanced query to search for bugs" -
branches/2.0.8/mondo/distributions/mandriva/changelog
r424 r576 9 9 - Add -p option 10 10 11 * Tue May 03 2005 Hugo Rabson <hugorabson@msn.com> 2.04_cvs_2005050312 13 - made mondo more clever about finding its home. Avoids mondo considering14 directories like '/usr/share/doc/momdo' as its home.15 16 * Wed Aug 04 2004 Hugo Rabson <hugorabson@msn.com> 2.0317 18 - test sanity of user-specified tempdir19 - better SLES8 support20 21 * Mon Jun 28 2004 Hugo Rabson <hugorabson@msn.com> 2.0222 23 - instead of using 'dd' to erase partition table, delete existing24 partitions w/ the same call to fdisk that is used to create the25 new partitions; this should avoids locking up the partition table26 - set bootable partition in the above same call to fdisk, for27 the same reason (avoids locking up the partition table)28 - better software RAID support29 - mount ext3 partitions as ext2 when restoring - better for Debian30 - better star, ACL support31 - added ACL, xattr support for afio users32 33 * Sat Jun 26 2004 Hugo Rabson <hugorabson@msn.com> 2.0134 35 - fixed cvs for SuSE systems36 - fixed NTFS backup/restore bug relating to partimagehack37 log file overflow and NTFS v non-NTFS differentiation38 - more reliable extraction of config info from CDs, floppies39 - better support of ISO dirs at restore-time (Conor Daly)40 - fixed spec file for SuSE users41 - added ldconfig to install section42 43 * Sat Jun 19 2004 Hugo Rabson <hugorabson@msn.com> 2.0044 45 - first 2.0 release46 - updated grub-install.patched to support SuSE and Red Hat47 - call 'mt' to set block size to 32K before opening in/out tape48 - updated mondo-prep.c to create each disk's partitions all at once49 (one call per drive) instead of one call to fdisk per partition50 - when extracting cfg file and mountlist from all.tar.gz (tape copy),51 use block size of INTERNAL_TAPE_BLK_SIZE, not TAPE_BLOCK_SIZE52 - added star and rudimentary SELinux support53 - fixed lots of bugs54 - all logging now goes to /var/log/mondo-archive.log, with symlink55 to /tmp/mondo-restore.log for restore-time log-tracking56 - added grub-install.patched57 - removed embleer & other binaries58 - added '-b' to specify block size59 - added '-R' for star support60 61 * Thu Mar 25 2004 Bruno Cornec <Bruno.Cornec@hp.com> 1.7_cvs-2004032562 63 - ia64 fixes64 65 * Fri Nov 07 2003 Joshua Oreman <oremanj@get-linux.org> 1.7_cvs-2003110766 67 - fixed symbolic links for libraries68 - added support for boot/root multi floppies69 70 - added kdelibs as xmondo dependency71 - added xmondo pixmap installation72 - better find_cdrom_device(), to cope w/ multiple CD writers73 - fixed -m and -Vc flags74 - fixed NTFS support!75 - bootable CD uses native, not El Torito, support now76 - removed mondo-makefilelist77 - added 2.6 kernel support78 - if 2.6 kernel, insist that the user specify CD device79 - drop Embleer; insist on ms-sys and parted if Windows partition80 81 * Wed Nov 05 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031105.182 83 - added -devel package84 85 * Tue Nov 04 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031104.186 87 - made xmondo a second package88 - added ability to specify --without xmondo at build time89 90 * Sun Nov 02 2003 Jesse Keating <jkeating@j2solutions.net> 1.7_cvs-20031102.191 92 - Clean up, added spanish translation93 - Set prefix to be /usr94 - added/fixed Requires95 - remove CVS directories prior to building96 97 * Thu Oct 23 2003 Hugo Rabson <hugorabson@msn.com> 1.75_cvs_2003102398 99 - nothing yet100 101 * Wed Oct 22 2003 Hugo Rabson <hugorabson@msn.com> 1.75102 103 - fixed chmod/chown bug (Jens Richter)104 - ask user to confirm NFS mountpoint in Interactive Mode105 - rewritten format_everything() to make sure LVMs, RAIDs and106 regular partitions are prepped in the correct order107 - better magicdev support108 - rewritten external binary caller subroutine109 - DVD support added110 - better backup-time control gui; offer to exclude nfs if appl.111 - fixed multi-tape support112 - re-implemented -D and -J113 - fixed bug in extract_config_file_from_ramdisk() which114 affected tape+floppy users115 - updated is_incoming_block_valid() to make it116 return end-of-tape if >300 flotsam blocks117 - unmount CD-ROM before burning (necessary for RH8/9)118 - fixed some stray assert()'s119 - fixed bug in grub-MR (Christian)120 - make user remove floppy/CD before restoring interactively from tape121 - fixed bug in am_I_in_disaster_recovery_mode()122 - added code to nuke_mode() to make sure NFS123 (backup) share is mounted in Nuke Mode124 - improved tape device detection code125 - better GRUB support126 - better logging of changed bigfiles at compare-time127 - better NTFS support, thanks to partimagehack-static128 - better logging129 - rewrote tape-handling code, breaking compatibility w/ previous versions130 - fixed ISO/CD biggiefile verification bug in mondoarchive131 - fixed bug which stopped boot/compare-time changelist from popping up132 - replaced mondo-makefilelist with C code - faster, cleaner133 - tweaked GUI - better feedback134 135 * Wed May 28 2003 Anonymous <root@rohan> 1.74136 137 - misc fixes (Michael Hanscho's friend)138 - added rudimentary support for SME139 - added better label support140 - fixed biggietime atime/ctime restoration bug 73141 - fixed 'default boot loader' detection bug (Joshua Oreman)142 - use single-threaded make_afioballs_and_images() if FreeBSD143 - fixed mondoarchive -Vi multi-CD verify bug (Tom Mortell)144 - superior get_phys_size_of_drive() (Joshua Oreman)145 - fixed RAID-related bug in where_is_root_mounted()146 - ISO tweaks147 - fixed silly bug in load_filelist() which stopped148 funny German filenames from being handled properly149 - fixed various calls to popup_and_get_string()150 - fixed spec file151 - reject -E /152 - added partimagehack to the mix153 154 * Tue May 20 2003 Anonymous <root@rohan> 1.73155 156 - mark devices as bootable _after_ unmounting them157 - resolve boot device (-f) if softlink158 - post_param_configuration() --- store iso-dev and isodir159 - added post-nuke-sample.tgz to package160 - Nuke Mode now checks mountlist against hardware; offer user161 opportunity to edit mountlist if insane; if user declines, abort162 - added lots of assert()'s and other checks163 - ran code thru Valgrind to catch & fix some memory leaks164 - made mondo-restore.c smaller by moving some subroutines to165 common/libmondo-raid.c and mondorestore/mondo-rstr-compare.c166 - added '-Q' to let user test mondoarchive's ability to find167 their boot loader and type168 - improved which_boot_loader()169 - when burning or comparing to a CD, defeat autorun if it is170 running, to avoid confusing mondoarchive and the user171 - if original backup media no longer available at boot-time172 then offer user chance to choose another media source173 - when booting, type 'nuke noresize' to nuke w/o resizing174 mountlist to fill your drives175 - add 'textonly' when booting, to avoid using Newt gui176 - run nice(20) to prioritize mondoarchive at start177 - don't pause and wait for next blank CD at backup-time178 unless necessary (e.g. previous CD has not been removed)179 - get_phys_size_of_drive() --- better support of older drives180 - don't eject if "donteject" is in kernel's command line181 - cleaned up segfault-handling182 - added Conor's strip_path() to improve file list display183 - added Herman Kuster's multi-level bkp patch184 - better boot-time screen/message185 - added Joshua Oreman's FreeBSD patches x3186 - fixed interactive/textonly support187 - fixed support for subdir-within-NFS-mount188 - fixed "Can't backup if ramdisk not mounted" bug189 - try to work around eccentricities of multi-CD drive PCs190 - misc clean-ups (Steve Hindle)191 192 * Tue Apr 08 2003 Hugo Rabson <hugorabson@msn.com> 1.72193 194 - LVM/RAID bugs fixed (Brian Borgeson)195 - major clean-up of code (Stan Benoit)196 - make-me-bootable fix (Juraj Ziegler)197 - fixed problem w/ multi-ISO verify cycle (Tom Mortell)198 - removed duplicate entry from makefile199 - if root is /dev/root then assume not a ramdisk200 - reject relative paths if -d flag (Alessandro Polverini)201 - fixed potentially infinite loop in log_to_screen (Tom Mortell)202 - add '/' to custom filelist as workaround for obscure bug203 - ask user speed of CDRW if writing to CD204 - find_cdrom_device() --- if nonexistent/not found then205 make sure to return '' as dev str and 1 as res206 - tweaked restore scripts tgz207 - cleaned up find_cdrom_device()208 - if user creates /usr/share/mondo/payload.tgz then untar209 payload to CD at backup-time210 - fixed insist_on_this_cd_number()211 - fixed am_i_in_disaster_recovery_mode()212 - misc clean-up (Tom Mortell)213 - made code more legible214 - fixed post-nuke support215 - added -e support216 - fixed nfs support217 - fixed iso support218 - at restore-time, only sort mountlist internally,219 in mount_all_devices() and unmount_all_devices()220 - fixed cosmetic bug in label-partitions-as-necessary221 - updated documentation222 - fixed fstab-hacking scripts223 224 * Wed Feb 12 2003 Hugo Rabson <hugorabson@msn.com> 1.71225 226 - log newt, slang, ncurses info227 - updated man page228 - handle % chars in issue.net properly (Heiko Schlittermann)229 - fixed serious NFS restore bug230 - cleaned up spec file; it should cause fewer problems now (Jesse Keating)231 - changed various strcpy() calls to strncpy() calls232 - added mondo-makefilelist to makefile (Mikael Hultgren)233 - mount_cdrom() better at handling multiple CD drives234 - exclude /media/cdrom,cdrecorder,floppy235 - sensibly_set_tmpdir_and_scratchdir() --- exclude smb and smbfs236 - better logging by eval_call_to_make_ISO()237 - accept -J <fname> to let user provide their own fs catalog238 instead of -I <paths> to backup239 - if dir excluded with -E or included with -I and dir is actually240 a softlink then exclude/include the dir pointed to, as well241 - better location for manpage242 - adjusted block size of tarball at start of tape, to help243 users w/ broken tape driver firmware244 - sort -u fstab after modifying it245 - if backup type is nfs then don't estimate noof media246 - fixed Makefile (Mikael Hultgren)247 - updated manpage248 249 * Sat Dec 07 2002 Hugo Rabson <hugo@firstlinux.net> 1.70250 251 - new devel branch opened252 253 * Mon Dec 02 2002 Hugo Rabson <hugo@firstlinux.net> 1.52254 255 - fixed bug in multithreading256 - use new grub-MR instead of grub-install257 - wipe only the partition table (not the MBR) when partitioning drives258 - ignore lilo.conf.anaconda when looking for lilo.conf file259 - accepts '-l RAW' to backup/restore original boot sector instead260 of running grub or lilo to init it after restoring261 - fixed&updated stabgrub-me script; software RAID + GRUB work now262 - mount/unmount /boot partition for Gentoo 1.2 users263 - re-enabled extra tape checksums264 - disabled spurious warnings265 - unmount/remount supermounts at start/end of live restore, if nec.266 - cleaned up mondo's tape block handling (now, TAPE_BLOCK_SIZE=128K267 and I've added INTERNAL_TAPE_BLK_SIZE=32K variable for buffering)268 - added Makefile269 - added -l RAW, to backup and restore original MBR270 - cleaned up iso_mode() and nfs restoring271 - create /mnt/RESTORING/mnt/.boot.d for Gentoo users272 - made mondorestore CD bootable for ArkLinux users273 - if user runs as 'su' not 'su -' then work around274 275 * Sun Nov 17 2002 Hugo Rabson <hugo@firstlinux.net> 1.51276 277 - pop-up list of changed files, at end of verification phase278 - better handling of changed.files list at restore-time279 - lots of CD-related fixes280 - added '-N' flag --- to let user exclude all NFS-related mounts&devices281 - better handling of 'kill'282 - restructuring of code to ease integration of mondo w/XMondo283 - fixed obscure bug in find_and_mount_actual_cd()284 - if / or /root has <50MB free then abort & complain285 - fixed install.sh286 - fixed .spec file287 - updated documentation288 - commented code289 - updated man page290 - added -v / --version flag291 - replace convoluted grep with wc (KP)292 - fixed bug affecting restoration of bigfiles from CD's created w/0 compression293 - fixed BurnProof-related bug294 - better at figuring out which is the best partition for temp/scratchdir295 - added do-not-compress-these (text file) to RPM296 - do not compress files of types listed in do-not-compress-these297 - dropped -U from call to afio - saves 20-30% runtime (Cosgrove)298 - added Cosgrove's do-not-compress-these list299 - included various patches from KP300 - chmod tmpdir, scratchdir to 700 before using301 - restore from specified backup device, even if its own cfg file disagrees302 - fixed multi-tape bug303 - fixed "Can't find first ISO when verifying nonbootable ISO" bug304 - multithreaded make_afioballs_and_images()305 - tmpdir and scratchdir are set sensibly whether mondoarchive is called with306 command-line parameters or not307 - fixed bug in strip_spaces() which stopped it from handling308 small strings correctly - affected mountlist editor309 - create a repaired copy of grub-install which is RAID-friendly;310 use it when initializing boot sector with run_grub()311 - fixed bug in mondo-makefilelist312 313 * Sun Sep 08 2002 Hugo Rabson <hugo@firstlinux.net> 1.50314 315 - if restoring, don't try to find SCSI node of CD-ROM drive; find /dev entry316 - during selective restore, skip filesets which don't contain relevant archives317 - set /dev/null's perms to 777, just in case devfs-enabled kernel mangles it318 - remove /var/run/*.pid after restoring319 - move spurious lockfiles from /home/* to /home/*/.disabled320 - ask user to confirm the tape/CD device name321 - lots of multitape-related fixes322 - added code to autodetect the hardware of the user, if possible323 - if isodir does not exist then abort324 - more sanity-checking for -d flag325 - doubled 'biggiefile' threshold... to 32MB326 - exclude /root/images/mindi327 - fixed multi-imagedev bug (Emmanuel Druon)328 - unmount/remount /mnt/floppy before/after backing up, if Mandrake329 - restructured the source files330 - fixed serious bug in line 1546 - should have been !=, not ==; stopped331 mondorestore from correctly restoring big files332 - added '#include <signal.h>' to my-stuff.h333 - exclude "incheckentry xwait()" from changed.files334 - fixed minor bug in find_cdrom_device()335 - fixed bug in friendly_sizestr...336 - insist on tape #1 when start verifying337 - added internal buffering, replacing the external 'buffer' exe338 - if differential backup then don't permit formatting or fdisking,339 whether Interactive or Nuke mode340 - if mondorestore is run on live filesystem (or from ramdisk) without341 parameters then mondorestore will ask which backup media (tape, CD, etc.)342 was used; it will read the config file from the media and proceed from there343 - if tape streamer is softlink then resolve it first344 - incorporate post-nuke tarball345 - if user doesn't specify tape size, proceed anyway; behave intelligently346 in the event of end-of-tape347 - prefix bkpinfo->restore_path to biggiefile fname before generating348 checksum & comparing to archived biggiefile349 - if /etc/lilo.conf not found not /etc/lilo.conf.anaconda found350 then create a softlink from the former to the latter, to work351 around RH7.3's b0rken LILO support352 - LFS support (mharris, michele, hugo)353 - fixed verify bug --- CD#1 was being verified again & again & ...354 - differential mode fixed; supported again355 - ask user for boot loader + device if not detectible356 - list up to 512 files in file selection window at once (was 128)357 - better handling of bigfiles' checksums, perms and owns358 - delete final filelist if <=2 bytes long359 - if kernel not found and mondo in graphics mode then popup and ask360 for kernel path+filename361 362 * Sun Jul 14 2002 Hugo Rabson <hugo@firstlinux.net> 1.45-1363 364 - 1.5x branch forked off from 1.4x branch365 -
branches/2.0.8/mondo/distributions/mandriva/spec.m4
r519 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ` %{name}-%{version}.tar.bz2')dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.bz2')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', `%{addreqb}')dnl6 define(`DDD', )dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 8 define(`GRP', `Archiving/Backup')dnl 9 dnl OBS is replaced vywhat is being obsoleted9 dnl OBS is replaced with what is being obsoleted 10 10 define(`OBS', `Obsoletes: libmondo <= 2.04 11 11 Provides: libmondo')dnl -
branches/2.0.8/mondo/distributions/redhat/changelog
r535 r576 1 * Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> VVV1 * Fri Feb 17 2006 Bruno Cornec <bruno@mondorescue.org> 2.0.7-1 2 2 - Updated to 2.0.7 3 3 - RPM sepc files are now generated -
branches/2.0.8/mondo/distributions/redhat/spec.m4
r535 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', ftp://ftp.mondorescue.org/src/%{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb})dnl6 define(`DDD', )dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Applications/Archiving)dnl8 define(`GRP', `Applications/Archiving')dnl 9 9 dnl OBS is replaced vy what is being obsoleted 10 10 define(`OBS', )dnl -
branches/2.0.8/mondo/distributions/rpm/mondo.spec
r535 r576 3 3 # 4 4 5 %define name mondo6 %define version VVV7 5 %define mrel RRR 6 %define tag TTT 8 7 # if mandriva official build (rpm --with is_official) 9 8 %{?is_official:%define rel %{mkrel} %{mrel}}%{!?is_official:%define rel %{mrel}} 10 %define src SSS 11 %define grp GRP 12 %define addreqb mindi >= 1.0.7, bzip2 >= 0.9, afio, mkisofs, binutils, newt >= 0.50, slang >= 1.4.1 13 %define addreq DDD 14 %define rel %{mrel} 9 %define addreq mindi >= 1.0.7, bzip2 >= 0.9, afio, mkisofs, binutils, newt >= 0.50, slang >= 1.4.1 DDD 15 10 16 11 Summary: A program which a Linux user can utilize to create a rescue/restore CD/tape … … 19 14 Summary(sp): Un programa para los usuarios de Linux por crear una CD/cinta de restoracion/rescate 20 15 21 Name: %{name}22 Version: %{version}23 Release: %{ rel}16 Name: mondo 17 Version: VVV 18 Release: %{mrel} 24 19 License: GPL 25 Group: %{grp}20 Group: GRP 26 21 Url: http://www.mondorescue.org 27 Source: %{src}22 Source: SSS 28 23 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -u -n) 29 24 BuildRequires: newt-devel >= 0.50, slang-devel >= 1.4.1, gcc 30 Epoch: %(echo EEE | cut -d- -f1 | sed "s~M~~")31 25 OBS 32 26 %ifarch ia64 … … 65 59 66 60 %prep 67 %setup -q -n %name-%{version} 61 %setup -q -n %name-%{version}-%{tag} 68 62 69 63 %build … … 79 73 80 74 %files 81 %defattr(644,root,root,755)82 75 %doc ChangeLog svn.log 83 76 %doc INSTALL COPYING README TODO AUTHORS NEWS 84 77 %doc docs/en/mondorescue-howto.html docs/en/mondorescue-howto.pdf 85 78 79 <<<<<<< .working 86 80 %attr(755,root,root) %{_sbindir}/* 87 81 %attr(755,root,root) %{_datadir}/%{name}/restore-scripts/%{name}/* … … 89 83 %attr(755,root,root) %{_datadir}/%{name}/post-nuke.sample/usr/bin/post-nuke 90 84 %{_datadir}/%{name}/* 85 ======= 86 %{_sbindir}/* 87 %{_datadir}/%{name} 88 >>>>>>> .merge-right.r575 91 89 %{_mandir}/man8/* 92 90 -
branches/2.0.8/mondo/distributions/suse/spec.m4
r455 r576 2 2 dnl 3 3 dnl SSS is replaced by the source package format 4 define(`SSS', %{name}-%{version}.tgz)dnl4 define(`SSS', `ftp://ftp.mondorescue.org/src/%{name}-%{version}-%{tag}.tar.gz')dnl 5 5 dnl DDD is replaced by the list of dependencies specific to that distro 6 define(`DDD', %{addreqb}, buffer, cdrecord)dnl6 define(`DDD', `, buffer, cdrecord')dnl 7 7 dnl GRP is replaced by the RPM group of apps 8 define(`GRP', Productivity/Archiving/Backup)dnl8 define(`GRP', `Productivity/Archiving/Backup')dnl 9 9 dnl OBS is replaced vy what is being obsoleted 10 10 define(`OBS', )dnl -
branches/2.0.8/mondo/mondo/autorun
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/common/libmondo-raid-EXT.h
r128 r576 53 53 #endif 54 54 55 extern int create_raidtab_from_mdstat(char *, char *); 56 extern int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file); 57 58 extern int create_raidtab_from_mdstat(char *raidtab_fname, 59 char *mdstat_fname); 55 extern int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix); 56 extern int create_raidtab_from_mdstat(char *raidtab_fname); -
branches/2.0.8/mondo/mondo/common/libmondo-raid.c
r273 r576 395 395 396 396 fprintf(fout, "raiddev %s\n", raidrec->raid_device); 397 if (raidrec->raid_level == -1) { 397 if (raidrec->raid_level == -2) { 398 fprintf(fout, " raid-level multipath\n"); 399 } else if (raidrec->raid_level == -1) { 398 400 fprintf(fout, " raid-level linear\n"); 399 401 } else { … … 401 403 raidrec->raid_level); 402 404 } 403 fprintf(fout, " chunk-size %d\n", raidrec->chunk_size);404 405 fprintf(fout, " nr-raid-disks %d\n", 405 406 raidrec->data_disks.entries); 406 fprintf(fout, " nr-spare-disks %d\n", 407 raidrec->spare_disks.entries); 407 if (raidrec->spare_disks.entries > 0) { 408 fprintf(fout, " nr-spare-disks %d\n", 409 raidrec->spare_disks.entries); 410 } 408 411 if (raidrec->parity_disks.entries > 0) { 409 412 fprintf(fout, " nr-parity-disks %d\n", 410 413 raidrec->parity_disks.entries); 411 414 } 412 413 415 fprintf(fout, " persistent-superblock %d\n", 414 416 raidrec->persistent_superblock); 417 if (raidrec->chunk_size > -1) { 418 fprintf(fout, " chunk-size %d\n", raidrec->chunk_size); 419 } 420 if (raidrec->parity > -1) { 421 switch(raidrec->parity) { 422 case 0: 423 fprintf(fout, " parity-algorithm left-asymmetric\n"); 424 break; 425 case 1: 426 fprintf(fout, " parity-algorithm right-asymmetric\n"); 427 break; 428 case 2: 429 fprintf(fout, " parity-algorithm left-symmetric\n"); 430 break; 431 case 3: 432 fprintf(fout, " parity-algorithm right-symmetric\n"); 433 break; 434 default: 435 fatal_error("Unknown RAID parity algorithm."); 436 break; 437 } 438 } 415 439 save_additional_vars_to_file(&raidrec->additional_vars, fout); 416 440 fprintf(fout, "\n"); … … 713 737 714 738 if (!strcmp(label, "raid-level")) { 715 if (!strcmp(value, "linear")) { 739 if (!strcmp(value, "multipath")) { 740 raidrec->raid_level = -2; 741 } else if (!strcmp(value, "linear")) { 716 742 raidrec->raid_level = -1; 717 743 } else { … … 726 752 } else if (!strcmp(label, "chunk-size")) { 727 753 raidrec->chunk_size = atoi(value); 754 } else if (!strcmp(label, "parity-algorithm")) { 755 if (!strcmp(value, "left-asymmetric")) { 756 raidrec->parity = 0; 757 } else if (!strcmp(value, "right-asymmetric")) { 758 raidrec->parity = 1; 759 } else if (!strcmp(value, "left-symmetric")) { 760 raidrec->parity = 2; 761 } else if (!strcmp(value, "right-symmetric")) { 762 raidrec->parity = 3; 763 } else { 764 log_msg(1, "Unknown RAID parity algorithm '%s'\n.", value); 765 } 728 766 } else if (!strcmp(label, "device")) { 729 767 get_next_raidtab_line(fin, labelB, valueB); … … 972 1010 973 1011 974 int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file) 975 { 976 FILE *fin; 977 char *tmp; 978 char *stub; 979 char *incoming; 980 char *raid_devname; 981 char *p, *q, *r; 982 int diskno; 983 984 malloc_string(tmp); 985 malloc_string(stub); 986 malloc_string(incoming); 987 malloc_string(raid_devname); 988 if (!(fin = fopen(mdstat_file, "r"))) { 989 log_msg(1, "%s not found", mdstat_file); 1012 int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix) { 1013 1014 const char delims[] = " "; 1015 1016 FILE *fin; 1017 int res = 0, row, i, index_min; 1018 int lastpos = 0; 1019 size_t len = 0; 1020 char *token; 1021 char *string = NULL; 1022 char *pos; 1023 char type; 1024 char *strtmp; 1025 1026 // open file 1027 if (!(fin = fopen(MDSTAT_FILE, "r"))) { 1028 log_msg(1, "Could not open %s.\n", MDSTAT_FILE); 1029 return 1; 1030 } 1031 // initialise record, build progress and row counters 1032 raidlist->entries = 0; 1033 raidlist->el[raidlist->entries].progress = 999; 1034 row = 1; 1035 // skip first output row - contains registered RAID levels 1036 res = getline(&string, &len, fin); 1037 // parse the rest 1038 while ( !feof_unlocked(fin) ) { 1039 res = getline(&string, &len, fin); 1040 if (res <= 0) break; 1041 // trim leading spaces 1042 pos = string; 1043 while (*pos == ' ') *pos++; 1044 asprintf(&string, pos); 1045 // 1046 // if we have newline after only spaces, this is a blank line, update 1047 // counters, otherwise do normal parsing 1048 if (*string == '\n') { 1049 row = 1; 1050 raidlist->entries++; 1051 raidlist->el[raidlist->entries].progress = 999; 1052 } else { 1053 switch (row) { 1054 case 1: // device information 1055 // check whether last line of record and if so skip 1056 pos = strcasestr(string, "unused devices: "); 1057 if (pos == string) { 1058 //raidlist->entries--; 1059 break; 1060 } 1061 // tokenise string 1062 token = mr_strtok (string, delims, &lastpos); 1063 // get RAID device name 1064 asprintf(&strtmp,"%s%s", device_prefix, token); 1065 strcpy(raidlist->el[raidlist->entries].raid_device, strtmp); 1066 paranoid_free(strtmp); 1067 paranoid_free(token); 1068 // skip ':' and status 1069 token = mr_strtok (string, delims, &lastpos); 1070 paranoid_free(token); 1071 token = mr_strtok (string, delims, &lastpos); 1072 if (!strcmp(token, "inactive")) { 1073 log_msg(1, "RAID device '%s' inactive.\n", 1074 raidlist->el[raidlist->entries].raid_device); 1075 paranoid_free(string); 1076 paranoid_free(token); 1077 return 1; 1078 } 1079 paranoid_free(token); 1080 1081 // get RAID level 1082 token = mr_strtok (string, delims, &lastpos); 1083 if (!strcmp(token, "multipath")) { 1084 raidlist->el[raidlist->entries].raid_level = -2; 1085 } else if (!strcmp(token, "linear")) { 1086 raidlist->el[raidlist->entries].raid_level = -1; 1087 } else if (!strcmp(token, "raid0")) { 1088 raidlist->el[raidlist->entries].raid_level = 0; 1089 } else if (!strcmp(token, "raid1")) { 1090 raidlist->el[raidlist->entries].raid_level = 1; 1091 } else if (!strcmp(token, "raid4")) { 1092 raidlist->el[raidlist->entries].raid_level = 4; 1093 } else if (!strcmp(token, "raid5")) { 1094 raidlist->el[raidlist->entries].raid_level = 5; 1095 } else if (!strcmp(token, "raid6")) { 1096 raidlist->el[raidlist->entries].raid_level = 6; 1097 } else if (!strcmp(token, "raid10")) { 1098 raidlist->el[raidlist->entries].raid_level = 10; 1099 } else { 1100 log_msg(1, "Unknown RAID level '%s'.\n", token); 1101 paranoid_free(string); 1102 paranoid_free(token); 1103 return 1; 1104 } 1105 paranoid_free(token); 1106 1107 // get RAID devices (type, index, device) 1108 // Note: parity disk for RAID4 is last normal disk, there is no '(P)' 1109 raidlist->el[raidlist->entries].data_disks.entries = 0; 1110 raidlist->el[raidlist->entries].spare_disks.entries = 0; 1111 raidlist->el[raidlist->entries].failed_disks.entries = 0; 1112 while((token = mr_strtok (string, delims, &lastpos))) { 1113 if ((pos = strstr(token, "("))) { 1114 type = *(pos+1); 1115 } else { 1116 type = ' '; 1117 } 1118 pos = strstr(token, "["); 1119 *pos = '\0'; 1120 switch(type) { 1121 case ' ': // normal data disks 1122 raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].index = atoi(pos + 1); 1123 asprintf(&strtmp,"%s%s", device_prefix, token); 1124 strcpy(raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].device, strtmp); 1125 paranoid_free(strtmp); 1126 raidlist->el[raidlist->entries].data_disks.entries++; 1127 break; 1128 case 'S': // spare disks 1129 raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].index = atoi(pos + 1); 1130 asprintf(&strtmp,"%s%s", device_prefix, token); 1131 strcpy(raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].device, strtmp); 1132 paranoid_free(strtmp); 1133 raidlist->el[raidlist->entries].spare_disks.entries++; 1134 break; 1135 case 'F': // failed disks 1136 raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].index = atoi(pos + 1); 1137 asprintf(&strtmp,"%s%s", device_prefix, token); 1138 strcpy(raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].device, strtmp); 1139 paranoid_free(strtmp); 1140 raidlist->el[raidlist->entries].failed_disks.entries++; 1141 log_it("At least one failed disk found in RAID array.\n"); 1142 break; 1143 default: // error 1144 log_msg(1, "Unknown device type '%c'\n", type); 1145 paranoid_free(string); 1146 paranoid_free(token); 1147 return 1; 1148 break; 1149 } 1150 paranoid_free(token); 1151 } 1152 1153 // adjust index for each device so that it starts with 0 for every type 1154 index_min = 99; 1155 for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) { 1156 if (raidlist->el[raidlist->entries].data_disks.el[i].index < index_min) { 1157 index_min = raidlist->el[raidlist->entries].data_disks.el[i].index; 1158 } 1159 } 1160 if (index_min > 0) { 1161 for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) { 1162 raidlist->el[raidlist->entries].data_disks.el[i].index = raidlist->el[raidlist->entries].data_disks.el[i].index - index_min; 1163 } 1164 } 1165 index_min = 99; 1166 for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) { 1167 if (raidlist->el[raidlist->entries].spare_disks.el[i].index < index_min) { 1168 index_min = raidlist->el[raidlist->entries].spare_disks.el[i].index; 1169 } 1170 } 1171 if (index_min > 0) { 1172 for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) { 1173 raidlist->el[raidlist->entries].spare_disks.el[i].index = raidlist->el[raidlist->entries].spare_disks.el[i].index - index_min; 1174 } 1175 } 1176 index_min = 99; 1177 for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) { 1178 if (raidlist->el[raidlist->entries].failed_disks.el[i].index < index_min) { 1179 index_min = raidlist->el[raidlist->entries].failed_disks.el[i].index; 1180 } 1181 } 1182 if (index_min > 0) { 1183 for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) { 1184 raidlist->el[raidlist->entries].failed_disks.el[i].index = raidlist->el[raidlist->entries].failed_disks.el[i].index - index_min; 1185 } 1186 } 1187 break; 1188 case 2: // config information 1189 // check for persistent super block 1190 if (strcasestr(string, "super non-persistent")) { 1191 raidlist->el[raidlist->entries].persistent_superblock = 0; 1192 } else { 1193 raidlist->el[raidlist->entries].persistent_superblock = 1; 1194 } 1195 // extract chunk size 1196 if (!(pos = strcasestr(string, "k chunk"))) { 1197 raidlist->el[raidlist->entries].chunk_size = -1; 1198 } else { 1199 while (*pos != ' ') { 1200 *pos--; 1201 if (pos < string) { 1202 log_it("String underflow!\n"); 1203 paranoid_free(string); 1204 return 1; 1205 } 1206 } 1207 raidlist->el[raidlist->entries].chunk_size = atoi(pos + 1); 1208 } 1209 // extract parity if present 1210 if ((pos = strcasestr(string, "algorithm"))) { 1211 raidlist->el[raidlist->entries].parity = atoi(pos + 9); 1212 } else { 1213 raidlist->el[raidlist->entries].parity = -1; 1214 } 1215 break; 1216 case 3: // optional build status information 1217 if (!(pos = strchr(string, '\%'))) { 1218 if (strcasestr(string, "delayed")) { 1219 raidlist->el[raidlist->entries].progress = -1; // delayed (therefore, stuck at 0%) 1220 } else { 1221 raidlist->el[raidlist->entries].progress = 999; // not found 1222 } 1223 } else { 1224 while (*pos != ' ') { 1225 *pos--; 1226 if (pos < string) { 1227 printf("ERROR: String underflow!\n"); 1228 paranoid_free(string); 1229 return 1; 1230 } 1231 } 1232 raidlist->el[raidlist->entries].progress = atoi(pos); 1233 } 1234 break; 1235 default: // error 1236 log_msg(1, "Row %d should not occur in record!\n", row); 1237 break; 1238 } 1239 row++; 1240 } 1241 } 1242 // close file 1243 fclose(fin); 1244 // free string 1245 paranoid_free(string); 1246 // return success 1247 return 0; 1248 1249 } 1250 1251 1252 1253 1254 int create_raidtab_from_mdstat(char *raidtab_fname) 1255 { 1256 struct raidlist_itself *raidlist; 1257 int retval = 0; 1258 1259 raidlist = malloc(sizeof(struct raidlist_itself)); 1260 1261 // FIXME: Prefix '/dev/' should really be dynamic! 1262 if (parse_mdstat(raidlist, "/dev/")) { 1263 log_to_screen("Sorry, cannot read %s", MDSTAT_FILE); 990 1264 return (1); 991 1265 } 992 mdstat->entries = 0; 993 for (fgets(incoming, MAX_STR_LEN - 1, fin); !feof(fin); 994 fgets(incoming, MAX_STR_LEN - 1, fin)) { 995 p = incoming; 996 if (*p != 'm' && *(p + 1) == 'm') { 997 p++; 998 } 999 if (strncmp(p, "md", 2)) { 1000 continue; 1001 } 1002 // read first line --- mdN : active raidX ............ 1003 mdstat->el[mdstat->entries].md = atoi(p + 2); 1004 log_msg(8, "Storing /dev/md%d's info", atoi(p + 2)); 1005 while (*p != ':' && *p) { 1006 p++; 1007 } 1008 while ((*p != 'r' || *(p + 1) != 'a') && *p) { 1009 p++; 1010 } 1011 if (!strncmp(p, "raid", 4)) { 1012 mdstat->el[mdstat->entries].raidlevel = *(p + 4) - '0'; 1013 } 1014 p += 4; 1015 while (*p != ' ' && *p) { 1016 p++; 1017 } 1018 while (*p == ' ' && *p) { 1019 p++; 1020 } 1021 for (diskno = 0; *p; diskno++) { 1022 strcpy(stub, p); 1023 // log_msg(1, "diskno=%d; tmp=%s", diskno, tmp); 1024 q = strchr(stub, '['); 1025 if (q) { 1026 *q = '\0'; 1027 q++; 1028 r = strchr(q, ']'); 1029 if (r) { 1030 *r = '\0'; 1031 } 1032 mdstat->el[mdstat->entries].disks.el[diskno].index = 1033 atoi(q); 1034 } else { 1035 mdstat->el[mdstat->entries].disks.el[diskno].index = -1; 1036 q = strchr(stub, ' '); 1037 if (q) { 1038 *q = '\0'; 1039 } 1040 } 1041 sprintf(tmp, "/dev/%s", stub); 1042 log_msg(8, "/dev/md%d : disk#%d : %s (%d)", 1043 mdstat->el[mdstat->entries].md, diskno, tmp, 1044 mdstat->el[mdstat->entries].disks.el[diskno].index); 1045 strcpy(mdstat->el[mdstat->entries].disks.el[diskno].device, 1046 tmp); 1047 while (*p != ' ' && *p) { 1048 p++; 1049 } 1050 while (*p == ' ' && *p) { 1051 p++; 1052 } 1053 } 1054 mdstat->el[mdstat->entries].disks.entries = diskno; 1055 // next line --- skip it 1056 if (!feof(fin)) { 1057 fgets(incoming, MAX_STR_LEN - 1, fin); 1058 } else { 1059 continue; 1060 } 1061 // next line --- the 'progress' line 1062 if (!feof(fin)) { 1063 fgets(incoming, MAX_STR_LEN - 1, fin); 1064 } else { 1065 continue; 1066 } 1067 // log_msg(1, "Percentage line = '%s'", incoming); 1068 if (!(p = strchr(incoming, '\%'))) { 1069 mdstat->el[mdstat->entries].progress = 999; // not found 1070 } else if (strstr(incoming, "DELAYED")) { 1071 mdstat->el[mdstat->entries].progress = -1; // delayed (therefore, stuck at 0%) 1072 } else { 1073 for (*p = '\0'; *p != ' '; p--); 1074 mdstat->el[mdstat->entries].progress = atoi(p); 1075 } 1076 log_msg(8, "progress =%d", mdstat->el[mdstat->entries].progress); 1077 mdstat->entries++; 1078 } 1079 fclose(fin); 1080 paranoid_free(tmp); 1081 paranoid_free(stub); 1082 paranoid_free(incoming); 1083 paranoid_free(raid_devname); 1084 return (0); 1085 } 1086 1087 1088 1089 int create_raidtab_from_mdstat(char *raidtab_fname, char *mdstat_fname) 1090 { 1091 struct raidlist_itself *raidlist; 1092 struct s_mdstat *mdstat; 1093 int retval = 0; 1094 int i; 1095 1096 raidlist = malloc(sizeof(struct raidlist_itself)); 1097 mdstat = malloc(sizeof(struct s_mdstat)); 1098 1099 if (read_mdstat(mdstat, mdstat_fname)) { 1100 log_to_screen("Sorry, cannot read %s", mdstat_fname); 1101 return (1); 1102 } 1103 1104 for (i = 0; i < mdstat->entries; i++) { 1105 sprintf(raidlist->el[i].raid_device, "/dev/md%d", 1106 mdstat->el[i].md); 1107 raidlist->el[i].raid_level = mdstat->el[i].raidlevel; 1108 raidlist->el[i].persistent_superblock = 1; 1109 raidlist->el[i].chunk_size = 4; 1110 memcpy((void *) &raidlist->el[i].data_disks, 1111 (void *) &mdstat->el[i].disks, 1112 sizeof(struct list_of_disks)); 1113 // FIXME --- the above line does not allow for spare disks 1114 log_to_screen 1115 ("FIXME - create_raidtab_from_mdstat does not allow for spare disks"); 1116 } 1117 raidlist->entries = i; 1266 1118 1267 retval += save_raidlist_to_raidtab(raidlist, raidtab_fname); 1119 1268 return (retval); -
branches/2.0.8/mondo/mondo/common/libmondo-raid.h
r128 r576 43 43 #endif 44 44 45 46 int create_raidtab_from_mdstat(char *, char *); 47 int read_mdstat(struct s_mdstat *mdstat, char *mdstat_file); 48 49 int create_raidtab_from_mdstat(char *raidtab_fname, char *mdstat_fname); 45 int create_raidtab_from_mdstat(char *raidtab_fname); 46 int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix); -
branches/2.0.8/mondo/mondo/common/libmondo-string-EXT.h
r128 r576 44 44 extern inline void turn_wildcard_chars_into_literal_chars(char *out, 45 45 char *in); 46 /* Valid external functions */ 47 extern char *mr_strtok(char *instr, const char *delims, int *lastpos); -
branches/2.0.8/mondo/mondo/common/libmondo-string.c
r128 r576 1 /* libmondo-string.c 2 $Id$ 3 4 - string manipulation 5 6 7 08/02 8 - added function turn_wildcard_chars_into_literal_chars() 9 10 03/10/2004? 11 - make percent_media_full_comment() use media_descriptor_string(): 12 "DVD %d" or "ISO %d" (if that's what it is) rather than "CD %d" 13 - fix build_partition_name() to use 'adXsY' rather than 'adXpY' on FreeBSD 14 15 10/08/2003 16 - changed 'CD %d' to '<media> %d' (msg) 17 18 10/01 19 - fixing strip_spaces() to handle /r properly 20 21 09/26 22 - added char *media_descriptor_string(t_bkptype); 23 24 05/06 25 - cleaned up severity_of_difference() a bit 26 27 05/05 28 - added Joshua Oreman's FreeBSD patches 29 30 04/24 31 - added lots of assert()'s and log_OS_error()'s 32 - severity_of_difference() skips "/mnt/RESTORING" at start 33 of filename if it's there 34 35 04/04/2003 36 - misc clean-up (Tom Mortell) 37 38 11/17/2002 39 - strip_spaces() now accommodates _smaller_ strings auto'y 40 41 11/08 42 - if decimal point in string sent to friendly_sizestr_to_sizelong() 43 then fatal error: we expect integers only 44 45 10/01 - 10/31 46 - commented subroutines 47 - strip_spaces() allows up to MAX_STR_LEN-len input string 48 49 08/01 - 08/31 50 - fixed bug in friendly_sizestr_to_sizelong() which stopped 51 it from working with capital G's and K's 52 - fixed bug in build_partition_name() 53 54 07/24 55 - created 56 */ 1 /* $Id$ */ 57 2 58 3 … … 1212 1157 } 1213 1158 1159 1160 /* New functions safe from a memory manageemnt point of view */ 1161 /* Developped by Andree Leidenfrost */ 1162 1163 char *mr_strtok(char *instr, const char *delims, int *lastpos) { 1164 1165 char *token = NULL; 1166 char *strptr = NULL; 1167 size_t pos1 = 0; 1168 size_t pos2 = 0; 1169 1170 if (strlen(instr) <= *lastpos) { 1171 *lastpos = 0; 1172 return token; 1173 } 1174 1175 strptr = instr + *lastpos; 1176 pos2 = strspn(strptr, delims); 1177 strptr += pos2; 1178 pos1 = strcspn(strptr, delims); 1179 token = malloc(sizeof(*token)*(pos1+1)); 1180 strncpy(token, strptr, pos1); 1181 *lastpos = *lastpos + pos1 + pos2 + 1; 1182 1183 return token; 1184 } 1214 1185 /* @} - end of stringGroup */ -
branches/2.0.8/mondo/mondo/common/libmondo-string.h
r128 r576 34 34 char *media_descriptor_string(t_bkptype); 35 35 inline void turn_wildcard_chars_into_literal_chars(char *out, char *in); 36 37 /* Valid external functions */ 38 char *mr_strtok(char *instr, const char *delims, int *lastpos); -
branches/2.0.8/mondo/mondo/common/libmondo-tools.c
r424 r576 442 442 assert(raidrec != NULL); 443 443 raidrec->raid_device[0] = '\0'; 444 raidrec->raid_level = 0; 445 raidrec->chunk_size = 4; 444 raidrec->raid_level = -9; 446 445 raidrec->persistent_superblock = 1; 446 raidrec->chunk_size = 64; 447 raidrec->parity = -1; 447 448 raidrec->data_disks.entries = 0; 448 449 raidrec->spare_disks.entries = 0; … … 1224 1225 log_to_screen 1225 1226 ("You have RAID partitions but no /etc/raidtab - creating one from /proc/mdstat"); 1226 create_raidtab_from_mdstat("/etc/raidtab" , "/proc/mdstat");1227 create_raidtab_from_mdstat("/etc/raidtab"); 1227 1228 } 1228 1229 -
branches/2.0.8/mondo/mondo/common/mondostructures.h
r519 r576 150 150 */ 151 151 int index; 152 153 /** 154 * Type of disk. 155 */ 156 char type; // ' ' = data (default), S = spare, F = faulty 157 152 158 }; 153 159 … … 241 247 */ 242 248 int chunk_size; 249 250 /** 251 * The parity algorithm of this RAID device. (RAID5 only) 252 */ 253 int parity; // 0=left-asymmetric, 1=right-asymmetric, 2=left-symmetric, 3=right-symmetric 243 254 244 255 /** … … 266 277 */ 267 278 struct additional_raid_variables additional_vars; 279 280 /** 281 * Resync progress for this device. 282 */ 283 int progress; 268 284 }; 269 285 … … 787 803 struct s_tapecat_entry el[MAX_TAPECATALOG_ENTRIES]; 788 804 }; 789 790 791 792 struct s_mdrec {793 int md; // /dev/mdN794 int raidlevel; // 0, 1, 5795 struct list_of_disks disks;796 int progress;797 };798 799 struct s_mdstat {800 int entries;801 struct s_mdrec el[MAXIMUM_RAID_DEVS];802 }; -
branches/2.0.8/mondo/mondo/common/my-stuff.h
r459 r576 231 231 */ 232 232 #define MONDO_CFG_FILE_STUB "tmp/mondo-restore.cfg" 233 234 /** 235 * The RAID kernel proc file 236 */ 237 #define MDSTAT_FILE "/proc/mdstat" 233 238 234 239 /** -
branches/2.0.8/mondo/mondo/mondorestore/mondo-prep.c
r196 r576 695 695 696 696 /** 697 * Create @p RAID device using information from @p structure. 698 * This will create the specified RAID devive using information provided in 699 * raidlist by means of the mdadm tool. 700 * @param raidlist The structure containing all RAID information 701 * @param device The RAID device to create. 702 * @return 0 for success, nonzero for failure. 703 */ 704 int create_raid_device_via_mdadm(struct raidlist_itself *raidlist, char *device) 705 { 706 /** int **************************************************************/ 707 int i = 0; 708 int j = 0; 709 int res = 0; 710 711 /** buffers ***********************************************************/ 712 char *devices = NULL; 713 char *strtmp = NULL; 714 char *level = NULL; 715 char *program = NULL; 716 717 // leave straight away if raidlist is initial or has no entries 718 if (!raidlist || raidlist->entries == 0) { 719 log_msg(1, "No RAID arrays found."); 720 return 1; 721 } else { 722 log_msg(1, "%d RAID arrays found.", raidlist->entries); 723 } 724 // find raidlist entry for requested device 725 for (i = 0; i < raidlist->entries; i++) { 726 if (!strcmp(raidlist->el[i].raid_device, device)) break; 727 } 728 // check whether RAID device was found in raidlist 729 if (i == raidlist->entries) { 730 log_msg(1, "RAID device %s not found in list.", device); 731 return 1; 732 } 733 // create device list from normal disks followed by spare ones 734 asprintf(&devices, raidlist->el[i].data_disks.el[0].device); 735 for (j = 1; j < raidlist->el[i].data_disks.entries; j++) { 736 asprintf(&strtmp, "%s", devices); 737 paranoid_free(devices); 738 asprintf(&devices, "%s %s", strtmp, 739 raidlist->el[i].data_disks.el[j].device); 740 paranoid_free(strtmp); 741 } 742 for (j = 0; j < raidlist->el[i].spare_disks.entries; j++) { 743 asprintf(&strtmp, "%s", devices); 744 paranoid_free(devices); 745 asprintf(&devices, "%s %s", strtmp, 746 raidlist->el[i].spare_disks.el[j].device); 747 paranoid_free(strtmp); 748 } 749 // translate RAID level 750 if (raidlist->el[i].raid_level == -2) { 751 asprintf(&level, "multipath"); 752 } else if (raidlist->el[i].raid_level == -1) { 753 asprintf(&level, "linear"); 754 } else { 755 asprintf(&level, "raid%d", raidlist->el[i].raid_level); 756 } 757 // create RAID device: 758 // - RAID device, number of devices and devices mandatory 759 // - parity algorithm, chunk size and spare devices optional 760 // - faulty devices ignored 761 // - persistent superblock always used as this is recommended 762 asprintf(&program, 763 "mdadm --create --force --run --auto=yes %s --level=%s --raid-devices=%d", 764 raidlist->el[i].raid_device, level, 765 raidlist->el[i].data_disks.entries); 766 if (raidlist->el[i].parity != -1) { 767 asprintf(&strtmp, "%s", program); 768 paranoid_free(program); 769 switch(raidlist->el[i].parity) { 770 case 0: 771 asprintf(&program, "%s --parity=%s", strtmp, "la"); 772 break; 773 case 1: 774 asprintf(&program, "%s --parity=%s", strtmp, "ra"); 775 break; 776 case 2: 777 asprintf(&program, "%s --parity=%s", strtmp, "ls"); 778 break; 779 case 3: 780 asprintf(&program, "%s --parity=%s", strtmp, "rs"); 781 break; 782 default: 783 fatal_error("Unknown RAID parity algorithm."); 784 break; 785 } 786 paranoid_free(strtmp); 787 } 788 if (raidlist->el[i].chunk_size != -1) { 789 asprintf(&strtmp, "%s", program); 790 paranoid_free(program); 791 asprintf(&program, "%s --chunk=%d", strtmp, raidlist->el[i].chunk_size); 792 paranoid_free(strtmp); 793 } 794 if (raidlist->el[i].spare_disks.entries > 0) { 795 asprintf(&strtmp, "%s", program); 796 paranoid_free(program); 797 asprintf(&program, "%s --spare-devices=%d", strtmp, 798 raidlist->el[i].spare_disks.entries); 799 paranoid_free(strtmp); 800 } 801 asprintf(&strtmp, "%s", program); 802 paranoid_free(program); 803 asprintf(&program, "%s %s", strtmp, devices); 804 paranoid_free(strtmp); 805 res = run_program_and_log_output(program, 1); 806 // free memory 807 paranoid_free(devices); 808 paranoid_free(level); 809 paranoid_free(program); 810 // return to calling instance 811 return res; 812 } 813 814 815 /** 697 816 * Format @p device as a @p format filesystem. 698 817 * This will use the format command returned by which_format_command_do_i_need(). … … 704 823 * @return 0 for success, nonzero for failure. 705 824 */ 706 int format_device(char *device, char *format )825 int format_device(char *device, char *format, struct raidlist_itself *raidlist) 707 826 { 708 827 /** int **************************************************************/ … … 836 955 837 956 log_msg(1, "Making %s", device); 838 sprintf(program, "mkraid --really-force %s", device); 839 res = run_program_and_log_output(program, 1); 840 log_msg(1, "%s returned %d", program, res); 841 system("sync"); 842 sleep(3); 843 start_raid_device(device); 844 if (g_fprep) { 845 fprintf(g_fprep, "%s\n", program); 957 // use mkraid if it exists, otherwise use mdadm 958 if (run_program_and_log_output("which mkraid", FALSE)) { 959 res = create_raid_device_via_mdadm(raidlist, device); 960 log_msg(1, "Creating RAID device %s via mdadm returned %d", device, res); 961 } else { 962 sprintf(program, "mkraid --really-force %s", device); 963 res = run_program_and_log_output(program, 1); 964 log_msg(1, "%s returned %d", program, res); 965 system("sync"); 966 sleep(3); 967 start_raid_device(device); 968 if (g_fprep) { 969 fprintf(g_fprep, "%s\n", program); 970 } 846 971 } 847 972 system("sync"); 848 973 sleep(2); 849 850 974 // log_to_screen("Starting %s", device); 851 975 // sprintf(program, "raidstart %s", device); … … 853 977 // log_msg(1, "%s returned %d", program, res); 854 978 // system("sync"); sleep(1); 855 if (g_fprep) {856 fprintf(g_fprep, "%s\n", program);857 }858 979 #endif 859 980 system("sync"); … … 923 1044 * @return The number of errors encountered (0 for success). 924 1045 */ 925 int format_everything(struct mountlist_itself *mountlist, 926 bool interactively)1046 int format_everything(struct mountlist_itself *mountlist, bool interactively, 1047 struct raidlist_itself *raidlist) 927 1048 { 928 1049 /** int **************************************************************/ … … 983 1104 if (do_it) { 984 1105 // NB: format_device() also stops/starts RAID device if necessary 985 retval += format_device(me->device, me->format );1106 retval += format_device(me->device, me->format, raidlist); 986 1107 } 987 1108 g_current_progress += progress_step; … … 1000 1121 log_msg(1, "Creating LVMs"); 1001 1122 if (does_file_exist("/tmp/i-want-my-lvm")) { 1002 wait_until_software_raids_are_prepped("/proc/mdstat", 10 );1123 wait_until_software_raids_are_prepped("/proc/mdstat", 100); 1003 1124 log_to_screen("Configuring LVM"); 1004 1125 if (!g_text_mode) { … … 1076 1197 1077 1198 if (do_it) 1078 retval += format_device(me->device, me->format );1199 retval += format_device(me->device, me->format, raidlist); 1079 1200 } 1080 1201 … … 2247 2368 sprintf(program, "vinum stop -f %s", raid_device); 2248 2369 #else 2249 sprintf(program, "raidstop %s", raid_device); 2250 // sprintf (program, "raidstop " RAID_DEVICE_STUB "*"); 2370 // use raidstop if it exists, otherwise use mdadm 2371 if (run_program_and_log_output("which raidstop", FALSE)) { 2372 sprintf(program, "mdadm -S %s", raid_device); 2373 } else { 2374 sprintf(program, "raidstop %s", raid_device); 2375 } 2251 2376 #endif 2252 2377 log_msg(1, "program = %s", program); -
branches/2.0.8/mondo/mondo/mondorestore/mondo-restore.c
r519 r576 837 837 } 838 838 839 fmt_errs = format_everything(mountlist, FALSE );839 fmt_errs = format_everything(mountlist, FALSE, raidlist); 840 840 if (!fmt_errs) { 841 841 log_to_screen … … 855 855 if (ask_me_yes_or_no 856 856 ("Do you want to format your hard drives?")) { 857 fmt_errs = format_everything(mountlist, TRUE );857 fmt_errs = format_everything(mountlist, TRUE, raidlist); 858 858 if (!fmt_errs) { 859 859 done = TRUE; … … 1162 1162 system("sync"); 1163 1163 log_to_screen("Please wait. This may take a few minutes."); 1164 res += format_everything(mountlist, FALSE );1164 res += format_everything(mountlist, FALSE, raidlist); 1165 1165 } 1166 1166 paranoid_fclose(g_fprep); … … 3415 3415 } 3416 3416 3417 if (argc == 4&& strcmp(argv[1], "--mdconv") == 0) {3418 finish(create_raidtab_from_mdstat(argv[2] , argv[3]));3417 if (argc == 3 && strcmp(argv[1], "--mdconv") == 0) { 3418 finish(create_raidtab_from_mdstat(argv[2])); 3419 3419 } 3420 3420 … … 3515 3515 strcpy(g_mountlist_fname, "/tmp/mountlist.txt"); 3516 3516 load_mountlist(mountlist, g_mountlist_fname); 3517 res = format_everything(mountlist, FALSE );3517 res = format_everything(mountlist, FALSE, raidlist); 3518 3518 finish(res); 3519 3519 } -
branches/2.0.8/mondo/mondo/mondorestore/mondo-rstr-tools.c
r425 r576 2585 2585 int wait_for_percentage) 2586 2586 { 2587 struct s_mdstat *mdstat;2587 struct raidlist_itself *raidlist; 2588 2588 int unfinished_mdstat_devices = 9999, i; 2589 2589 char *screen_message; 2590 2590 2591 2591 malloc_string(screen_message); 2592 mdstat = malloc(sizeof(struct s_mdstat));2592 raidlist = malloc(sizeof(struct raidlist_itself)); 2593 2593 2594 2594 assert(wait_for_percentage <= 100); 2595 2595 iamhere("Help, my boat is sync'ing. (Get it? Urp! Urp!)"); 2596 2596 while (unfinished_mdstat_devices > 0) { 2597 if (read_mdstat(mdstat, mdstat_file)) { 2598 log_to_screen("Sorry, cannot read %s", mdstat_file); 2597 // FIXME: Prefix '/dev/' should really be dynamic! 2598 if (parse_mdstat(raidlist, "/dev/")) { 2599 log_to_screen("Sorry, cannot read %s", MDSTAT_FILE); 2600 log_msg(1,"Sorry, cannot read %s", MDSTAT_FILE); 2599 2601 return; 2600 2602 } 2601 for (unfinished_mdstat_devices = i = 0; i < mdstat->entries; i++) {2602 if ( mdstat->el[i].progress < wait_for_percentage) {2603 for (unfinished_mdstat_devices = i = 0; i <= raidlist->entries; i++) { 2604 if (raidlist->el[i].progress < wait_for_percentage) { 2603 2605 unfinished_mdstat_devices++; 2604 sprintf(screen_message, "Sync'ing /dev/md%d", 2605 mdstat->el[i].md); 2606 log_msg(1,"Sync'ing %s (i=%d)", raidlist->el[i].raid_device, i); 2607 sprintf(screen_message, "Sync'ing %s", 2608 raidlist->el[i].raid_device); 2606 2609 open_evalcall_form(screen_message); 2607 if ( mdstat->el[i].progress == -1) // delayed while another partition inits2610 if (raidlist->el[i].progress == -1) // delayed while another partition inits 2608 2611 { 2609 2612 continue; 2610 2613 } 2611 while (mdstat->el[i].progress < wait_for_percentage) { 2612 update_evalcall_form(mdstat->el[i].progress); 2614 while (raidlist->el[i].progress < wait_for_percentage) { 2615 log_msg(1,"Percentage sync'ed: %d", raidlist->el[i].progress); 2616 update_evalcall_form(raidlist->el[i].progress); 2613 2617 sleep(2); 2614 if (read_mdstat(mdstat, mdstat_file)) { 2618 // FIXME: Prefix '/dev/' should really be dynamic! 2619 if (parse_mdstat(raidlist, "/dev/")) { 2615 2620 break; 2616 2621 } … … 2621 2626 } 2622 2627 paranoid_free(screen_message); 2623 paranoid_free( mdstat);2624 } 2628 paranoid_free(raidlist); 2629 } -
branches/2.0.8/mondo/mondo/mondorestore/mondoprep.h
r128 r576 58 58 int start_all_raid_devices(struct mountlist_itself *); 59 59 int stop_all_raid_devices(struct mountlist_itself *); 60 int format_everything(struct mountlist_itself *, bool );60 int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *); 61 61 int partition_device(FILE *, const char *, int, int, const char *, 62 62 long long); … … 65 65 int partition_device_with_fdisk(FILE *, const char *, int, int, 66 66 const char *, long long); 67 int format_device(char *, char * );67 int format_device(char *, char *, struct raidlist_itself *); 68 68 int partition_drive(struct mountlist_itself *, char *); 69 69 int partition_everything(struct mountlist_itself *); -
branches/2.0.8/mondo/mondo/mondorestore/mr-externs.h
r128 r576 27 27 extern int edit_mountlist(char *mountlist_fname, struct mountlist_itself *, 28 28 struct raidlist_itself *); 29 extern int format_everything(struct mountlist_itself *, bool );30 extern int format_device(char *, char * );29 extern int format_everything(struct mountlist_itself *, bool, struct raidlist_itself *); 30 extern int format_device(char *, char *, struct raidlist_itself *); 31 31 extern void finish(int); 32 32 extern void free_filelist(struct s_node *); -
branches/2.0.8/mondo/mondo/post-nuke.sample/usr/bin/post-nuke
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/etc
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ask-me-a-question
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/compare-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/edit-mountlist
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-MR
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/grub-install.patched
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-elilo
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-fstab
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-grub
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/hack-lilo
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/ide-opt-off
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/label-partitions-as-necessary
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/make-me-bootable
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/mount-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/raw-MR
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/restore-bigfiles-from-iso
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabelilo-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabgrub-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stablilo-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/stabraw-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/mondo/unmount-subroutine-me
-
Property svn:unix-mode
set to
755
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr.bin
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
-
branches/2.0.8/mondo/mondo/restore-scripts/usr/bin
-
Property svn:unix-mode
set to
restore-scripts/
-
Property svn:unix-mode
set to
Note:
See TracChangeset
for help on using the changeset viewer.