GNU/Linux >> Belajar Linux >  >> Linux

Pemulihan Windows Spanned Disks (LDM) dengan Linux?

Inilah jawaban (jauh lebih mudah), sekarang ldmtool ada.

ldmtool membaca metadata LDM (alias Windows Dynamic Disks), dan (antara lain) membuat entri pemetaan perangkat untuk drive, partisi, dan larik RAID yang sesuai, memungkinkan Anda setelahnya untuk mengakses dan memasangnya seperti perangkat blok lainnya di Linux.

Program ini memang memiliki beberapa batasan, sebagian besar disebabkan oleh fakta bahwa program tersebut tidak mengubah metadata LDM sama sekali. Jadi Anda tidak dapat membuat disk LDM di Linux (gunakan Windows untuk itu), dan Anda tidak boleh memasang dalam mode baca-tulis volume RAID yang disknya hilang. (ldmtool tidak akan mengubah metadata untuk mencerminkan bahwa hal ini terjadi, dan lain kali Windows merakit larik RAID, masalah akan terjadi, karena tidak semua drive akan disinkronkan.)

Berikut langkah-langkah yang harus diikuti:

  1. Untuk memasang ldmtool pada sistem Debian dan Ubuntu, ketik apt-get install ldmtool . Seharusnya sama mudahnya dengan sebagian besar distribusi Linux terbaru lainnya.
  2. Jalankan ldmtool create all .
  3. Anda seharusnya sekarang memiliki banyak entri baru di /dev/mapper. Temukan yang tepat (dalam kasus saya, larik RAID1, jadi /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 ), dan pasang saja dengan sesuatu seperti mount -t ntfs /dev/mapper/ldm_vol_VOLNAMEHERE-Dg0_Volume2 .

Untuk melakukan ini secara otomatis saat boot, Anda mungkin perlu memasukkan panggilan ke ldm create all pada titik yang tepat dalam urutan boot, sebelum konten /etc/fstab dipasang. Cara yang baik untuk melakukan panggilan adalah:

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

Tetapi cara menjalankan cuplikan ini pada waktu yang tepat saat boot akan sangat bervariasi tergantung pada distribusi yang Anda gunakan. Untuk Ubuntu 13.10, saya memasukkan baris tersebut di /etc/init/mountall.conf , tepat sebelum exec mountall ... panggil di akhir bagian skrip. Dan saya sekarang dapat me-mount partisi Windows LDM RAID1 saya di /etc/fstab . Selamat menikmati!


Baiklah, saya akan menjawab pertanyaan saya sendiri untuk menghindari rasa sakit yang sama kepada orang lain.

0. PERINGATAN

Jika Anda melakukan pemulihan, SELALU SALIN DATA ANDA dan kerjakan salinannya. JANGAN mengubah data asli yang 'rusak'. Hal itu berkata, teruslah membaca.

1. Partisi Anda terlihat seperti ...

Instal sleuth kit dan testdisk. Semoga ada paket untuk distro anda :)

# 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

Catatan:testdisk akan memberi Anda info yang sama dengan detail yang lebih sedikit# testdisk /list LUN01

2. Ekstrak metadata disk

Semua informasi tentang urutan disk, ukuran data, dan atribut sandi lainnya tentang partisi akan ditemukan di partisi metadata LDM. W2k8 tidak banyak berubah sejak dokumen ini [2] meskipun beberapa ukuran berbeda dan beberapa atribut baru (dan jelas tidak diketahui)...

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

Pada baris 0002410 Anda akan melihat nama server. Meyakinkan? Tapi kami mengejar urutan disk dan ID disk. Gulir ke bawah.

2.1. Urutan Disk

Pada baris 0003210 Anda akan melihat 'Disk1' diikuti dengan string panjang.

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..............

Ini berarti bahwa disk pertama dari Volume ini diidentifikasi oleh ID Unik (UID) berikut:79e80293-6eb1-11df-88dc-0026b9835db3Tetapi saat ini, kami tidak tahu disk mana yang memiliki UID ini !Jadi pindah ke Disk2 masuk dan catat UID-nya dan seterusnya untuk semua disk yang Anda miliki di volume Anda. Catatan:Berdasarkan pengalaman saya, hanya 8 karakter pertama yang berubah, sisanya tetap sama. Memang, W2k8 tampaknya menambah ID sebesar 6. $ adalah pemisah.

Misalnya. :

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

2.2. Temukan Disk UID

Pergi ke baris 00e8200 (lun01.metadata). Anda harus menemukan '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  ................

Yang kami kejar adalah UID disk dari disk khusus ini. Kami melihat:- Disk Id :79e80299-6eb1-11df-88dc-0026b9835db3- Host Id :1b77da20-c717-11d0-a5be-00a0c91db73c- Disk Group Id :891d0e8f-d929-11e0-a8a7-0026b9835db5

Jadi disk ini dengan UID 79e80299-... adalah Windows Disk2 tetapi bagi kami ini adalah Disk Fisik 1. Temukan UID ini dalam urutan disk yang Anda temukan di atas. Catatan:Tidak ada urutan logis. Maksud saya Windows memutuskan bagaimana mengatur urutan disk bukan Anda. Jadi TIDAK ada logika manusia dan jangan berharap disk pertama Anda menjadi Disk1.

Jadi jangan berasumsi bahwa urutan di atas akan mengikuti humanlogic apapun. Saya menyarankan Anda untuk menelusuri semua data LDM disk Anda dan mengekstrak UIDnya. (Anda dapat menggunakan perintah berikut untuk mengekstrak info PRIVHEAD saja:dd if=LUNXX skip=1890 count=1 |xxd -a)

misalnya:

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

Saya yakin bahwa di suatu tempat di metadata LDM Anda dapat menemukan jenis Volume (rentang, RAID0, RAIDX, dan ukuran garis terkait) Namun, saya belum menggalinya. Saya menggunakan metode 'coba dan coba lagi' untuk menemukan data saya. Jadi, jika Anda tahu cara mengatur konfigurasi sebelum drama, Anda akan menghemat banyak waktu.

3. Temukan sistem file NTFS dan data Anda

Sekarang kami tertarik pada sebagian besar data yang ingin kami pulihkan. Dalam kasus saya ini ~512GB data jadi kami tidak akan mengonversi keseluruhan dalam ASCII. Saya belum benar-benar mencari bagaimana Windows menemukan awal dari partisi NTFS-nya. Tapi apa yang saya temukan adalah secara logis dimulai dengan kata kunci berikut:R.NTFS. Mari temukan ini dan temukan offset yang harus kita terapkan nanti untuk melihat NTFS FS kita.

06:  02      0000262178   1048576966   1048314789   LDM data partition

Dalam contoh ini, data dimulai dari 262178 dan panjangnya 1048314789 sektor

Kami menemukan di atas bahwa Disk1 (dari grup volume) sebenarnya adalah disk fisik ke-2. Kami akan mengekstrak beberapa informasinya untuk menemukan di mana partisi NTFS dimulai.

# 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....

Di sini kita dapat melihat bahwa NTFS dimulai pada 00fbc00. Jadi mengetahui bahwa kita dapat mulai mengekstrak data kita dari sektor 262178 + 00fbc00 byte. Mari lakukan sedikit konversi heksadesimal ke desimal dengan konversi byte ke sektor juga.

0xfbc00 byte =1031168 byte =1031168/512 sektor =2014 sektor

Jadi partisi NTFS kita dimulai pada 262178 + 2014 =264192 sektor. Nilai ini akan menjadi offset yang akan kita gunakan nanti di semua disk. Sebut saja ini offset NTFS. Jelas ukuran totalnya menyusut karena offset. Jadi ukuran barunya adalah:1048314789 - 2014 =1048312775 sektor

4. Coba pasang/lihat datanya

Mulai sekarang, apakah itu akan berfungsi di luar kotak karena partisi NTFS Anda sehat atau tidak karena Anda melakukan ini untuk memulihkan beberapa data. Proses berikut ini sama apa pun status Anda. Semua yang berikut ini didasarkan pada [1] (lihat Tautan di bagian bawah)

Volume yang direntangkan, akan mengisi volume demi volume. Di mana strip (RAID0) akan menyalin potongan data ke banyak disk (a.k.a file tersebar di banyak disk). Dalam kasus saya, saya tidak tahu apakah itu volume yang terbentang atau bergaris. Cara termudah untuk mengetahui, jika volume Anda tidak penuh adalah dengan memeriksa apakah Anda memiliki banyak angka nol di akhir semua volume Anda. Kalau begitu maka bergaris. Karena kalau dibentangkan, kalau akan mengisi disk pertama, barulah disk kedua. Saya tidak 100% yakin akan hal itu tetapi itulah yang saya amati. Jadi dd banyak sektor dari akhir partisi data LDM.

4.0 Persiapan untuk mengakses data Anda

Pertama pasang file dd Anda atau perangkat Anda melalui perangkat loopback dengan NTFSoffset dan ukuran yang kami hitung di atas. Namun offset dan ukuran harus dalam byte bukan dalam sektor untuk digunakan dengan 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

Catatan:Anda dapat menambahkan '-r' untuk dipasang dalam mode Hanya-Baca.

Lakukan hal di atas untuk semua bagian disk fisik volume Anda. Tampilkan hasilnya dengan:losetup -aCatatan:Jika Anda tidak memiliki cukup perangkat loop, Anda dapat dengan mudah membuat lebih banyak lagi dengan:# mknod -m0660 /dev/loopNUMBER b 7 NUMBER &&chown root.disk /dev/loopNUMBER

Periksa perataan Anda dengan membuka Disk pertama grup (misalnya:Disk2) untuk melihat apakah baris pertama adalah R.NTFS. Jika tidak maka perataan Anda salah. Verifikasi perhitungan Anda di atas dan coba lagi. Atau Anda tidak melihat Disk Windows ke-1

misalnya:

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  ........?.......

Semuanya bagus. Mari beralih ke bagian yang menyebalkan :)

4.1 Dibentang

Disk yang terbentang sebenarnya adalah rangkaian disk. Anda mengisi yang pertama kemudian Anda menggunakan yang kedua dan seterusnya. Buat file yang terlihat seperti ini, misalnya :

# 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

Catatan:- Ingatlah untuk menggunakan urutan disk yang baik (Anda temukan sebelumnya). misalnya:Disk Fisik2 diikuti oleh Disk Fisik1 dan Disk Fisik3- 2096625550 =2*1048312775 dan jelas jika Anda memiliki disk keempat ukurannya akan menjadi 3 kali ukuran offset untuk disk ke-4.

4.2 Bergaris

Masalah dengan mode bergaris (alias RAID0) adalah Anda harus tahu berapa ukuran garis Anda. Rupanya secara default adalah 64k (dalam kasus saya adalah 128k tapi saya tidak tahu apakah itu disetel oleh sysadmin Windows :). Pokoknya jika Anda tidak mengetahuinya, Anda hanya perlu mencoba semua nilai standar yang mungkin dan melihat mana yang memberi Anda sistem file NTFS yang layak.

Buat file seperti berikut untuk 3 disk dengan ukuran potongan 128k

                       .---+--> 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

/!\ :Ukuran volume tidak persis dengan ukuran yang kami hitung sebelumnya. dmsetup membutuhkan ukuran volume yang dapat dibagi dengan ukuran potongan (alias ukuran garis) DAN dengan jumlah disk dalam volume. Jadi dalam kasus kami. Kami memiliki 3 disk dengan 1048312775 sektorJadi ukuran 'normal' adalah 1048312775*3=3144938325 sektor tetapi karena kendala di atas kami akan menghitung ulang ukurannya dan membulatkannya# echo "3144938325/128*128" | bc3144938240 sektor

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

4.3 Pasang.

Sekarang mari kita kumpulkan semuanya bersama dengan dmsetup :

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

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

Jika tidak terpasang. Kemudian Anda dapat menggunakan 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. Kesimpulan

Di atas bekerja untuk saya. Jarak tempuh Anda mungkin berbeda. Dan mungkin ada cara yang lebih baik dan lebih mudah untuk melakukannya. Jika demikian, bagikan agar tidak ada orang lain yang harus melalui kerumitan ini :) Juga, ini mungkin terlihat sulit tetapi sebenarnya tidak. Selama Anda menyalin data Anda di suatu tempat, coba dan coba lagi sampai Anda dapat melihat sesuatu. Butuh waktu 3 hari bagi saya untuk memahami cara menyatukan semua bit. Semoga hal di atas akan membantu Anda untuk tidak menyia-nyiakan 3 hari.

Catatan:Semua contoh di atas telah dibuat-buat. Mungkin ada beberapa ketidakkonsistenan di antara contoh-contoh tersebut terlepas dari ketelitian saya;)

Semoga berhasil.

6. Tautan

  • [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. Partisi drive di Linux dengan GNU Parted

  2. Cara mengenkripsi partisi dengan DM-Crypt LUKS di Linux

  3. Kelola disk dengan DiskPart

  1. Buka kunci disk terenkripsi di Linux secara otomatis

  2. Meniru disk besar di Linux dengan VDO

  3. Buat gambar partisi Windows di Linux

  1. Instal Linux Mint dengan Windows 8 | Dual Boot Windows 8 dan Linux Mint 12

  2. Cara dual boot Windows 10 dan MX Linux

  3. Jalankan Perangkat Lunak Windows dengan Mudah di Linux dengan Botol