GNU/Linux >> Znalost Linux >  >> Linux

Obnova Windows Spanned Disks (LDM) s Linuxem?

Zde je (mnohem jednodušší) odpověď, nyní ldmtool existuje.

ldmtool čte metadata LDM (aka Windows Dynamic Disks) a (mimo jiné) vytváří položky mapovače zařízení pro odpovídající jednotky, diskové oddíly a pole RAID, což vám následně umožní přistupovat k nim a připojit je stejně jako ostatní bloková zařízení v Linuxu.

Program má několik omezení, většinou způsobených skutečností, že vůbec nemění metadata LDM. V Linuxu tedy nemůžete vytvářet LDM disky (k tomu použijte Windows) a neměli byste v režimu čtení-zápis připojovat svazky RAID, na kterých chybí disky. (ldmtool nezmění metadata, aby odrážela, že k tomu došlo, a až Windows příště sestaví pole RAID, nastanou problémy, protože ne všechny disky budou synchronizované.)

Zde je postup:

  1. Instalace ldmtool na systémech Debian a Ubuntu zadejte apt-get install ldmtool . Podobně snadné by to mělo být na většině ostatních nedávných distribucí Linuxu.
  2. Spusťte ldmtool create all .
  3. Nyní byste měli mít v /dev/mapper spoustu nových položek. Najděte to správné (v mém případě pole RAID1, takže /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 ) a stačí jej připojit pomocí něčeho jako mount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 .

Chcete-li to provést automaticky při spouštění, budete pravděpodobně muset vložit volání ldm create all ve správném bodě spouštěcí sekvence, před obsahem /etc/fstab je namontován. Dobrý způsob, jak zavolat, by byl:

[ -x /usr/bin/ldmtool ] && ldmtool create all >/dev/null || true

Ale jak dosáhnout toho, aby se tento úryvek spustil ve správný čas během bootování, se bude hodně lišit v závislosti na distribuci, kterou používáte. Pro Ubuntu 13.10 jsem vložil uvedený řádek do /etc/init/mountall.conf , těsně před exec mountall ... volání na konci sekce skriptu. A nyní mohu připojit svůj oddíl Windows LDM RAID1 v /etc/fstab . Užijte si to!


Dobře, odpovím na svou vlastní otázku, abych se vyhnul stejné bolesti ostatním.

0. VAROVÁNÍ

V případě, že provádíte obnovu, VŽDY ZKOPÍRUJTE SVÉ DATA a pracujte na kopii. NEMĚŇTE původní „poškozená“ data. To bylo řečeno, čtěte dál.

1. Váš oddíl vypadá ...

Nainstalujte detektivní sadu a testovací disk. Doufám, že budou balíčky pro vaše distro :)

# mmls -t gpt LUN01
GUID Partition Table (EFI)
Offset Sector: 0
Units are in 512-byte sectors

    Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Safety Table
01:  -----   0000000000   0000000033   0000000034   Unallocated
02:  Meta    0000000001   0000000001   0000000001   GPT Header
03:  Meta    0000000002   0000000033   0000000032   Partition Table
04:  00      0000000034   0000002081   0000002048   LDM metadata partition
05:  01      0000002082   0000262177   0000260096   Microsoft reserved partition
06:  02      0000262178   1048576966   1048314789   LDM data partition
07:  -----   1048576967   1048576999   0000000033   Unallocated

Poznámka:testdisk vám poskytne stejné informace s méně podrobnostmi# testdisk /list LUN01

2. Extrahujte metadata disků

Všechny informace o pořadí disků, velikosti dat a dalších zašifrovaných atributech o oddílu naleznete v oddílu metadat LDM. W2k8 se od tohoto dokumentu tolik nezměnilo [2], i když některé velikosti jsou odlišné a některé atributy jsou nové (a zjevně neznámé)...

# dd if=LUN01 skip=33 count=2048 |xxd -a > lun01.metadata
# less lun01.metadata 

Na řádku 0002410 byste měli vidět název serveru. uklidňující ? Ale sledujeme pořadí disků a ID disku. Přejděte dolů.

2.1. Pořadí disků

Na řádku 0003210 byste měli vidět 'Disk1' následovaný dlouhým řetězcem.

0003200: 5642 4c4b 0000 001c 0000 0006 0000 0001  VBLK............
0003210: 0000 0034 0000 003a 0102 0544 6973 6b31  ...4...:...Disk1
0003220: 2437 3965 3830 3239 332d 3665 6231 2d31  $79e80293-6eb1-1
0003230: 3164 662d 3838 6463 2d30 3032 3662 3938  1df-88dc-0026b98
0003240: 3335 6462 3300 0000 0040 0000 0000 0000  [email protected]
0003250: 0048 0000 0000 0000 0000 0000 0000 0000  .H..............

To znamená, že první disk tohoto svazku je identifikován následujícím jedinečným ID (UID):79e80293-6eb1-11df-88dc-0026b9835db3Ale v tuto chvíli nevíme, který z disku má toto UID! Přesuňte se tedy na Disk2 záznam a poznamenejte si jeho UID a tak dále pro všechny disky, které jste měli ve svém svazku. Poznámka:Na základě mých zkušeností se mění pouze prvních 8 znaků, zbytek zůstává stejný. Zdá se, že W2k8 zvyšuje ID o 6. $ je oddělovač.

Např. :

Windows Disk1 UID : 79e80293-6eb1-11df-88dc-0026b9835db3
Windows Disk2 UID : 79e80299-...
Windows Disk3 UID : 79e8029f-...

2.2. Najděte UID disku

Přejděte na řádek 00e8200 (lun01.metadata). Měli byste najít 'PRIVHEAD'.

00e8200: 5052 4956 4845 4144 0000 2c41 0002 000c  PRIVHEAD..,A....
00e8210: 01cc 6d37 2a3f c84e 0000 0000 0000 0007  ..m7*?.N........
00e8220: 0000 0000 0000 07ff 0000 0000 0000 0740  [email protected]
00e8230: 3739 6538 3032 3939 2d36 6562 312d 3131  79e80299-6eb1-11
00e8240: 6466 2d38 3864 632d 3030 3236 6239 3833  df-88dc-0026b983
00e8250: 3564 6233 0000 0000 0000 0000 0000 0000  5db3............
00e8260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00e8270: 3162 3737 6461 3230 2d63 3731 372d 3131  1b77da20-c717-11
00e8280: 6430 2d61 3562 652d 3030 6130 6339 3164  d0-a5be-00a0c91d
00e8290: 6237 3363 0000 0000 0000 0000 0000 0000  b73c............
00e82a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00e82b0: 3839 3164 3065 3866 2d64 3932 392d 3131  891d0e8f-d929-11
00e82c0: 6530 2d61 3861 372d 3030 3236 6239 3833  e0-a8a7-0026b983
00e82d0: 3564 6235 0000 0000 0000 0000 0000 0000  5db5............
00e82e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

Jde nám o UID disku tohoto konkrétního disku. Vidíme:- ID disku :79e80299-6eb1-11df-88dc-0026b9835db3- ID hostitele :1b77da20-c717-11d0-a5be-00a0c91db73c- ID skupiny disků :8a991d35e 89-91d8e5006991d8e50

Takže tento disk s UID 79e80299-... je Windows Disk2, ale pro nás to byl Fyzický disk 1. Opravdu najděte toto UID v pořadí disků, které jste našli výše. Poznámka:Neexistuje žádné logické pořadí. Chci říct, že systém Windows rozhoduje o tom, jak nastavit pořadí disků, ne vy. Neexistuje tedy ŽÁDNÁ lidská logika a neočekávejte, že váš první disk bude Disk1.

Takže nepředpokládejte, že výše uvedený příkaz bude následovat nějakou lidskou logiku. Doporučuji vám projít všechna data LDM vašich disků a extrahovat jejich UID. (Pro extrahování informací PRIVHEAD můžete použít následující příkaz:dd if=LUNXX skip=1890 count=1 |xxd -a)

např.:

(Windows) Disk1 : 79e80293-... == Physical disk 2
(Windows) Disk2 : 79e80299-... == Physical disk 1
(Windows) Disk3 : 79e8029f-... == Physical disk 3

Jsem si jistý, že někde v metadatech LDM můžete najít typ svazku (spanned, RAID0, RAIDX a související velikosti pruhů) Nicméně jsem to nevykopal. Použil jsem metodu „zkusit a znovu zkusit“ najít svá data. Pokud tedy víte, jak nastavíte konfiguraci před dramatem, ušetříte si spoustu času.

3. Najděte souborový systém NTFS a svá data

Nyní nás zajímá velký kus dat, který chceme obnovit. V mém případě je to ~512 GB dat, takže nebudeme konvertovat celý inASCII. Opravdu jsem nehledal, jak Windows najdou začátek svého oddílu NTFS. Ale zjistil jsem, že to logicky začíná následujícím klíčovým slovem:R.NTFS. Pojďme to najít a najít offset, který budeme muset použít později, abychom viděli náš NTFS FS.

06:  02      0000262178   1048576966   1048314789   LDM data partition

V tomto příkladu data začínají na 262178 a jsou dlouhá 1048314789 sektorů

Výše jsme zjistili, že Disk1 (ze skupiny svazků) je ve skutečnosti 2. fyzický disk. Extrahujeme některé jeho informace, abychom zjistili, kde začíná oddíl NTFS.

# dd if=LUN02 skip=262178 count=4096 |xxd -a > lun02.DATASTART-4k
# less lun02.DATASTART-4k

0000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00fbc00: eb52 904e 5446 5320 2020 2000 0208 0000  .R.NTFS    .....
00fbc10: 0000 0000 00f8 0000 3f00 ff00 0008 0400  ........?.......
00fbc20: 0000 0000 8000 8000 ffaf d770 0200 0000  ...........p....

Zde vidíme, že NTFS začíná na 00fbc00. Takže s vědomím, že můžeme začít extrahovat naše data ze sektoru 262178 + 00fbc00 bajtů. Udělejme trochu hexadecimální na desítkovou konverzi s konverzí bajtů na sektor.

0xfbc00 bajtů =1031168 bajtů =1031168/512 sektorů =2014 sektorů

Náš oddíl NTFS tedy začíná na 262 178 + 2014 =264 192 sektorů. Tato hodnota bude offsetem, který později použijeme na všech discích. Nazvěme to offset NTFS. Celková velikost se samozřejmě tímto posunem zmenší. Takže nová velikost je:1048314789 – 2014 =1048312775 sektorů

4. Zkuste připojit/zobrazit data

Od nynějška to bude fungovat hned po vybalení, protože váš oddíl NTFS je v pořádku, nebo ne, protože to děláte, abyste obnovili některá data. Následující proces je stejný bez ohledu na váš stav. Vše následující je založeno na [1] (viz Odkazy dole)

Rozložený svazek vyplní jeden objem za druhým. Kde jako pruhovaný (RAID0) zkopíruje část dat na mnoho disků (také známý jako soubor je rozložen na mnoha discích). V mém případě jsem nevěděl, jestli je to rozložený nebo pruhovaný svazek. Nejjednodušší způsob, jak zjistit, zda váš svazek není plný, je zkontrolovat, zda máte na konci všech svazků mnoho nul. Pokud je to tento případ, pak je pruhovaný. Protože pokud je rozložený, pokud vyplní první disk, pak druhý. Nejsem si tím 100% jistý, ale pozoroval jsem to. Takže dd spoustu sektorů z konce datového oddílu LDM.

4.0 Příprava na přístup k vašim datům

Nejprve připojte svůj dd soubor nebo zařízení přes zařízení se zpětnou smyčkou s offsetem NTFS a velikostí, kterou jsme vypočítali výše. Nicméně offset a velikost musí být v bajtech, nikoli v sektorech, které mají být použity s losetup.offset =264192*512 =135266304size =1048312775*512 =536736140800

# losetup /dev/loop2 DDFILE_OR_DEVICE -o 135266304 --size 536736140800
# blockdev --getsize /dev/loop2
1048312775 <---- total size in sectors, same number than before

Poznámka:Pro připojení v režimu pouze pro čtení můžete přidat '-r'.

Výše uvedené proveďte pro všechny fyzické disky, které jsou součástí vašeho svazku. Zobrazit výsledek pomocí:losetup -aPoznámka:Pokud nemáte dostatek smyčkových zařízení, můžete snadno vytvořit další pomocí :# mknod -m0660 /dev/loopNUMBER b 7 ČÍSLO &&chown root.disk /dev/loopNUMBER

Zkontrolujte své zarovnání otevřením prvního disku skupiny (např.:Disk2), abyste zjistili, zda je první řádek R.NTFS. Pokud ne, vaše zarovnání je špatné. Ověřte své výpočty výše a zkuste to znovu. Nebo se nedíváte na 1. disk Windows

např.:

First disk of the volume has been mounted on /dev/loop2 
# xxd /dev/loop2 |head
0000000: eb52 904e 5446 5320 2020 2000 0208 0000  .R.NTFS    ..... 
0000010: 0000 0000 00f8 0000 3f00 ff00 0008 0400  ........?.......

Vše dobré. Pojďme k té otravné části :)

4.1 Rozložené

Rozložené disky jsou ve skutečnosti řetězem disků. Vyplníte první, pak použijete druhý a tak a tak dále. Vytvořte soubor, který vypadá takto, např. :

# Offset into   Size of this    Raid type       Device          Start sector
# volume        device                                          of device
0               1048312775  linear          /dev/loop2       0
1048312775      1048312775  linear          /dev/loop1       0
2096625550      1048312775  linear          /dev/loop3       0

Poznámky:- Nezapomeňte použít správné pořadí disků (které jste našli dříve). např.:Fyzický disk2 následovaný Fyzickým diskem1 a Fyzickým diskem3- 2096625550 =2*1048312775 a samozřejmě, pokud máte čtvrtý disk, bude to 3krát větší velikost pro offset pro 4. disk.

4.2 Pruhované

Problém s pruhovaným režimem (aka RAID0) je, že musíte vědět, jaká je vaše velikost pruhu. Ve výchozím nastavení je to zřejmě 64k (v mém případě to bylo 128k, ale nevím, jestli to vyladil systémový správce Windows:). Každopádně, pokud to neznáte, stačí vyzkoušet všechny možné standardní hodnoty a zjistit, která vám poskytne možný životaschopný souborový systém NTFS.

Vytvořte soubor podobný následujícímu pro 3 disky o velikosti 128 kB

                       .---+--> 3 chunks of 128k
0 3144938240  striped  3  128      /dev/loop2 0 /dev/loop3 0 /dev/loop1 0 
   `---> total size of the volume      `----------+-----------+---> disk order

/!\ :Velikost svazku není přesně velikost, kterou jsme vypočítali dříve. dmsetup potřebuje velikost svazku dělitelnou velikostí bloku (neboli velikost pruhu) A počtem disků ve svazku. Tedy v našem případě. Máme 3 disky o 1048312775 sektorech, takže 'normální' velikost je 1048312775*3=3144938325 sektorů, ale kvůli výše uvedenému omezení velikost přepočítáme a zaokrouhlíme# echo "3144938325/128*128" bc3144938240 sektory

  So 3144938240 is the size of your volume in a striped scenario with 3 disk and
  128 chunks (aka stripes)

4.3 Namontujte jej.

Nyní vše agregujeme pomocí dmsetup :

# dmsetup create myldm /path/myconfigfile
# dmsetup ls
myldm       (253, 1)

# mount -t ntfs -o ro /dev/mapper/myldm /mnt 

Pokud se nenamontuje. Pak můžete použít testdisk :

# testdisk /dev/mapper/myldm
--> Analyse
----> Quick search
------> You should see the volume name (if any). If not it seems compromised :)
--------> Press 'P' to see files and copy with 'c'

5. Závěr

Výše uvedené se mi osvědčilo. Váš počet najetých kilometrů se může lišit. A možná existuje lepší a jednodušší způsob, jak to udělat. Pokud ano, sdílejte to, aby nikdo jiný nemusel projít tímto problémem :) Také to může vypadat složitě, ale není. Pokud někam zkopírujete data, zkuste to znovu, dokud něco neuvidíte. Trvalo mi 3 dny, než jsem pochopil, jak poskládat všechny kousky dohromady. Doufejme, že výše uvedené vám pomůže nepromarnit 3 dny.

Poznámka:Všechny výše uvedené příklady byly vymyšlené. I přes mou důkladnost jsou možná mezi příklady nějaké nesrovnalosti;)

Hodně štěstí.

6. Odkazy

  • [1] :http://www.kernel.org/doc/Documentation/filesystems/ntfs.txt
  • [2] :http://russon.org/ntfs/ldm/technical/index.html
  • [3] :http://svnweb.freebsd.org/base/stable/9/sys/geom/part/g_part_ldm.c
  • [4]:http://ntfs.com/ldm.htm
  • [5] :http://sourceforge.net/projects/linux-ntfs/files/LDM%20Documentation/

Linux
  1. Jak zašifrovat oddíl pomocí DM-Crypt LUKS na Linuxu

  2. Emulace velkých disků v Linuxu pomocí VDO

  3. Snadno spusťte software Windows na Linuxu pomocí Bottles

  1. Rozdělte disk na Linuxu pomocí GNU Parted

  2. Odemykejte šifrované disky v Linuxu automaticky

  3. Spravujte disky pomocí DiskPart

  1. Nainstalujte Linux Mint s Windows 8 | Duální spouštění Windows 8 a Linux Mint 12

  2. Jak duální bootování Windows 10 a MX Linux

  3. Klonujte oddíl Windows z Linuxu