Ignore:
Timestamp:
Aug 30, 2015, 2:33:49 AM (9 years ago)
Author:
Bruno Cornec
Message:
  • Adds a mr-device-mounted binary to MondoRescue (replaces the code of the C function is_this_device_mounted) and the corresponding perl function (mr_device_mounted) to handle cases where a mounted device has a different name than the one seen on mount (e.g. /dev/rhel/root and /dev/mapper/rhel-root)
  • Adds perl function mr_file_copy_and_erase_hash to empty the hash generated in mr_file_read_all_link and thus avoid filling the hash it generates, which is useful for a recursive function, but not when called multiple times from another perl script. To be improved later on.
  • Adapt build procedure to the new binary (tested on Mageia 5 and RHEL7)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/MondoRescue/lib/MondoRescue/Disk.pm

    r3432 r3447  
    1313use ProjectBuilder::Base;
    1414use English;
     15use MondoRescue::File;
    1516
    1617# Inherit from the "Exporter" module which handles exporting functions.
     
    2223
    2324our @ISA = qw(Exporter);
    24 our @EXPORT = qw(mr_disk_type);
     25our @EXPORT = qw(mr_disk_type mr_device_mounted);
    2526
    2627=pod
     
    6667
    6768
     69=item B<mr_device_mounted>
     70
     71This function returns the mount point if a device is mounted and undef if not.
     72
     73=cut
     74
     75sub mr_device_mounted {
     76
     77my $device = shift;
     78
     79return(1) if ((not defined $device) || ($device =~ "^/sys|^/proc"));
     80
     81my $h = mr_file_read_all_link($device);
     82# Preserve that hash locally before earsing it to reuse another one
     83my $h2 = mr_file_copy_and_erase_hash($h);
     84
     85foreach my $f (keys %$h2) {
     86    pb_log(2,"Working on device $f\n");
     87    # TODO: get them from a conf file - FreeBSD needs swapinfo for swap request
     88    foreach my $dev ("mount","cat /proc/swaps") {
     89        # Look for the device in the command result
     90        open(MOUNT,"$dev|") || die "Unable to execute the $dev command";
     91        while (<MOUNT>) {
     92            my ($mntp,$void) = split('\s',$_,2);
     93            $h = mr_file_read_all_link($mntp);
     94            foreach my $m (keys %$h) {
     95                pb_log(2,"== Working on mounted device $m\n");
     96                if ($m eq $f) {
     97                    # Find the mountpoint and return it
     98                    my ($void1,$mountpoint,$void2) = split('\s',$void);
     99                    pb_log(2,"*** Found $m on $mountpoint\n") if (defined $mountpoint);
     100                    return($mountpoint);
     101                }
     102            }
     103            my $h3 = mr_file_copy_and_erase_hash($h);
     104        }
     105        close(MOUNT);
     106    }
     107}
     108
     109# Not found
     110return(undef);
     111}
Note: See TracChangeset for help on using the changeset viewer.