Saya memiliki hard drive yang gagal yang tidak dapat menulis atau membaca sektor pertama dari disk. Itu hanya memberikan I / O kesalahan dan itu semua ada. Ada area lain pada disk yang tampaknya (kebanyakan) baik-baik saja. Saya mencoba me-mount partisi (ext4) dan melihat apakah saya dapat mengakses beberapa file yang ingin saya pulihkan. Karena mount
perintah mendukung offset
opsi, saya harus dapat me-mount sistem file meskipun tabel partisi tidak dapat dibaca dan tidak dapat ditulis. Masalahnya adalah bagaimana menemukan offset. Tidak ada alat ext4 yang tampaknya memiliki fitur khusus ini.
filesystems
partition
data-recovery
ext4
Ernest A
sumber
sumber
Jawaban:
Tidak ada standar offset per-se, karena tentu saja Anda dapat memulai partisi di mana pun Anda inginkan. Tapi mari kita asumsikan sejenak bahwa Anda sedang mencari partisi pertama, dan itu dibuat lebih atau kurang menerima default. Kemudian ada dua tempat Anda mungkin menemukannya, dengan asumsi Anda menggunakan tabel partisi DOS tradisional:
Sekarang, untuk melanjutkan, Anda akan ingin mengambil alat hex-dump favorit Anda, dan belajar sedikit tentang Tata Letak Disk ext4 . Secara khusus, ini dimulai dengan 1024 byte padding, yang diabaikan oleh ext4. Selanjutnya adalah superblok. Anda dapat mengenali superblock dengan memeriksa angka ajaib 0xEF53 pada offset 0x38 (dari awal superblock, atau 0x438 dari awal partisi, atau 1080 dalam desimal.) Nomor ajaibnya adalah little-endian. Jadi sebenarnya disimpan di disk sebagai 0x53EF.
Inilah yang terlihat dengan
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Perhatikan, bahwa ketika Anda memberikan offset untuk dipasang (atau kalah), Anda harus memberikan offset ke tempat padding dimulai — bukan superblok.
Sekarang, jika ini bukan partisi pertama, atau tidak ada di salah satu dari dua (tiga) tempat yang diharapkan, Anda pada dasarnya bisa mencari angka ajaib 0xEF53. Inilah yang
testdisk
(disarankan dalam komentar) lakukan untuk Anda.sumber
testdisk
tidak akan menemukannya. Terima kasih atas bantuannya.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
untuk mendapatkan beberapa kemungkinan pertandingan. Mungkin tidak terlalu cepat, tetapi Anda dapat membiarkannya berjalan saat Anda menemukan metode yang lebih baik.testdisk
, saya hanya perlu menambahkan sunting untuktl;dr:
tajukBerdasarkan jawaban @ derobert , saya menulis sebuah program ( inti ) yang akan mem-parsing aliran input dari
dd
dan memindai setiap sektor untuk sesuatu yang tampak seperti awal partisi ext.Ini akan berfungsi setidaknya secepat yang
dd
bisa dibaca dari hard disk Anda. Versi singkatnya ada di bawah.Penggunaan paling sederhana adalah adil
sudo dd if=/dev/xxx | ext2scan
, meskipun Anda mungkin ingin memodifikasidd
perintah untuk meningkatkan ukuran blok atau memilih wilayah untuk dicari.Catatan: ia tidak hanya akan menemukan awal partisi, tetapi juga superblok di dalamnya.
Dalam kedua kasus, saya akan merekomendasikan menggunakan
dumpe2fs
untuk menganalisis hasilnya. Anda dapat membuang awal superblok yang dicurigai ke file (setidaknya enam sektor pertama, menurut tes informal saya), dan jika itu adalah superblok, makadumpe2fs
akan memberi tahu Anda (antara lain) lokasi relatif dari superblok lainnya. .sumber
Tebak di mana partisi dimulai dan terapkan beberapa kekuatan kasar:
Saya membayangkan ini bisa memakan waktu, tetapi jika Anda sudah menghabiskan 6 jam dengan testdisk, mungkin patut dicoba.
sumber
echo "--->$i<---"
barisan karena itu karena kalau tidak, tidak mungkin untuk mengukur kemajuan. Saya pikir Anda bisa meningkatbsz
menjadi 4096, yang akan mempercepat.Coba opsi lain (mis., Menggunakan debugfs, dan fsck.ext4):
debugfs:
Anda harus me-mount debugfs terlebih dahulu (bukan harddisk yang gagal itu sendiri):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(pada dasarnya, adalah menggunakan "debugfs -w" dengan mode tulis-aktif, dan kemudian diikuti oleh "lsdel" untuk mendaftar semua file yang dihapus). atau Anda dapat menggunakannya
dan di sini adalah fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Lain adalah "sleuthkit" ("sudo apt-get install sleuthkit") yang memiliki perintah seperti "istat" untuk memberikan info blok tentang inode - dari mana Anda bisa mendapatkan offset dan dengan demikian memblokir konten data dengan mudah.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(BTW, jika blocksize adalah 1024, dari perintah "show_super_stats" debugfs, maka itu mengikuti bahwa blok 1 adalah 1024 byte offset dari awal disk, dan setiap grup blok dapat memiliki beberapa blok juga.)
sumber
Saya memiliki gambar firmware e-book yang termasuk gambar partisi ext3fs, untuk me-mount dan mengedit saya harus memindai gambar menggunakan alat bgrep untuk menemukan semua posisi nomor ajaib ext3fs
0x53EF
dan mencoba me-mount menggunakan offset yang ditemukan.Berikut ini skrip singkat yang melakukan pemasangan:
Script lengkap ada di sini .
sumber
Ini belum teruji tetapi saya pikir Anda dapat menggunakan metode yang dibahas dalam T&J SU berjudul: Membalikkan pencarian inode / file dari offset dalam perangkat mentah di linux dan ext3 / 4? .
Sepertinya Anda dapat menggunakan inode file + disk offset + ukuran blok untuk menentukan offset file.
sumber