--- src/lowntfs-3g.c.old 2012-09-07 09:46:19.000000000 +0200 +++ src/lowntfs-3g.c 2012-09-07 09:46:19.000000000 +0200 @@ -4112,6 +4112,12 @@ if (err) goto err_out; + /* Force read-only mount if the device was found read-only */ + if (!ctx->ro && NVolReadOnly(ctx->vol)) { + ctx->ro = TRUE; + if (ntfs_strinsert(&parsed_options, ",ro")) + goto err_out; + } /* We must do this after ntfs_open() to be able to set the blksize */ if (ctx->blkdev && set_fuseblk_options(&parsed_options)) goto err_out; --- src/ntfs-3g.c.old 2012-09-07 09:46:19.000000000 +0200 +++ src/ntfs-3g.c 2012-09-07 09:46:19.000000000 +0200 @@ -3798,6 +3798,12 @@ if (err) goto err_out; + /* Force read-only mount if the device was found read-only */ + if (!ctx->ro && NVolReadOnly(ctx->vol)) { + ctx->ro = TRUE; + if (ntfs_strinsert(&parsed_options, ",ro")) + goto err_out; + } /* We must do this after ntfs_open() to be able to set the blksize */ if (ctx->blkdev && set_fuseblk_options(&parsed_options)) goto err_out; --- libntfs-3g/volume.c.old 2012-09-07 09:46:18.000000000 +0200 +++ libntfs-3g/volume.c 2012-09-07 09:46:19.000000000 +0200 @@ -512,8 +512,20 @@ /* ...->open needs bracketing to compile with glibc 2.7 */ if ((dev->d_ops->open)(dev, NVolReadOnly(vol) ? O_RDONLY: O_RDWR)) { - ntfs_log_perror("Error opening '%s'", dev->d_name); - goto error_exit; + if (!NVolReadOnly(vol) && (errno == EROFS)) { + if ((dev->d_ops->open)(dev, O_RDONLY)) { + ntfs_log_perror("Error opening read-only '%s'", + dev->d_name); + goto error_exit; + } else { + ntfs_log_info("Can only open '%s' as read-only\n", + dev->d_name); + NVolSetReadOnly(vol); + } + } else { + ntfs_log_perror("Error opening '%s'", dev->d_name); + goto error_exit; + } } /* Attach the device to the volume. */ vol->dev = dev;