Index: b/src/GParted_Core.cc
===================================================================
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -38,8 +38,14 @@
 #include "../include/reiser4.h"
 #include "../include/ufs.h"
 
+#include <set>
 #include <cerrno>
+#include <cstring>
 #include <sys/statvfs.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
 
 std::vector<Glib::ustring> libparted_messages ; //see ped_exception_handler()
 
@@ -156,6 +162,51 @@
     			}
     		}
     		proc_partitions .close() ;
+
+    		std::set<unsigned int> dm_majors;
+    		std::ifstream proc_devices( "/proc/devices" ) ;
+    		if ( proc_devices )
+    		{
+    			//parse device numbers from /proc/devices
+    			std::string line ;
+    			bool seen_bd = false ;
+    			while ( getline( proc_devices, line ) )
+    			{
+    				if ( ! seen_bd )
+    				{
+    					if ( ! line .compare( 0, 14, "Block devices:" ) == 0 )
+    						seen_bd = true ;
+    					continue ;
+    				}
+    				unsigned int major ;
+    				char c_str[256+1] ;
+    				if ( sscanf( line .c_str(), "%u %256s", &major, c_str ) == 2 )
+    					dm_majors .insert( major );
+    			}
+    			proc_devices .close() ;
+    		}
+
+    		DIR *mapper_dir = opendir( "/dev/mapper" );
+    		if ( mapper_dir )
+    		{
+    			struct dirent *mapper_entry ;
+    			while ( (mapper_entry = readdir( mapper_dir )) )
+    			{
+    				if ( strcmp( mapper_entry ->d_name, "." ) == 0 ||
+    					 strcmp( mapper_entry ->d_name, ".." ) == 0 ||
+    					 strcmp( mapper_entry ->d_name, "control" ) == 0 )
+    					continue ;
+    				std::string mapper_name = "/dev/mapper/" ;
+    				mapper_name += mapper_entry ->d_name ;
+    				struct stat st ;
+    				if ( stat( mapper_name .c_str(), &st ) != 0 )
+    					continue;
+    				if ( dm_majors .find( major( st.st_rdev ) ) != dm_majors .end() )
+    					//TODO avoid probing partition nodes for dmraid devices
+    					ped_device_get( mapper_name .c_str() ) ;
+    			}
+    			closedir( mapper_dir ) ;
+    		}
     	}
     	else
     	{
