Butuh tempat untuk menyimpan beberapa byte informasi meta pada media penyimpanan

2

Saya sedang mengerjakan proyek tertanam. Saya memerlukan tempat untuk menyimpan beberapa informasi meta independen sistem file pada perangkat penyimpanan. Perangkat ini memiliki tabel partisi MSDOS. Perangkat ini juga mungkin memiliki ruang yang tidak terisi (tergantung pada ukurannya) tetapi akan TRIMmed (dan juga mungkin terhempas oleh partisi baru di masa depan).

Saya memerlukan lokasi pada perangkat yang tidak teralokasi dan yang memiliki risiko rendah disentuh (di luar sepenuhnya menghapus perangkat). Perangkat hanya dijamin memiliki MBR pada titik meta data harus ditulis terlebih dahulu; artinya tidak ada EBR / VBR yang dapat saya gunakan.

Ada 446 byte di awal perangkat yang tersedia untuk kode bootstrap MBR. Saat ini satu-satunya ide saya adalah menyimpan data di akhir blok ini. Namun, perangkat ini dapat di-boot dan saya tidak tahu apakah saya akan menghapus kode bootstrap atau tidak.

Ukuran sektor adalah 512 byte dan MBR adalah sektor pertama, saya cukup yakin (benar jika saya salah) bahwa itu berarti sektor kedua tersedia untuk digunakan oleh data partisi, jadi saya tidak dapat menggunakannya juga .

Adakah yang punya ide? Saya butuh 4 byte ruang.

Jason C
sumber

Jawaban:

1

Windows NT menggunakan tanda tangan disk 32-bit untuk mengidentifikasi masing-masing disk yang dipartisi MBR, dan menyimpannya sebagai enam byte dimulai dengan 440 [01B8h] (empat byte berisi tanda tangan dan dua nol byte). Ini menyisakan 440 byte untuk kode bootstrap.

Disk signature pertama kali diperkenalkan dengan Windows NT 4 (dan menjadi diperlukan pada disk MBR dimulai dengan Windows Vista). Sejak itu juga digunakan dalam cara yang mirip dengan "disk UUID" GPT oleh sistem non-Windows (Linux dan GRUB mendukungnya).

Karena itu, banyak bootloader membatasi kode bootstrap mereka di MBR hingga 440 byte, untuk menghindari menimpa tanda tangan disk. (Saya baru saja memverifikasi bahwa GRUB dan Syslinux melakukannya.)

Ada kemungkinan besar bahwa bootloader yang digunakan oleh perangkat Anda juga tidak meninggalkan tanda tangan disk. Periksa apakah dua byte yang dimulai pada 444 [01BCh] adalah 00 00- jika ya, maka empat byte lainnya akan tetap tidak berubah kecuali seluruh tabel partisi dihilangkan, atau jika kode bootstrap baru yang lebih besar dari 440 byte dipasang.

grawity
sumber
Komentar Ninja'd oleh @ JasonC sendiri oleh dua detik. Sial.
grawity
Terima kasih. Dua byte tersebut adalah 00,00, dan ada empat byte data yang bukan nol sebelumnya. 436-439 itu. Juga terima kasih atas info tentang persyaratan tanda tangan pada Windows, saya tidak yakin kapan itu menjadi praktik umum, baik untuk diketahui.
Jason C
1
@JasonC: Ya, dan tanda tangan disk persis di mana saya menyarankan untuk menyimpan data Anda. 436-439 masih merupakan bagian dari kode bootstrap.
grawity
1
@JasonC: Tidak akan (masih ada banyak disk dengan area "disk signature" yang diisi dengan kode bootstrap). Namun, jika tanda tangan berubah , Windows dapat mengenali disk sebagai perangkat yang sama sekali baru (meskipun mungkin diabaikan untuk penyimpanan yang dapat dilepas, dan bagaimanapun juga hanyalah ketidaknyamanan kecil). ⫽ Dalam hal ini, ide Naib untuk menggunakan area kode bootstrap yang sebenarnya mungkin lebih baik, jika perangkat itu sendiri memiliki metode boot yang berbeda.
grawity
1
@JasonC: ... sebagai alternatif, atur dua byte terakhir ke sesuatu selain 00 00, yang seharusnya membuat Windows berpikir bahwa disk tidak memiliki tanda tangan NT sama sekali dan bahwa kode bootstrap meluas hingga 446 byte penuh. (Saya tidak yakin kapan tanda tangan ditulis - mungkin hanya selama instalasi OS, karena Windows tidak ingin merusak kode bootstrap yang ada ketika seseorang hanya terhubung ke perangkat.)
grawity
3

MBR berisi tabel partisi serta kode booting

Bootcode: 446bytes Parisi primer: 64bytes Sig: 2bytes

Apakah penyimpanan akan digunakan untuk boot dari? mungkin ada baiknya mempertimbangkan "merusak" bootcode dalam MBR untuk menyimpan metadata itu. Bootcode hanya benar-benar digunakan saat boottime

Naib
sumber
1
Terima kasih. Itu juga yang saya pikirkan. Hal ini boot dari. Namun, saya baru menyadari bahwa itu tidak dijalankan pada perangkat x86 dan kode bootstrap tidak berarti apa-apa, sedang dijalankan pada perangkat OMAP dan saya hanya berkonsultasi dengan dokumentasi proses booting dan mengkonfirmasi bahwa ia melewatkan bootloader MBR dan hanya mencari partisi FAT32 pertama. Juga menurut en.wikipedia.org/wiki/Master_boot_record Windows terkadang menggunakan byte 440-446 sebagai tanda tangan perangkat opsional. Saya percaya, kalau begitu, saya bisa menggunakan byte 436-439 dengan aman di MBR untuk menyimpan data saya tanpa risiko mengganggu.
Jason C
Saya menandai jawaban grawity sebagai benar karena dia memasukkan info tentang tanda tangan disk, tapi saya berharap saya bisa menerima lebih dari satu jawaban. Terima kasih lagi.
Jason C
1

Satu-satunya cara yang benar-benar aman untuk menyimpan data Anda adalah dengan partisi sendiri. Mengingat kebutuhan Anda, partisi bisa kecil (satu sektor). Menyimpan data di luar partisi berisiko menyebabkan overrun atau data Anda menimpa sesuatu yang penting. Mengingat bahwa ini hanya empat byte, mengambil alih nomor seri tabel partisi, seperti yang ditunjukkan oleh grawity, mungkin adalah opsi ter-out-of-partisi yang paling aman, tetapi saya tidak akan merekomendasikan ini, terutama bukan tanpa lebih banyak konteks, karena nomor seri yang digunakan oleh beberapa alat, sehingga mengambil alih dibayangkan mungkin menyebabkan masalah jika Anda bergantung pada sesuatu yang menggunakan nomor seri.

Rod Smith
sumber