Pembaruan terakhir:
Saya sudah tahu apa yang harus saya lakukan untuk memperbaiki masalah ini; Saya hanya tidak tahu bagaimana melakukannya. Saya berharap akan ada alat yang siap pakai untuk melakukan itu secara otomatis - tetapi tidak dapat menemukannya. Saya menerima jawaban Rod karena walaupun tidak secara langsung menyelesaikan masalah saya, ini memberikan latar belakang yang sangat baik pada masalah ukuran sektor, dan memberi saya kepercayaan diri bahwa masalah tersebut benar-benar adalah penyelarasan dan pengalamatan partisi. Bagi mereka yang datang ke pertanyaan ini memiliki masalah yang sama, baca dengan seksama dan hati-hati, termasuk komentar, sebelum melakukan apa pun.
Pada awalnya
Saya memiliki komputer dan membutuhkan lebih banyak ruang. Saya telah membeli drive 500GB baru dan penutup USB. Segera saya perhatikan bahwa jika saya mempartisi drive pada enklosur dan memindahkannya ke komputer, ia tidak akan mengenali partisi (dan sebaliknya). Saya berasumsi itu adalah masalah dengan kandang dan tidak khawatir tentang hal itu.
Lalu, tragedi
Hari yang indah, komputer saya memutuskan untuk tidak hidup lagi. Ternyata motherboard (tidak bermerek, hanya MADE IN CHINA yang dicetak di atasnya) sudah mati. Saya telah menggunakannya sebagai file-server dan drive 500GB itu sekarang penuh dengan data yang saya tidak mampu kehilangannya. Saya bangkrut sekarang dan tidak mampu membeli komputer baru, jadi satu-satunya harapan saya adalah kandang USB "rusak".
Investigasi
Berbekal beberapa distribusi Linux, laptop, VirtualBox dan enklosur saya melakukan analisis forensik tentang masalah ini. dmesg melaporkan ukuran partisi berada di luar end-of-drive. Jadi saya membaca lembar data hard drive, menghitung jumlah sektor dari awal, menguji batas drive secara manual dengan dd, dan semuanya tampak OK, sampai saya menjalankan fdisk dan mengatakan:
Note: Sector size is 4096 (not 512).
Betapa sederhana fdisk. "Catatan" ini adalah akar dari semua masalah. Setelah lebih mengutak-atik kesimpulan ini ditarik:
Enklosur USB tidak rusak.
Pengontrol SATA pada motherboard yang sekarang sudah mati adalah yang "aneh", setidaknya. Itu tidak melaporkan sektor 4096-byte ke sistem operasi, jadi OS dengan senang hati menciptakan MBR menggunakan alamat sektor 512-byte.
Sekarang ketika saya mencoba mengakses partisi, OS mencoba menggunakan alamat berbasis 512-byte pada drive sektor 4096-byte, dan tentu saja, itu tidak akan berhasil.
Pertanyaan
Jadi, bagaimana saya bisa memperbaiki alamat di MBR sehingga mereka valid pada ukuran sektor 4096-byte, selain dari mengedit MBR secara manual pada hex-editor, dan
Partisi tidak disejajarkan untuk sektor 4096-byte. Ada beberapa alat yang tersedia untuk menyelaraskannya selain menyalin masuk dan keluar dari drive lain? (Saya tidak punya drive cadangan), atau apakah saya perlu membuat beberapa alat yang "menggeser" data ke samping sedikit demi sedikit? Partisi adalah ext3.
Terima kasih!
Memperbarui:
Saya menemukan ada cara pintar untuk menggunakan dd untuk menggeser partisi di tempat dalam pertanyaan ini: Bagaimana cara memindahkan partisi di GNU / Linux? Tapi saya tidak tahu apakah itu akan bekerja pada sepotong sektor. Saya tidak bisa mengujinya sekarang tetapi akan dilakukan ketika saya punya waktu.
Pembaruan 2:
Jadi saya telah berhasil menyelaraskan partisi menggunakan metode di atas dan mengedit MBR pada hex editor. Segera setelah saya memasang kembali HDD, partisi boom dipasang secara otomatis! Saya tidak merekomendasikan ini, ada kesalahan I / O selama proses dan saya bisa kehilangan segalanya, lihat komentar pada jawaban Rod. Untuk partisi lain saya tidak akan mengambil risiko dan akan menggunakan HDD lama dan menyelaraskan potongan sekaligus dengan menyalin data dan kemudian menempelkannya kembali pada posisi yang berbeda.
sumber
fdisk
untuk mengedit MBR (Saya mempelajari ini nanti, tidak perlu editor hex :)) Anda dapat mengubah setiap titik dan ukuran awal entri, dan meninjau perubahan sebelum menerapkan. Jadi: mulaifdisk
, catat konfigurasi saat ini (atau lebih baik, buat cadangan MBR dengandd
), gandakan nilai mulai alamat dan ukuran dengan 8 dan mengubahnya. Pastikan untuk memeriksa semuanya dengan kalkulator dan memahami apa artinya nilainya. Anda akan melihat bahwa Ukuran = Akhir - Mulai + 1, dan yangfdisk
menunjukkan ukuran dalam unit 1000-sektor, jadi Anda mungkin perlu mengaktifkan mode ahli untuk melihat nilai sebenarnya, dll.Jawaban:
Masalah ukuran sektor menjadi cukup kompleks. Hingga akhir 2009, sebagian besar hard disk menggunakan sektor 512-byte, dan hanya itu. Pada akhir 2009, produsen disk mulai memperkenalkan disk yang disebut Format Lanjutan (AF), yang menggunakan sektor 4.096 byte. Disk AF pertama ini (dan, AFAIK, semua disk AF hari ini) menghadirkan antarmuka ke komputer yang memperlihatkan masing-masing sektor fisik 4096-byte sebagai terbagi menjadi delapan sektor logis 512-byte . Konversi ini memungkinkan alat yang lebih lama, termasuk banyak BIOS, yang dibangun dengan asumsi 512-byte, untuk terus bekerja. Saya tidak tahu apakah disk Anda menggunakan AF atau tidak, tetapi dalam kedua kasus itu, hampir pasti menggunakan ukuran sektor logis 512-byte, yang berarti bahwa antarmuka ke OS harus menggunakan sektor 512-byte.
Masalah yang rumit adalah penutup disk USB tertentu. Beberapa penutup ini melakukan kebalikan dari yang dilakukan AF: Mereka mengambil delapan sektor disk dan menggabungkannya menjadi satu sektor 4096-byte baru. Saya tidak yakin apa alasan di balik langkah ini, tetapi satu keuntungan praktis adalah bahwa disk yang lebih besar dari 2TiB dapat digunakan dengan sistem partisi MBR yang lama. Salah satu kelemahan utama adalah bahwa disk yang dipartisi di salah satu lampiran ini tidak dapat digunakan secara langsung atau dalam lampiran yang tidak melakukan terjemahan jenis ini. Demikian juga, disk yang disiapkan tanpa terjemahan ini tidak dapat digunakan ketika dipindahkan ke enklosur seperti itu. Perhatikan bahwa masalah ini melampaui MBR itu sendiri; disk Anda mungkin mengidentifikasi partisi pertama sebagai dimulai pada sektor (512-byte) 2048, tetapi jika OS Anda mencari ke (4096-byte) sektor 2048,temukan awal dari partisi itu! Anda mengalami masalah ini. Dengan demikian, pemikiran awal Anda bahwa itu adalah kesalahan enklosur USB lebih dekat ke tanda daripada yang lebih baru Anda pikirkan bahwa motherboard Anda mengacaukannya. Saya belum pernah mendengar motherboard menerjemahkan ukuran sektor dengan cara ini. (Meskipun demikian, beberapa perangkat RAID perangkat keras melakukannya.)
Saya tidak tahu cara memaksa Linux untuk menyesuaikan idenya tentang ukuran sektor, tetapi jika Anda memiliki ruang disk yang cukup, melakukan salinan disk tingkat rendah ke disk lain dapat membantu. Contohnya:
Ini akan menyalin disk Anda dari
/dev/sdb
(disk USB; sesuaikan seperlunya) ke file~/image.img
. Anda kemudian dapat menggunakan skrip berikut untuk me-mount partisi gambar:Simpan skrip sebagai, katakan,
mount_image
dan gunakan seperti ini:Ini akan me-mount partisi 2
image.img
ke/mnt
. Perhatikan bahwa skrip bergantung pada GPT fdisk (gdisk
) , yang sebagian besar distribusi menyertakan dalam paket yang disebutgptfdisk
ataugdisk
.Dalam jangka panjang, solusi yang lebih baik adalah menemukan cara untuk menghubungkan disk yang tidak akan melakukan terjemahan ukuran sektor. Koneksi langsung ke motherboard baru harus melakukan trik; atau Anda mungkin dapat menemukan kandang eksternal yang tidak melakukan terjemahan. Bahkan, beberapa enklosur melakukan terjemahan pada port USB tetapi tidak pada port eSATA, jadi jika enklosur Anda memiliki port eSATA, Anda dapat mencoba menggunakannya. Saya menyadari bahwa semua solusi ini kemungkinan membutuhkan biaya, yang menurut Anda tidak Anda miliki, tetapi mungkin Anda dapat menukar enklosur terjemahan Anda dengan yang tidak melakukan terjemahan.
Pilihan lain yang terjadi pada saya adalah mencoba menggunakan mesin virtual seperti VirtualBox. Alat semacam itu mungkin mengasumsikan ukuran sektor 512-byte ketika mengakses perangkat disk, secara efektif membatalkan terjemahan; atau Anda mungkin dapat menyalin isi disk mentah (seperti di
dd if=/dev/sdc of=/dev/sdb
) dalam mesin virtual, yang mungkin menyalin konten dengan kompresi, sehingga memungkinkan gambar untuk masuk pada ruang disk yang lebih sedikit daripada yang asli dikonsumsi.sumber
dd
! Kecuali jika Anda sangat berhati-hati dan memahami hal-hal dengan sangat baik (atau sangat beruntung), Anda lebih cenderung membuangnya daripada memperbaikinya. Terjadi pada saya bahwa Anda mungkin dapat menyesuaikan tabel partisi menggunakanfdisk
: Cadangkan yang asli dan kemudian bagi titik awal setiap partisi dengan 8 (dan atur titik akhir untuk mengakhiri tepat sebelum titik awal partisi berikut). Ini merupakan peluang hanya jika nilai titik awal partisi semuanya adalah kelipatan 8.dd
klon saat terhubung melalui USB, dan saya pikir klon telah gagal. Tetapi ketika saya menghubungkan SSD langsung ke motherboard saya di tempat HDD lama saya, semuanya bekerja dengan baik!Skrip ini menggeneralisasi proposal Rod Smith, saat Anda melakukan razia atau crypto. Tidak ada jaminan. Jangan ragu untuk memperbaikinya! (Diperbarui dengan temuan terbaru tentang mdadm)
sumber
Cara lain, cukup lurus ke depan untuk melakukan ini adalah menggunakan fungsi penyelamatan parted. Ini mengharuskan Anda untuk membuat label disk baru, jadi itu melibatkan risiko. Parted bertindak langsung pada disk sehingga membuat cadangan seperlunya sebelum menjalankan parted. Kemudian mulailah:
parted akan memberi tahu Anda sesuatu di sepanjang baris ini ketika mencoba membaca disk dengan ukuran sektor yang berbeda dengan yang dibuat tabel partisi:
Gunakan mklabel untuk membuat MBR atau GPT baru sesuai dengan apa yang Anda gunakan sebelumnya
Kemudian jalankan penyelamatan untuk menemukan partisi lama Anda
Ulangi proses penyelamatan jika Anda memiliki lebih banyak partisi. Anda sudah selesai.
sumber
Saya mengalami masalah ini ketika saya melepaskan disk 4TB dari kandang eksternal WD My Book. Masalahnya adalah:
Solusi: Tulis ulang tabel partisi menjadi GPT, mengonversi nilai untuk menggunakan sektor 512 byte.
Dalam kasus saya, partisi dimulai dengan offset 1MB dan berakhir (~ 856kB) sebelum akhir disk. Ini bagus karena kemudian diperbolehkan untuk MBR + GPT (17408 bytes) sebelum partisi dan cadangan GPT (16896 bytes) di akhir disk.
Saya membuat gambar dari kedua wilayah untuk berjaga-jaga (menggunakan dd).
Saya mencatat output dari
fdisk -l /dev/sde
.Saya menggunakan gdisk untuk menghapus partisi pertama. Jika mau, Anda bisa melakukan seperti yang saya lakukan dan mengubah nilai align ke 8 (4096) untuk menggunakan ruang sebanyak mungkin. Kemudian, saya membuat partisi baru dengan mulai pada 2048, dan akhir di akhir disk. Saya akan menumbuhkan sistem file nanti.
Untungnya, perubahan ukuran sektor tidak mempengaruhi sistem file, LVM, atau LUKS.
sumber