Changeset 2682 in MondoRescue for branches/2.2.9/mondo/src/common/libmondo-devices.c
- Timestamp:
- Sep 10, 2010, 12:13:40 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mondo/src/common/libmondo-devices.c
r2636 r2682 1343 1343 1344 1344 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 */ 1354 int mount_media() 1355 { 1356 char *mount_cmd; 1357 int i, res; 1358 #ifdef __FreeBSD__ 1359 char mdd[32]; 1360 char *mddev = mdd; 1361 #endif 1362 1363 malloc_string(mount_cmd); 1364 assert(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 **************************************************************************/ 1345 1459 1346 1460 … … 1387 1501 if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso 1388 1502 || bkpinfo->backup_media_type == netfs) { 1389 log_msg(3, "Remounting CD");1390 1503 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 } 1418 1509 } 1419 1510 if ((res = what_number_cd_is_this()) != cd_number_i_want) { … … 2655 2746 log_it("isodir = %s", bkpinfo->isodir); 2656 2747 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 } 2658 2751 if (bkpinfo->netfs_user) { 2659 2752 log_it("netfs_user = '%s'", bkpinfo->netfs_user);
Note:
See TracChangeset
for help on using the changeset viewer.