Ignore:
Timestamp:
Sep 10, 2010, 12:13:40 AM (14 years ago)
Author:
Bruno Cornec
Message:
  • mount-media function is now placed in libmondo-devices.c as used by more programs.
  • Avoids calling mount_media when it's not mandatory (change the way mondorestore was working up to now but could solve some bugs reported)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mondo/src/common/libmondo-devices.c

    r2636 r2682  
    13431343
    13441344
     1345/**
     1346* Mount the CD-ROM or USB device at /mnt/cdrom.
     1347* @param bkpinfo The backup information structure. Fields used:
     1348* - @c bkpinfo->backup_media_type
     1349* - @c bkpinfo->disaster_recovery
     1350* - @c bkpinfo->isodir
     1351* - @c bkpinfo->media_device
     1352* @return 0 for success, nonzero for failure.
     1353*/
     1354int mount_media()
     1355{
     1356char *mount_cmd;
     1357int i, res;
     1358#ifdef __FreeBSD__
     1359char mdd[32];
     1360char *mddev = mdd;
     1361#endif
     1362
     1363malloc_string(mount_cmd);
     1364assert(bkpinfo != NULL);
     1365
     1366    if (bkpinfo->backup_media_type == tape
     1367        || bkpinfo->backup_media_type == udev) {
     1368        log_msg(8, "Tape/udev. Therefore, no need to mount a media.");
     1369        paranoid_free(mount_cmd);
     1370        return 0;
     1371    }
     1372
     1373    if (!run_program_and_log_output("mount | grep -F " MNT_CDROM, FALSE)) {
     1374        log_msg(2, "mount_media() - media already mounted. Fair enough.");
     1375        paranoid_free(mount_cmd);
     1376        return (0);
     1377    }
     1378
     1379    if (bkpinfo->backup_media_type == netfs) {
     1380        log_msg(2, "Mounting for Network thingy");
     1381        log_msg(2, "isodir = %s", bkpinfo->isodir);
     1382        if ((!bkpinfo->isodir[0] || !strcmp(bkpinfo->isodir, "/"))
     1383            && am_I_in_disaster_recovery_mode()) {
     1384            strcpy(bkpinfo->isodir, "/tmp/isodir");
     1385            log_msg(1, "isodir is being set to %s", bkpinfo->isodir);
     1386        }
     1387#ifdef __FreeBSD__
     1388        sprintf(mount_cmd, "/mnt/isodir/%s/%s/%s-%d.iso", bkpinfo->isodir,
     1389            bkpinfo->netfs_remote_dir, bkpinfo->prefix, g_current_media_number);
     1390        mddev = make_vn(mount_cmd);
     1391        sprintf(mount_cmd, "mount_cd9660 -r %s " MNT_CDROM, mddev);
     1392#else
     1393        sprintf(mount_cmd, "mount %s/%s/%s-%d.iso -t iso9660 -o loop,ro %s",
     1394            bkpinfo->isodir, bkpinfo->netfs_remote_dir,
     1395            bkpinfo->prefix, g_current_media_number, MNT_CDROM);
     1396#endif
     1397
     1398    } else if (bkpinfo->backup_media_type == iso) {
     1399#ifdef __FreeBSD__
     1400        sprintf(mount_cmd, "%s/%s-%d.iso", bkpinfo->isodir,
     1401            bkpinfo->prefix, g_current_media_number);
     1402        mddev = make_vn(mount_cmd);
     1403        sprintf(mount_cmd, "mount_cd9660 -r %s %s", mddev, MNT_CDROM);
     1404#else
     1405        sprintf(mount_cmd, "mount %s/%s-%d.iso -t iso9660 -o loop,ro %s",
     1406            bkpinfo->isodir, bkpinfo->prefix, g_current_media_number, MNT_CDROM);
     1407#endif
     1408    } else if (bkpinfo->backup_media_type == usb) {
     1409        sprintf(mount_cmd, "mount -t vfat %s %s", bkpinfo->media_device, MNT_CDROM);
     1410    } else if (strstr(bkpinfo->media_device, "/dev/")) {
     1411#ifdef __FreeBSD__
     1412        sprintf(mount_cmd, "mount_cd9660 -r %s %s", bkpinfo->media_device,
     1413        MNT_CDROM);
     1414#else
     1415        sprintf(mount_cmd, "mount %s -t iso9660 -o ro %s",
     1416        bkpinfo->media_device, MNT_CDROM);
     1417#endif
     1418    } else {
     1419        if (bkpinfo->disaster_recovery
     1420            && does_file_exist("/tmp/CDROM-LIVES-HERE")) {
     1421            strcpy(bkpinfo->media_device,
     1422                last_line_of_file("/tmp/CDROM-LIVES-HERE"));
     1423        } else {
     1424            find_cdrom_device(bkpinfo->media_device, TRUE);
     1425        }
     1426
     1427#ifdef __FreeBSD__
     1428    sprintf(mount_cmd, "mount_cd9660 -r %s %s", bkpinfo->media_device,
     1429        MNT_CDROM);
     1430#else
     1431    sprintf(mount_cmd, "mount %s -t iso9660 -o ro %s",
     1432        bkpinfo->media_device, MNT_CDROM);
     1433#endif
     1434    }
     1435
     1436    log_msg(2, "(mount_media) --- command = %s", mount_cmd);
     1437    for (i = 0; i < 2; i++) {
     1438        res = run_program_and_log_output(mount_cmd, FALSE);
     1439        if (!res) {
     1440            break;
     1441        } else {
     1442            log_msg(2, "Failed to mount device.");
     1443            sleep(5);
     1444            run_program_and_log_output("sync", FALSE);
     1445        }
     1446    }
     1447
     1448    if (res) {
     1449        log_msg(2, "Failed, despite %d attempts", i);
     1450    } else {
     1451        log_msg(2, "Mounted media drive OK");
     1452    }
     1453    paranoid_free(mount_cmd);
     1454    return (res);
     1455}
     1456/**************************************************************************
     1457*END_MOUNT_CDROM                                                         *
     1458**************************************************************************/
    13451459
    13461460
     
    13871501    if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso
    13881502        || bkpinfo->backup_media_type == netfs) {
    1389         log_msg(3, "Remounting CD");
    13901503        g_ISO_restore_mode = TRUE;
    1391 // FIXME --- I'm tempted to do something about this...
    1392 // Why unmount and remount again and again?
    1393         if (is_this_device_mounted(MNT_CDROM)) {
    1394             run_program_and_log_output("umount " MNT_CDROM, 5);
    1395         }
    1396         sprintf(tmp, "mkdir -p %s/isodir &> /dev/null", bkpinfo->tmpdir);
    1397         (void)system(tmp);
    1398         sprintf(tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir,
    1399                 bkpinfo->netfs_remote_dir, bkpinfo->prefix,
    1400                 cd_number_i_want);
    1401         if (!does_file_exist(tmp)) {
    1402             sprintf(tmp, "%s/isodir/%s/%s-%d.iso", bkpinfo->tmpdir,
    1403                     bkpinfo->netfs_remote_dir, bkpinfo->prefix,
    1404                     cd_number_i_want);
    1405             if (does_file_exist(tmp)) {
    1406                 log_msg(1,
    1407                         "FIXME - hacking bkpinfo->isodir from '%s' to %s/isodir",
    1408                         bkpinfo->isodir, bkpinfo->tmpdir);
    1409                 sprintf(bkpinfo->isodir, "%s/isodir", bkpinfo->tmpdir);
    1410             }
    1411         }
    1412         log_msg(3, "Mounting %s at %s", tmp, MNT_CDROM);
    1413         if (mount_CDROM_here(tmp, MNT_CDROM)) {
    1414             fatal_error("Mommy!");
    1415         }
    1416 //    g_current_media_number = cd_number_i_want;
    1417 //    return;
     1504        if (!is_this_device_mounted(MNT_CDROM)) {
     1505            log_msg(3, "Mounting media");
     1506            g_current_media_number = cd_number_i_want;
     1507            mount_media();
     1508        }
    14181509    }
    14191510    if ((res = what_number_cd_is_this()) != cd_number_i_want) {
     
    26552746    log_it("isodir = %s", bkpinfo->isodir);
    26562747    log_it("netfs_mount = '%s'", bkpinfo->netfs_mount);
    2657     log_it("netfs_proto = '%s'", bkpinfo->netfs_proto);
     2748    if (bkpinfo->netfs_proto) {
     2749        log_it("netfs_proto = '%s'", bkpinfo->netfs_proto);
     2750    }
    26582751    if (bkpinfo->netfs_user) {
    26592752        log_it("netfs_user = '%s'", bkpinfo->netfs_user);
Note: See TracChangeset for help on using the changeset viewer.