Mount Windows 7 Dynamic Disc with Raid 1 (Mirror)

Source:

http://ubuntuforums.org/showthread.php?t=184934
http://ubuntuforums.org/showthread.php?t=833653&highlight=dynamic+disk
http://ubuntuforums.org/showthread.php?t=1776909
http://ubuntuforums.org/showthread.php?t=2102917
http://askubuntu.com/questions/112731/win7-ubuntu-11-10-win-dynamic-disk-raid-1


http://forums.fedoraforum.org/archive/index.php/t-256817.html
http://forums.fedoraforum.org/showthread.php?t=256817

http://superuser.com/questions/377646/how-do-i-mount-a-software-raid1-mirror-created-by-windows-in-linux-using-mdadm
http://cateee.net/lkddb/web-lkddb/LDM_PARTITION.html
http://community.spiceworks.com/topic/396328-software-raid-1-windows-server-2k3
http://www.techques.com/question/24-112731/Win7----Ubuntu-11.10---Win-Dynamic-Disk-Raid-1
http://notesbytom.wordpress.com/2012/06/14/linux-support-for-windows-dynamic-disks/
http://www.unidata.ucar.edu/software/ldm/
http://bigli.ch/howto-access-windows-spanned-dynamic-disks-with-ubuntu/
http://stackoverflow.com/questions/8427372/windows-spanned-disks-ldm-restoration-with-linux/11578623#11578623
http://stackoverflow.com/questions/8427372/windows-spanned-disks-ldm-restoration-with-linux
http://forums-lb.gentoo.org/viewtopic-t-717208-start-0.html
http://tuxera.com/forum/viewtopic.php?f=3&t=1125
https://bbs.archlinux.org/viewtopic.php?id=158108

http://blogs.technet.com/b/askcore/archive/2010/02/18/understanding-the-2-tb-limit-in-windows-storage.aspx
http://filesystems.996266.n3.nabble.com/Windows-7-Dynamic-Disks-and-LDM-td6942.html

‘uname’ -r

Output:

3.11.10-11-desktop

modprobe dm_mod

vi /etc/modprobe.d/10-windowsraid.conf # to load at startup/boot

dm-mod

cat /proc/partitions

Output:

major minor  #blocks  name

   8       32 2930266584 sdc
   8       33       1024 sdc1
   8       34     130048 sdc2
   8       35 2930135478 sdc3
   8       48 2930266584 sdd
   8       49       1024 sdd1
   8       50     130048 sdd2
   8       51 2930135478 sdd3

gdisk -l /dev/sdc

Output:


GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): C2862184-CC99-45EA-8E59-5A8471E19F65
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2081   1024.0 KiB  4201  LDM metadata partition
   2            2082          262177   127.0 MiB   0C01  Microsoft reserved ...
   3          262178      5860533134   2.7 TiB     4200  LDM data partition

gdisk -l /dev/sdd

Output:


GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdd: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 5E304703-A9D5-4F6D-98D1-10E0D190589E
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2081   1024.0 KiB  4201  LDM metadata partition
   2            2082          262177   127.0 MiB   0C01  Microsoft reserved ...
   3          262178      5860533134   2.7 TiB     4200  LDM data partition   

fdisk -l /dev/sdc

Output:


Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0xfb634b2c   

fdisk -l /dev/sdd

Output:


Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes, 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0xfb634b22

mdadm --build /dev/md136 --chunk=64 --level=mirror --raid-devices=2 /dev/sdc2 /dev/sdd2

Output:

mdadm: array /dev/md136 built and started.

mdadm --build /dev/md135 --chunk=64 --level=mirror --raid-devices=2 /dev/sdc1 /dev/sdd1

Output:

mdadm: array /dev/md135 built and started.

mdadm --build /dev/md137 --chunk=64 --level=mirror --raid-devices=2 /dev/sdc3 /dev/sdd3

Output:

mdadm: array /dev/md137 built and started.

dmesg | grep md

Output:


[331158.436530] md: nonpersistent superblock ...
[331158.436536] md: bind<sdc3>
[331158.436567] md: nonpersistent superblock ...
[331158.436569] md: bind<sdd3>
[331158.438824] md/raid1:md137: not clean -- starting background reconstruction
[331158.438827] md/raid1:md137: active with 2 out of 2 mirrors
[331158.438847] md137: detected capacity change from 0 to 3000458729984
[331158.438883] RAID1 conf printout:
[331158.438888]  --- wd:2 rd:2
[331158.438891]  disk 0, wo:0, o:1, dev:sdc3
[331158.438894]  disk 1, wo:0, o:1, dev:sdd3

[331395.523375] md: nonpersistent superblock ...
[331395.523386] md: bind<sdc2>
[331395.523449] md: nonpersistent superblock ...
[331395.523454] md: bind<sdd2>
[331395.527402] md/raid1:md136: not clean -- starting background reconstruction
[331395.527412] md/raid1:md136: active with 2 out of 2 mirrors
[331395.527466] md136: detected capacity change from 0 to 133169152
[331395.527548] RAID1 conf printout:
[331395.527562]  --- wd:2 rd:2
[331395.527569]  disk 0, wo:0, o:1, dev:sdc2
[331395.527574]  disk 1, wo:0, o:1, dev:sdd2
[331395.530468]  md136: unknown partition table

[331408.044033] md: nonpersistent superblock ...
[331408.044044] md: bind<sdc1>
[331408.044146] md: nonpersistent superblock ...
[331408.044151] md: bind<sdd1>
[331408.047861] md/raid1:md135: not clean -- starting background reconstruction
[331408.047871] md/raid1:md135: active with 2 out of 2 mirrors
[331408.047922] md135: detected capacity change from 0 to 1048576
[331408.048010] RAID1 conf printout:
[331408.048017]  --- wd:2 rd:2
[331408.048023]  disk 0, wo:0, o:1, dev:sdc1
[331408.048028]  disk 1, wo:0, o:1, dev:sdd1
[331408.051180]  md135: unknown partition table

ll /dev | grep md

Output:


drwxr-xr-x   2 root  root            80 May 27 19:47 md
brw-rw----   1 root  disk        9, 125 May 30 08:28 md125
brw-rw----   1 root  disk        9, 126 May 30 08:28 md126
brw-rw----   1 root  disk        9, 135 May 30 13:33 md135
brw-rw----   1 root  disk        9, 136 May 30 13:33 md136
brw-rw----   1 root  disk        9, 137 May 30 13:29 md137

fdisk -l /dev/md135

Output:


Disk /dev/md135: 1 MB, 1048576 bytes, 2048 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Alignment offset: 3072 bytes

fdisk -l /dev/md136

Output:


Disk /dev/md136: 133 MB, 133169152 bytes, 260096 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Alignment offset: 3072 bytes

fdisk -l /dev/md137

Output:


Disk /dev/md137: 3000.5 GB, 3000458729984 bytes, 5860270957 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Alignment offset: 3072 bytes

mount /dev/md137 /data/ntfsvolumes/games/

Output:


mount: /dev/md137 is write-protected, mounting read-only                                  
mount: wrong fs type, bad option, bad superblock on /dev/md137,                           
       missing codepage or helper program, or other error                                 
                                                                                          
       In some cases useful info is found in syslog - try                                 
       dmesg | tail or so.


mount -t fuse /dev/md137 /data/ntfsvolumes/games/

Output:

/bin/sh: /dev/md137: Permission denied

mount -t ntfs /dev/md137 /data/ntfsvolumes/games/

Output:


NTFS signature is missing.
Failed to mount '/dev/md137': Invalid argument
The device '/dev/md137' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

mount -t ntfs-3g /dev/md137 /data/ntfsvolumes/games/

Output:


NTFS signature is missing.
Failed to mount '/dev/md137': Invalid argument
The device '/dev/md137' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

parted -l

Output:


Model: ATA WDC WD30EURS-63R (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                          Flags
 1      17.4kB  1066kB  1049kB               LDM metadata partition
 2      1066kB  134MB   133MB                Microsoft reserved partition  msftres
 3      134MB   3001GB  3000GB               LDM data partition


Model: ATA WDC WD30EURS-63R (scsi)
Disk /dev/sdd: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                          Flags
 1      17.4kB  1066kB  1049kB               LDM metadata partition
 2      1066kB  134MB   133MB                Microsoft reserved partition  msftres
 3      134MB   3001GB  3000GB               LDM data partition


Error: /dev/md135: unrecognised disk label
Model: Linux Software RAID Array (md)                                     
Disk /dev/md135: 1049kB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags: 

Error: /dev/md136: unrecognised disk label
Model: Linux Software RAID Array (md)                                     
Disk /dev/md136: 133MB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags: 

Error: /dev/md137: unrecognised disk label
Model: Linux Software RAID Array (md)                                     
Disk /dev/md137: 3000GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:

Found libldm to be the solution, but the package is yet not aviable on OpenSuSE 13.1 …
Is it possible to mount Windows 7 Dynamic Disks on OpenSuSE 13.1 ???

/etc/modprobe.d does not load anything at startup, nor has dm-mod anything to do with Windows LDM.

cat /proc/partitions

Output:

major minor  #blocks  name

8 32 2930266584 sdc
8 33 1024 sdc1
8 34 130048 sdc2
8 35 2930135478 sdc3

gdisk -l /dev/sdc

Output:

GPT fdisk (gdisk) version 0.8.10

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): C2862184-CC99-45EA-8E59-5A8471E19F65
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number Start (sector) End (sector) Size Code Name
1 34 2081 1024.0 KiB 4201 LDM metadata partition
2 2082 262177 127.0 MiB 0C01 Microsoft reserved …
3 262178 5860533134 2.7 TiB 4200 LDM data partition

mdadm --build /dev/md135 --chunk=64 --level=mirror --raid-devices=2 /dev/sdc1 /dev/sdd1

Output:

mdadm: array /dev/md135 built and started.

You just destroyed LDM metadata on one disk.

mdadm --build /dev/md137 --chunk=64 --level=mirror --raid-devices=2 /dev/sdc3 /dev/sdd3

Output:

mdadm: array /dev/md137 built and started.

mount -t ntfs /dev/md137 /data/ntfsvolumes/games/

Output:

NTFS signature is missing.
Failed to mount ‘/dev/md137’: Invalid argument
The device ‘/dev/md137’ doesn’t seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

That’s correct. sdc3/sdd3 are containers for LDM volumes. There can be any number of volumes defined. And volumes may not start from the beginning of container. Again - it quite possible that you already destroyed data by blindly mirroring containers.

Is it possible to mount Windows 7 Dynamic Disks on OpenSuSE 13.1 ???

Linux kernel support LDM on MBR disks; in this case it would present each volume as separate partition. But you have GPT disks; LDM on GPT is not supported directly by kernel. I guess the only solution would be to find user space tool that can parse LDM database, and manually configure loop/DM device over them. So yes, ldmtool would be you friend here. It does not look like there is package for openSUSE, so you will need to compile it from source. But you first need to make sure your data is still accessible - after all your experiments there are very good chances they are not :frowning:

See modules-load.d(5) aka:

man 5 modules-load.d

That’s quite a short man page 45 lines only, well at least in my version :slight_smile:

Here it is

printf '%s
' '# Load dm-mod at boot.' 'dm-mod' > /etc/modules-load.d/dm-mod.conf

Check what is in that file and if it was created.

cat /etc/modules-load.d/dm-mod.conf 

# Load dm-mod at boot.
dm-mod

Tada! well assuming the name of the module is correct of course :wink:

I have tried with empty Windows-Softraid (only a textfile for access test)…
LDM metadata was not destroyed, Windows is still able to fully access the partitions.

Without modprobing dm-mod, building of array was not possible.
So i have to change to /etc/modules-load.d/ for loading modules at startup/boot ?!?

There must be some other problem. dm-mod is not needed for mdadm.

linux-1a7f:~ # lsmod | grep dm
linux-1a7f:~ # mdadm --detail --verbose --scan
ARRAY /dev/md234 level=raid1 num-devices=2 metadata=
   devices=/dev/loop0,/dev/loop1

The man pages says that you need to create a file with the name of the module and with the extension .conf inside the* /etc/modules-load.d**. That is what that code does. The man pages says it all :).

Name is arbitrary. Whatever helps you to remember what this file contains :slight_smile:

Sure, like This_File_Contains_The_dm-mod_Kernel_Module.conf lol!

Checked if LDM is enabled:

zgrep LDM /proc/config.gz


CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set

so the problem is as mentioned…

Linux kernel support LDM on MBR disks; in this case it would present each volume as separate partition. But you have GPT disks; LDM on GPT is not supported directly by kernel. I guess the only solution would be to find user space tool that can parse LDM database, and manually configure loop/DM device over them. So yes, ldmtool would be you friend here. It does not look like there is package for openSUSE, so you will need to compile it from source. But you first need to make sure your data is still accessible - after all your experiments there are very good chances they are not

the gpt table…
another prove:
http://filesystems.996266.n3.nabble.com/Windows-7-Dynamic-Disks-and-LDM-td6942.html

Source: http://www.rodsbooks.com/gdisk/

gdisk seems to be another solution, but its dependencies will uninstall a lot of other packages (kde4-packages)…

http://software.opensuse.org/package/gdisk?search_term=gdisk

bor@opensuse:~/src/systemd> rpm -qi gptfdisk
Name        : gptfdisk
Version     : 0.8.7
Release     : 2.1.2
Architecture: x86_64
...
Vendor      : openSUSE
URL         : http://rodsbooks.com/gdisk

but I am not sure I understand how it is related to your problem