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:
- Untuk memasang
ldmtool
pada sistem Debian dan Ubuntu, ketikapt-get install ldmtool
. Seharusnya sama mudahnya dengan sebagian besar distribusi Linux terbaru lainnya. - Jalankan
ldmtool create all
. - 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 sepertimount -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/