Orang-orang tolong bantu - Saya seorang pemula dengan sakit kepala besar di tangan (situasi badai sempurna).
Saya memiliki 3 1tb hdd di ubuntu 11.04 saya yang dikonfigurasi sebagai serangan perangkat lunak 5. Data telah disalin setiap minggu ke hard drive komputer yang terpisah secara terpisah hingga sepenuhnya gagal dan dibuang. Beberapa hari yang lalu kami mengalami pemadaman listrik dan setelah me-reboot kotak saya tidak akan me-mount serangan itu. Dalam kebijaksanaan saya yang tak terbatas, saya masuk
mdadm --create -f...
perintah alih-alih
mdadm --assemble
dan tidak memperhatikan parodi yang telah saya lakukan sampai sesudahnya. Itu mulai array terdegradasi dan dilanjutkan dengan membangun dan menyinkronkannya yang memakan waktu ~ 10 jam. Setelah saya kembali saya melihat bahwa array berhasil dan berjalan tetapi serangan itu tidak
Maksud saya masing-masing drive dipartisi (tipe partisi f8
) tetapi md0
perangkat tidak. Menyadari dengan ngeri apa yang telah saya lakukan, saya mencoba menemukan beberapa solusi. Saya hanya berdoa agar --create
tidak menimpa seluruh isi hard disk.
Bisakah seseorang tolong bantu saya dengan ini - data yang ada di drive sangat penting dan unik ~ 10 tahun foto, dokumen, dll.
Apakah mungkin bahwa dengan menentukan hard drive yang berpartisipasi dalam urutan yang salah dapat membuat mdadm
menimpanya? ketika saya melakukannya
mdadm --examine --scan
Saya mendapatkan sesuatu seperti ARRAY /dev/md/0 metadata=1.2 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b name=<hostname>:0
Cukup menarik nama dulu 'raid' dan bukan host hame dengan: 0 ditambahkan.
Berikut adalah entri konfigurasi 'disanitasi':
DEVICE /dev/sdf1 /dev/sde1 /dev/sdd1
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md0 metadata=1.2 name=tanserv:0 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b
Here is the output from mdstat
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdd1[0] sdf1[3] sde1[1]
1953517568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
fdisk shows the following:
fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bf62e
Device Boot Start End Blocks Id System
/dev/sda1 * 1 9443 75846656 83 Linux
/dev/sda2 9443 9730 2301953 5 Extended
/dev/sda5 9443 9730 2301952 82 Linux swap / Solaris
Disk /dev/sdb: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de8dd
Device Boot Start End Blocks Id System
/dev/sdb1 1 91201 732572001 8e Linux LVM
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00056a17
Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 8e Linux LVM
Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca948
Device Boot Start End Blocks Id System
/dev/sdd1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/dm-0: 1250.3 GB, 1250254913536 bytes
255 heads, 63 sectors/track, 152001 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/sde: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x93a66687
Device Boot Start End Blocks Id System
/dev/sde1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe6edc059
Device Boot Start End Blocks Id System
/dev/sdf1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/md0: 2000.4 GB, 2000401989632 bytes
2 heads, 4 sectors/track, 488379392 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
Per saran saya memang membersihkan superblok dan menciptakan kembali array dengan --assume-clean
opsi tetapi tidak berhasil sama sekali.
Apakah ada alat yang akan membantu saya untuk menghidupkan kembali setidaknya beberapa data? Dapatkah seseorang memberi tahu saya apa dan bagaimana mdadm --create melakukan saat sinkronisasi untuk menghancurkan data sehingga saya dapat menulis alat untuk membatalkan apa pun yang dilakukan?
Setelah menciptakan kembali raid saya menjalankan fsck.ext4 / dev / md0 dan ini adalah hasilnya
root @ tanserv: / etc / mdadm # fsck.ext4 / dev / md0 e2fsck 1.41.14 (22-Des-2010) fsck.ext4: Superblock tidak valid, mencoba blok cadangan ... fsck.ext4: Angka ajaib buruk di super- blok ketika mencoba membuka / dev / md0
Superblock tidak dapat dibaca atau tidak menggambarkan sistem file ext2 yang benar. Jika perangkat ini valid dan benar-benar berisi sistem file ext2 (dan bukan swap atau ufs atau yang lainnya), maka superblock rusak, dan Anda dapat mencoba menjalankan e2fsck dengan superblock alternatif: e2fsck -b 8193
Atas saran Shanes saya mencoba
root@tanserv:/home/mushegh# mkfs.ext4 -n /dev/md0
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379392 blocks
24418969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
dan jalankan fsck.ext4 dengan setiap blok cadangan tetapi semuanya mengembalikan yang berikut:
root@tanserv:/home/mushegh# fsck.ext4 -b 214990848 /dev/md0
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Invalid argument while trying to open /dev/md0
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
Ada saran?
Salam!
sumber
Jawaban:
Ok - ada sesuatu yang mengganggu saya tentang masalah Anda, jadi saya meluncurkan VM untuk menyelami perilaku yang seharusnya. Saya akan sampai ke apa yang mengganggu saya dalam satu menit; pertama izinkan saya mengatakan ini:
Cadangkan drive ini sebelum mencoba sesuatu !!
Anda mungkin telah melakukan kerusakan di luar apa yang dilakukan sinkronisasi ulang; dapatkah Anda mengklarifikasi apa yang Anda maksudkan ketika mengatakan:
Jika Anda berlari
mdadm --misc --zero-superblock
, maka Anda harus baik-baik saja.Ngomong-ngomong, ambil beberapa disk baru dan ambil gambar saat ini yang tepat dari mereka sebelum melakukan apa pun yang mungkin melakukan lebih banyak menulis ke disk ini.
Yang sedang berkata .. sepertinya data yang disimpan pada hal-hal ini ternyata sangat tangguh terhadap sinkronisasi yang tidak sopan. Baca terus, ada harapan, dan ini mungkin hari saya mencapai batas panjang jawaban.
Skenario Kasus Terbaik
Saya mengumpulkan VM untuk menciptakan kembali skenario Anda. Drive hanya 100 MB jadi saya tidak akan menunggu selamanya pada setiap sinkronisasi, tetapi ini seharusnya representasi yang cukup akurat.
Membangun array secara umum dan standar mungkin - potongan 512k, tata letak simetris kiri, disk dalam urutan huruf .. tidak ada yang istimewa.
Sejauh ini baik; mari kita membuat sistem file, dan menaruh beberapa data di dalamnya.
Baik. Kami memiliki sistem file dan beberapa data ("data"
datafile
, dan data acak senilai 5MB dengan hash SHA1randomdata
) di dalamnya; mari kita lihat apa yang terjadi ketika kita membuat ulang.Sinkronisasi ulang selesai dengan sangat cepat dengan disk kecil ini, tetapi hal itu terjadi. Jadi, inilah yang mengganggu saya dari sebelumnya;
fdisk -l
output Anda . Tidak memiliki tabel partisi padamd
perangkat sama sekali bukan masalah, itu diharapkan. Sistem file Anda berada langsung di perangkat blok palsu tanpa tabel partisi.Ya, tidak ada tabel partisi. Tapi...
Sistem file yang benar-benar valid, setelah dilakukan sinkronisasi ulang. Jadi itu bagus; mari kita periksa file data kami:
Solid - tidak ada korupsi data sama sekali! Tapi ini dengan pengaturan yang sama persis, jadi tidak ada yang dipetakan secara berbeda antara kedua kelompok RAID. Mari kita jatuhkan benda ini sebelum kita mencoba memecahkannya.
Mengambil Langkah Kembali
Sebelum kita mencoba untuk memecahkan ini, mari kita bicara tentang mengapa ini sulit untuk dipatahkan. RAID 5 bekerja dengan menggunakan blok paritas yang melindungi area dengan ukuran yang sama dengan blok pada setiap disk lain dalam array. Paritasnya tidak hanya pada satu disk tertentu, tetapi diputar di sekitar disk secara merata untuk menyebarkan beban baca yang lebih baik ke seluruh disk dalam operasi normal.
Operasi XOR untuk menghitung paritas terlihat seperti ini:
Jadi, paritas tersebar di antara disk.
Sinkronisasi ulang biasanya dilakukan saat mengganti disk yang mati atau hilang; itu juga dilakukan
mdadm create
untuk memastikan bahwa data pada disk sejajar dengan seperti apa bentuk geometri RAID. Dalam hal ini, disk terakhir dalam spesifikasi array adalah disk yang 'disinkronkan ke' - semua data yang ada pada disk lain digunakan untuk sinkronisasi.Jadi, semua data pada disk 'baru' dihapus dan dibangun kembali; baik membangun blok data baru dari blok paritas untuk apa yang seharusnya ada, atau membangun blok paritas baru.
Apa yang keren adalah bahwa prosedur untuk kedua hal itu sama persis: operasi XOR di seluruh data dari seluruh disk. Proses sinkronisasi ulang dalam kasus ini mungkin memiliki tata letak di mana blok tertentu harus menjadi blok paritas, dan berpikir itu sedang membangun blok paritas baru, padahal sebenarnya itu menciptakan kembali blok data lama. Jadi, bahkan jika itu dianggap membangun ini:
... mungkin hanya membangun kembali
DISK5
dari tata letak di atas.Jadi, dimungkinkan data tetap konsisten meskipun array salah.
Melempar Monyet dalam Karya
(bukan kunci pas; seluruh monyet)
Tes 1:
Mari kita membuat array dengan urutan yang salah!
sdc
lalusdd
, lalusdb
..Ok, itu semua baik dan bagus. Apakah kita memiliki sistem file?
Nggak! Mengapa demikian? Karena sementara semua data ada di sana, itu dalam urutan yang salah; apa yang dulunya 512KB dari A, kemudian 512KB dari B, A, B, dan sebagainya, sekarang telah dikocok ke B, A, B, A. Disk sekarang terlihat seperti bualan ke pemeriksa sistem file, itu tidak akan berjalan. Output dari
mdadm --misc -D /dev/md1
memberi kita lebih banyak detail; Ini terlihat seperti ini:Kapan seharusnya terlihat seperti ini:
Jadi, itu semua baik dan bagus. Kami menimpa sejumlah besar blok data dengan blok paritas baru kali ini. Buat ulang, dengan urutan yang benar sekarang:
Rapi, masih ada filesystem di sana! Masih punya data?
Keberhasilan!
Tes 2
Ok, mari kita ubah ukuran bongkahan dan melihat apakah itu membuat kita patah.
Ya, ya, disemprot ketika dipasang seperti ini. Tapi, bisakah kita pulih?
Berhasil lagi!
Tes 3
Ini adalah salah satu yang saya pikir akan membunuh data dengan pasti - mari kita lakukan algoritma tata letak yang berbeda!
Menakutkan dan buruk - menurutnya ia menemukan sesuatu dan ingin melakukan perbaikan! Ctrl+ C!
Ok, krisis terhindar. Mari kita lihat apakah data masih utuh setelah melakukan sinkronisasi ulang dengan tata letak yang salah:
Keberhasilan!
Tes 4
Mari kita buktikan juga bahwa zerolock superblock tidak berbahaya dengan cepat:
Ya, bukan masalah besar.
Tes 5
Mari kita lemparkan semua yang kita miliki. Semua 4 tes sebelumnya, digabungkan.
Maju!
Putusannya?
Wow.
Jadi, sepertinya tidak ada tindakan yang merusak data dengan cara apa pun. Saya cukup terkejut dengan hasil ini, terus terang; Saya berharap kemungkinan moderat hilangnya data pada perubahan ukuran chunk, dan beberapa kerugian pasti pada perubahan tata letak. Saya belajar sesuatu hari ini.
Jadi .. Bagaimana cara saya mendapatkan data saya ??
Informasi sebanyak yang Anda miliki tentang sistem lama akan sangat membantu Anda. Jika Anda mengetahui jenis sistem file, jika Anda memiliki salinan lama Anda
/proc/mdstat
dengan informasi tentang urutan drive, algoritma, ukuran chunk, dan versi metadata. Apakah Anda memiliki peringatan email mdadm yang diatur? Jika demikian, temukan yang lama; jika tidak, periksa/var/spool/mail/root
. Periksa Anda~/.bash_history
untuk melihat apakah bangunan asli Anda ada di sana.Jadi, daftar hal-hal yang harus Anda lakukan:
dd
sebelum melakukan apa pun !!fsck
md aktif saat ini - Anda mungkin baru saja membangun dalam urutan yang sama seperti sebelumnya. Jika Anda mengetahui tipe sistem file, itu sangat membantu; gunakanfsck
alat khusus itu . Jika ada alat yang menawarkan untuk memperbaiki apa pun, jangan biarkan mereka kecuali Anda yakin mereka telah menemukan sistem file yang benar! Jikafsck
penawaran untuk memperbaiki sesuatu untuk Anda, jangan ragu untuk meninggalkan komentar untuk menanyakan apakah itu benar-benar membantu atau hanya akan memuntahkan data./proc/mdstat
, maka Anda bisa meniru apa yang ditunjukkannya; jika tidak, maka Anda agak dalam kegelapan - mencoba semua perintah drive yang berbeda adalah wajar, tetapi memeriksa setiap ukuran chunk yang mungkin dengan setiap pesanan yang mungkin adalah sia-sia. Untuk masing-masing,fsck
itu untuk melihat apakah Anda mendapatkan sesuatu yang menjanjikan.Jadi begitulah. Maaf untuk novel ini, jangan ragu untuk meninggalkan komentar jika Anda memiliki pertanyaan, dan semoga sukses!
catatan kaki: di bawah 22 ribu karakter; 8k + malu batas panjangnya
sumber
Jika Anda beruntung, Anda mungkin akan berhasil mengembalikan file Anda dengan perangkat lunak pemulihan yang dapat membaca array RAID-5 yang rusak. Zero Assumption Recovery adalah salah satu yang pernah saya sukseskan sebelumnya.
Namun, saya tidak yakin apakah proses membuat array baru telah menghancurkan semua data, jadi ini mungkin upaya peluang terakhir.
sumber
Saya memiliki masalah yang sama:
setelah kegagalan array perangkat lunak RAID5 saya menembak
mdadm --create
tanpa memberikannya--assume-clean
, dan tidak bisa me-mount array lagi. Setelah dua minggu penggalian, saya akhirnya mengembalikan semua data. Saya harap prosedur di bawah ini akan menghemat waktu seseorang.Cerpen Panjang
Masalahnya disebabkan oleh fakta yang
mdadm --create
membuat array baru yang berbeda dari yang asli dalam dua aspek:Seperti yang telah ditunjukkan dalam jawaban brilian oleh Shane Madden ,
mdadm --create
dalam kebanyakan kasus tidak menghancurkan data! Setelah menemukan urutan partisi dan data offset saya bisa mengembalikan array dan mengekstrak semua data darinya.Prasyarat
Saya tidak punya cadangan RAID superblocks, jadi yang saya tahu hanyalah array RAID5 pada 8 partisi yang dibuat saat instalasi Xubuntu 12.04.0. Itu sistem file ext4. Sepotong pengetahuan penting lainnya adalah salinan file yang juga disimpan pada array RAID.
Alat
CD live Xubuntu 12.04.1 digunakan untuk melakukan semua pekerjaan. Tergantung pada situasi Anda, Anda mungkin memerlukan beberapa alat berikut:
versi mdadm yang memungkinkan untuk menentukan offset data
bgrep - mencari data biner
hexdump, e2fsck, mount dan kalkulator heksadesimal - alat standar dari repo
Mulai dengan Cadangan Penuh
Penamaan file perangkat, misalnya
/dev/sda2
/dev/sdb2
dll, tidak persisten, jadi lebih baik untuk menuliskan nomor seri drive Anda yang diberikan olehKemudian pasang HDD eksternal dan cadangkan setiap partisi array RAID Anda seperti ini:
Tentukan Tata Letak RAID5 Asli
Berbagai tata letak dijelaskan di sini: http://www.accs.com/p_and_p/RAID/LinuxRAID.html
Untuk menemukan bagaimana setrip data disusun pada larik asli, Anda memerlukan salinan file yang tampak acak yang Anda tahu adalah disimpan pada array. Ukuran chunk default yang saat ini digunakan
mdadm
adalah 512KB. Untuk larik partisi N, Anda memerlukan file ukuran setidaknya (N + 1) * 512KB. Jpeg atau video bagus karena menyediakan substring data biner yang relatif unik. Misalkan file kita dipanggilpicture.jpg
. Kami membaca 32 byte data pada posisi N +1 mulai dari 100rb dan bertambah dengan 512rb:Kami kemudian mencari kemunculan semua bytestrings ini pada semua partisi mentah kami, jadi secara total (N + 1) * N perintah, seperti ini:
Perintah-perintah ini dapat dijalankan secara paralel untuk disk yang berbeda. Pemindaian partisi 38GB membutuhkan waktu sekitar 12 menit. Dalam kasus saya, setiap string 32-byte hanya ditemukan sekali di antara delapan drive. Dengan membandingkan offset yang dikembalikan oleh bgrep, Anda memperoleh gambar seperti ini:
Kami melihat tata letak simetris kiri normal , yang merupakan default untuk
mdadm
. Lebih penting lagi, sekarang kita tahu urutan partisi. Namun, kita tidak tahu partisi mana yang merupakan yang pertama dalam array, karena mereka dapat digeser secara siklis.Perhatikan juga jarak antara offset yang ditemukan. Dalam kasus saya itu adalah 512KB. Ukuran bongkahan sebenarnya bisa lebih kecil dari jarak ini, dalam hal ini tata letak yang sebenarnya akan berbeda.
Temukan Ukuran Potongan Asli
Kami menggunakan file yang sama
picture.jpg
untuk membaca 32 byte data pada interval yang berbeda satu sama lain. Kita tahu dari atas bahwa data pada offset 100k terletak pada/dev/sdh2
, pada offset 612k adalah pada/dev/sdb2
, dan pada 1124k adalah pada/dev/sdd2
. Ini menunjukkan bahwa ukuran chunk tidak lebih besar dari 512KB. Kami memverifikasi bahwa itu tidak lebih kecil dari 512KB. Untuk ini, kita membuang bytestring pada offset 356k dan lihat di partisi mana itu berada:Ini pada partisi yang sama dengan offset 612k, yang menunjukkan bahwa ukuran chunk tidak 256KB. Kami menghilangkan ukuran potongan yang lebih kecil dengan cara yang sama. Saya akhirnya dengan potongan 512KB menjadi satu-satunya kemungkinan.
Temukan Partisi Pertama di Layout
Sekarang kita tahu urutan partisi, tetapi kita tidak tahu partisi mana yang harus menjadi yang pertama, dan offset data RAID mana yang digunakan. Untuk menemukan dua hal yang tidak diketahui ini, kami akan membuat array RAID5 dengan tata letak chunk yang benar dan offset data kecil, dan mencari awal sistem file kami dalam array baru ini.
Untuk memulainya, kami membuat array dengan urutan partisi yang benar, yang kami temukan sebelumnya:
Kami memverifikasi bahwa pesanan dipatuhi dengan menerbitkan
Sekarang kita menentukan offset dari N + 1 yang diketahui bytestrings dalam array RAID. Saya menjalankan skrip untuk satu malam (Live CD tidak meminta kata sandi pada sudo :):
Keluaran dengan komentar:
Berdasarkan data ini kita melihat bahwa string ke-3 tidak ditemukan. Ini berarti bahwa potongan pada
/dev/sdd2
digunakan untuk paritas. Berikut adalah ilustrasi posisi paritas dalam array baru:Tujuan kami adalah untuk menyimpulkan dari partisi mana untuk memulai array, untuk menggeser potongan paritas ke tempat yang tepat. Karena paritas harus digeser dua potongan ke kiri, urutan partisi harus digeser dua langkah ke kanan. Dengan demikian tata letak yang benar untuk data offset ini adalah
ahbdcefg
:Pada titik ini array RAID kami berisi data dalam bentuk yang tepat. Anda mungkin beruntung sehingga offset data RAID sama dengan array aslinya, dan kemungkinan besar Anda akan dapat me-mount partisi. Sayangnya ini bukan kasus saya.
Verifikasi Konsistensi Data
Kami memverifikasi bahwa data konsisten di atas potongan dengan mengekstraksi salinan dari
picture.jpg
array. Untuk ini kami menemukan offset untuk string 32-byte pada 100k:Kami kemudian mengurangi 100 * 1024 dari hasil dan menggunakan nilai desimal yang diperoleh dalam
skip=
parameter untukdd
. Thecount=
adalah ukuranpicture.jpg
dalam bytes:Periksa
extract.jpg
apakah sama denganpicture.jpg
.Temukan Offset Data RAID
Sidenote: offset data default untuk
mdadm
versi 3.2.3 adalah 2048 sektor. Tetapi nilai ini telah berubah seiring waktu. Jika array asli menggunakan offset data yang lebih kecil dari arus Andamdadm
, makamdadm --create
tanpa--assume-clean
dapat menimpa awal sistem file.Di bagian sebelumnya kami membuat array RAID. Verifikasi data RAID mana yang diimbangi dengan mengeluarkan untuk beberapa partisi individual:
2048 sektor 512-byte adalah 1MB. Karena ukuran chunk adalah 512KB, offset data saat ini adalah dua chunk.
Jika pada titik ini Anda memiliki offset dua potong, itu mungkin cukup kecil, dan Anda dapat melewati paragraf ini.
Kami membuat array RAID5 dengan offset data sebesar satu 512KB-chunk. Memulai satu bongkahan sebelumnya menggeser paritas satu langkah ke kiri, jadi kami mengimbanginya dengan menggeser urutan partisi satu langkah ke kiri. Oleh karena itu untuk offset data 512KB, tata letak yang benar adalah
hbdcefga
. Kami menggunakan versimdadm
yang mendukung penggantian data (lihat bagian Alat). Dibutuhkan offset dalam kilobyte:Sekarang kami mencari superblock ext4 yang valid. Struktur superblock dapat ditemukan di sini: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
Kami memindai awal array untuk kemunculan angka ajaib
s_magic
diikuti olehs_state
dans_errors
. Bytestrings yang harus dicari adalah:Contoh perintah:
Angka ajaib mulai 0x38 byte ke dalam superblok, jadi kami mengurangi 0x38 untuk menghitung offset dan memeriksa seluruh superblock:
Ini tampaknya merupakan superblok yang valid.
s_log_block_size
bidang pada 0x18 adalah 0002, artinya ukuran blok adalah 2 ^ (10 + 2) = 4096 byte.s_blocks_count_lo
pada 0x4 adalah blok 03f81480 yang 254GB. Kelihatan bagus.Kami sekarang memindai kemunculan byte pertama superblok untuk menemukan salinannya. Perhatikan flipping byte dibandingkan dengan output hexdump:
Ini sejajar dengan posisi yang diharapkan dari cadangan superblok:
Oleh karena itu sistem file dimulai pada 0xdc80000 offset, yaitu 225792KB dari mulai partisi. Karena kami memiliki 8 partisi yang satu untuk paritas, kami membagi offset dengan 7. Ini memberikan 33030144 byte offset pada setiap partisi, yang persis 63 potongan RAID. Dan karena offset data RAID saat ini adalah satu chunk, kami menyimpulkan bahwa offset data asli adalah 64 chunk, atau 32768KB. Menggeser
hbdcefga
63 kali ke kanan memberikan tata letakbdcefgah
.Kami akhirnya membangun array RAID yang benar:
Voa!
sumber
Saya memiliki masalah serupa. Saya memformat dan menginstal ulang OS / boot drive saya dengan instalasi Ubuntu 12.04 yang bersih, kemudian menjalankan perintah mdadm --create ... dan tidak bisa memasangnya.
Dikatakan tidak memiliki superblock atau partisi yang valid.
Selain itu, ketika saya menghentikan serangan mdadm, saya tidak bisa lagi memasang perangkat biasa.
Saya dapat memperbaiki superblock dengan mke2fs dan e2fsck:
Kemudian berlari:
Itu memulihkan superblock sehingga saya bisa memasang dan membaca drive.
Untuk membuat array berfungsi tanpa merusak superblock atau partisi yang saya gunakan build:
Setelah memverifikasi data, saya akan menambahkan drive lain:
sumber
Saya hanya memperbarui beberapa informasi yang diberikan sebelumnya. Saya memiliki array raid5 3-disk yang berfungsi dengan baik ketika motherboard saya mati. Array memegang / dev / md2 sebagai partisi / home 1.2TB dan / dev / md3 sebagai partisi / var 300GB.
Saya memiliki dua cadangan hal-hal "penting" dan banyak hal acak yang saya ambil dari berbagai bagian internet yang harus saya lalui dan dibuang secara selektif. Sebagian besar cadangan dipecah menjadi file .tar.gz berukuran 25GB atau kurang, dan salinan / etc yang terpisah juga didukung.
Sisa dari filesystem diadakan pada dua disk raid0 kecil 38GB.
Mesin baru saya mirip dengan perangkat keras lama, dan saya menghidupkan dan menjalankan mesin hanya dengan memasukkan kelima disk dan memilih kernel generik lama. Jadi saya punya lima disk dengan filesystem yang bersih, meskipun saya tidak bisa memastikan bahwa disk berada dalam urutan yang benar, dan perlu menginstal versi baru Debian Jessie untuk memastikan bahwa saya dapat meningkatkan mesin ketika dibutuhkan, dan memilah-milah lainnya. masalah.
Dengan sistem generik baru yang diinstal pada dua disk Raid0, saya mulai menyatukan kembali array. Saya ingin memastikan bahwa saya memiliki disk dengan urutan yang benar. Apa yang seharusnya saya lakukan adalah mengeluarkan:
Tetapi saya tidak melakukannya. Tampaknya mdadm cukup pintar dan diberi uuid, dapat mengetahui drive mana yang pergi ke mana. Bahkan jika bios menunjuk / dev / sdc sebagai / sda, mdadm akan memasangnya dengan benar (YMMV though).
Alih-alih saya mengeluarkan
mdadm --create /dev/md2 without the --assume-clean
:, dan memperbolehkan sinkronisasi ulang di / dev / s11 selesai. Kesalahan berikutnya yang saya buat adalah bekerja di / dev / sdc1 alih-alih drive terakhir di / dev / md2, / sde1. Kapan pun mdadm berpikir ada masalah, itu adalah drive terakhir yang dikeluarkan atau disinkronkan kembali.Setelah itu, mdadm tidak dapat menemukan superblock, dan e2fsck -n juga tidak bisa.
Setelah saya menemukan halaman ini, saya pergi melalui prosedur mencoba menemukan urutan untuk drive (selesai), memeriksa data yang valid (diverifikasi 6MB dari file 9MB), mendapatkan disk dalam urutan yang benar, cde, meraih uuid's dari / md2 dan / md3 dari /etc/mdadm.conf lama dan mencoba merakit.
Nah,
/dev/md3
mulai, danmdadm --misc -D /dev/md3
menunjukkan tiga partisi sehat, dan disk dalam urutan yang benar./dev/md2
juga terlihat bagus, sampai saya mencoba me-mount sistem file.Sistem file menolak untuk di-mount, dan e2fsck tidak dapat menemukan superblok. Lebih lanjut, ketika memeriksa superblok seperti dijelaskan di atas, jumlah blok total yang ditemukan sebagai a880 0076 atau a880 0076 atau 5500 1176 tidak cocok dengan ukuran kapasitas disk 1199,79 yang dilaporkan mdadm saya. Juga tidak ada lokasi "superblok" yang selaras dengan data di pos di atas.
Saya mencadangkan semua / var, dan bersiap untuk menghapus disk. Untuk melihat apakah mungkin untuk menghapus just / md2, (saya tidak memiliki hal lain yang hilang pada saat ini) saya menghilangkan hal-hal berikut:
Semua tampak baik-baik saja, kecuali untuk perubahan ke uuid. Jadi setelah beberapa cek lagi, saya menulis 600GB data yang dicadangkan ke / dev / md2. Kemudian, lepaskan dan coba pasang kembali drive:
Apakah kamu bercanda? bagaimana dengan 600GB saya pada file?
Ah - mudah diperbaiki. menghapus komentar satu baris di /etc/mdadm.conf
Yippie!
sumber