Windows 10 Boot loader merusak disk Linux LUKS saya

1

Saya punya 3 disk:

  1. OS Utama (CentOS)
  2. HDD dienkripsi dengan LUKS untuk data (Perangkat Keras RAID10, LSI Logical Volume)
  3. Windows 10 (Baru-baru ini diinstal untuk pengujian)

Masalah saya adalah ketika saya menginstal Windows 10, disk LUKS saya rusak dengan membuat boot loader di atasnya ... Sekarang saya tidak dapat mendekripsi disk saya dan saya benar-benar membutuhkan data saya.

Bisakah saya mengembalikan proses dengan Gparted atau alat lain? Saya harap data saya tidak dihancurkan oleh boot loader itu ...

Saya benar-benar butuh bantuan, tolong!

EDIT 1 Menambahkan beberapa informasi

fdisk -l

Disk /dev/sda: 12000.0 GB, 11999999164416 bytes, 23437498368 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: 0x385dcf68

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000    7  HPFS/NTFS/exFAT

Setelah jawaban Xen2050 di sini adalah hasil saya:

LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" /dev/sda

164822601573:LUKS��

Lalu harapan dikembalikan!

Saya dd header saya dengan ukuran blok 1 byte dengan itu

dd if=/dev/sda of=luks_header bs=1 skip=164822601573 count=2097152

Sekarang saya memiliki tajuk luks saya, saya dapat mengonfirmasi mulai dengan LUKS dengan vi

LUKSº¾^@squashfs^@sqsh^@hsqs^@lvm2pv^@LVM2 001^@btrfs^@

Sekarang langkah selanjutnya adalah menulis ulang header luks saya ...

EDIT 2 Menambahkan pengembangan

Dari unix.stackexchange ini: https://unix.stackexchange.com/questions/177831/recovering-a-luks-partition

Saya menemukan awal jika header saya

hexdump -s 164822601573 -C /dev/sda | grep LUKS
2660314f65  4c 55 4b 53 ba be 00 73  71 75 61 73 68 66 73 00 |LUKS...squashfs.|

Siapkan perangkat loop

losetup -o 0x2660314f65 -r -f /dev/sda
losetup -a
cryptsetup luksOpen /dev/loop0 luksrecover

Tapi saya punya pesan kesalahan pesan ini:

Unsupported LUKS version 115.

Saya pikir header saya rusak ... Ini adalah permulaan dari saya:

|LUKS...squashfs.|
|sqsh.hsqs.lvm2pv|
|.LVM2 001.btrfs.|
|_BHRfS_M.f2fs.. |
|...<device.</dev|
|ice>.PRI.TIME.DE|
|VNO.%s-XXXXXX.w.|
| PRI="%d".>%s</d|
|evice>.. %s="%s"|
|.%s.old.1.42.9.2|
|8-Dec-2013......|
|................|
*
|...............d|
|.... n;.0.&.A.v.|
|QkkXa.M<q.P ...D|
|.........a...d..|
|...x............|
|.............T..|
|..........@.....|
|.i@<device DEVNO|
|="0x%04lx" TIME=|
|"%ld"...........|

Dan di sini adalah tajuk fungsional

|LUKS....aes.....|
|................|
|........xts-plai|
|n64.............|
|........sha1....|
|................|
|............... |
|2x.l...r0....8|.|
|...'..[!D..J..tp|
|....?J...~.x"s.=|
|.?.....]981be66e|
|-a0b0-4daa-8a2c-|
|5a6e5d8ed3ae....|
|..q....ZG..}#..,|
|...w..!|..3..>.?|
|.;.&...-........|
|................|
|................|
William Perron
sumber
1
Jadi Windows telah menimpa header LUKS dengan bootloader-nya. Kecuali Anda memiliki cadangan header, tidak ada cara untuk memulihkan partisi (atau kontennya).
Larssend
1
Anda yakin itu benar-benar ditimpa perangkat LUKS? Apakah LUKS ada di seluruh drive mentah, tidak ada tabel partisi atau partisi? Jika LUKS Anda berada di partisi ke-2 atau lebih baru maka mungkin windows hanya menghapus tabel partisi & / atau awal dari partisi pertama. Seperti apa bentuk disk sekarang di gparted atau fdisk atau gdisk, dan seperti apa bentuknya?
Xen2050
Saya berasumsi Anda tidak membuat cadangan apa pun sebelum mencoba sesuatu yang sangat berisiko?
@FleetCommand Saya tidak dapat mencadangkan seluruh disk, saya tidak memiliki disk dengan ukuran yang sama. Saya pikir saya tidak melakukan apa pun yang sangat berisiko sampai sekarang. Mungkin kalah?
William Perron

Jawaban:

1

Sungguh, cadangan header LUKS adalah yang Anda butuhkan. Tapi, mungkin itu sebenarnya tidak ditimpa dan hanya tabel partisi disk yang kacau dan Anda tidak dapat menemukan awal perangkat LUKS.

Header LUKS sebenarnya dimulai dengan karakter LUKSkemudian dua karakter non-ascii 0xba dan 0xbe, sehingga Anda dapat mencari seluruh disk Anda mencari string itu. Semua dalam hex, itu

4C 55 4B 53 BA BE

Miliki Pencarian Program

PhotoRec harus dapat menemukan header / file LUKS dan itu ada di sumber Debian & Ubuntu, dan tersedia untuk Windows juga, kirim untuk mencari seluruh drive Anda.

Atau coba TestDisk juga (dari penulis yang sama), ia dapat mencoba mencari partisi yang hilang & mungkin menemukan yang LUKS.


Cari "sendiri"

Atau, Anda dapat mencari seluruh jenis drive "diri Anda" byte-demi-byte, dengan hex editor favorit Anda (Bless is nice) atau dengan grepdi linux (ditemukan dari Q lain ini ):

LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" /dev/your-hard-drive-device

Tanpa LANG=Cpengaturan awal itu tidak berfungsi untuk saya, "bahasa" saya yang biasa tampaknya adalah UTF-8, dan opsi itu adalah bentuk pendek dari --hanya cocok dengan --by-offset - biner - teks --perl -regexp lihat man grepatau info grep)

Seharusnya output byte di mana header LUKS dimulai, jika menemukan satu. Anda kemudian dapat menggunakan dduntuk menyalin wadah LUKS di tempat yang aman, atau menggunakan info itu untuk membuat partisi yang dimulai di tempat yang tepat, meskipun membuat salinan cadangan terlebih dahulu akan paling aman, Anda tidak ingin menimpa header secara tidak sengaja.

  • Sebagai contoh:

    $ LANG=C grep -obUaP "\x4C\x55\x4B\x53\xBA\xBE" file
    5242880:LUKS��
    

    Di sini, itu 5.242.880 byte ke dalam file (di linux semuanya file, seluruh hard drive juga, misalnya /dev/sdb).

Sekarang saat yang tepat untuk membuat cadangan tajuk, panjangnya 1M atau 2M, jadi salin 2M berikutnya dd.

ddmembutuhkan sedikit matematika untuk mengetahui ukuran blok yang baik ( -bs), it tends to read extremely slow with a low block size, the default 512 bytes is probably too slow for more than a few megabytes on a hard drive, 1M (1048576 bytes,dd` tahu M, G, K, dll) harus ok.

  • Dalam contoh di atas, itu terjadi persis 5M dari awal (5242880/1048576 = 5) sehingga perintah ini akan menyalin dari 5M ke akhir file / perangkat, menulis ke file outfile(dalam direktori saat ini):

    dd if=file of=outfile bs=1M skip=5
    

Untuk cadangan header-saja, Anda dapat menggunakan count=Nuntuk berhenti menyalin setelah N blok, cari tahu berapa banyak blok yang Anda pilih bs=dalam 2 megabyte, di atasnya hanya akan 2. Lihat ddbantuan untuk informasi.

Xen2050
sumber
Terima kasih banyak Xen2050! Sekarang saya memiliki header saya dan saya tahu di mana ia mulai, tetapi apa cara paling aman untuk membangun kembali disk LUKS saya? Saya tidak punya disk 12tb untuk cadangan. Saya mengedit pertanyaan saya dengan semua perintah dan hasil.
William Perron
Tampaknya header LUKS setidaknya ditimpa sebagian sehingga tidak ada yang tersisa dari header (atau mungkin itu hanya 6 karakter pertama dari header LUKS yang ditulis untuk beberapa alasan lain). Tetapi tergantung pada berapa banyak frasa sandi yang disimpan, dan berapa banyak yang ditimpa, sesuatu mungkin tersisa. cryptsetupmemiliki perintah perbaikan, dapat mencobanya pada salinan 10 atau 20MB dari "header" sebelumnya? Atau jawaban yang ditautkan di unix.stackexchange menunjukkan format tajuk dalam PDF, dapatkah mencoba mengekstraksi data jika ada yang tersisa? Cadangan header benar-benar diperlukan, sayangnya
Xen2050