X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Finspect_fs.c;h=2b8c8e9bcbdcf465eb9a1957b6f3b8acb2e13608;hb=ae45cee728039d7724fc73e5ffb2550c8054d268;hp=25336265f9d24144a22631ed436588c5b4b67338;hpb=5332515db3ed87716d702ef2b973816a73ab5702;p=libguestfs.git diff --git a/src/inspect_fs.c b/src/inspect_fs.c index 2533626..2b8c8e9 100644 --- a/src/inspect_fs.c +++ b/src/inspect_fs.c @@ -120,9 +120,16 @@ guestfs___check_for_filesystem_on (guestfs_h *g, const char *device, /* Try mounting the device. As above, ignore errors. */ g->error_cb = NULL; - int r = guestfs_mount_ro (g, device, "/"); - if (r == -1 && vfs_type && STREQ (vfs_type, "ufs")) /* Hack for the *BSDs. */ + int r; + if (vfs_type && STREQ (vfs_type, "ufs")) { /* Hack for the *BSDs. */ + /* FreeBSD fs is a variant of ufs called ufs2 ... */ r = guestfs_mount_vfs (g, "ro,ufstype=ufs2", "ufs", device, "/"); + if (r == -1) + /* while NetBSD and OpenBSD use another variant labeled 44bsd */ + r = guestfs_mount_vfs (g, "ro,ufstype=44bsd", "ufs", device, "/"); + } else { + r = guestfs_mount_ro (g, device, "/"); + } free (vfs_type); g->error_cb = old_error_cb; if (r == -1) @@ -183,6 +190,33 @@ check_filesystem (guestfs_h *g, const char *device, if (guestfs___check_freebsd_root (g, fs) == -1) return -1; } + else if (is_dir_etc && + is_dir_bin && + guestfs_is_file (g, "/etc/fstab") > 0 && + guestfs_is_file (g, "/etc/release") > 0) { + /* Ignore /dev/sda1 which is a shadow of the real root filesystem + * that is probably /dev/sda5 (see: + * http://www.freebsd.org/doc/handbook/disk-organization.html) + */ + if (match (g, device, re_first_partition)) + return 0; + + fs->is_root = 1; + fs->content = FS_CONTENT_NETBSD_ROOT; + fs->format = OS_FORMAT_INSTALLED; + if (guestfs___check_netbsd_root (g, fs) == -1) + return -1; + } + /* Hurd root? */ + else if (guestfs_is_file (g, "/hurd/console") > 0 && + guestfs_is_file (g, "/hurd/hello") > 0 && + guestfs_is_file (g, "/hurd/null") > 0) { + fs->is_root = 1; + fs->content = FS_CONTENT_HURD_ROOT; + fs->format = OS_FORMAT_INSTALLED; /* XXX could be more specific */ + if (guestfs___check_hurd_root (g, fs) == -1) + return -1; + } /* Linux root? */ else if (is_dir_etc && is_dir_bin &&