MBR önyükleme kodu oluşturma


0

Yeni bir bölüm oluşturmak (disk yardımcı programını kullanarak fdisk) gerçekten ne işe yarıyor? Sadece Bölüm Tablosu mu yoksa MBR önyükleme kodu mu yaratıyor?

Yanıtlar:


2

Unix felsefesine göre bir program bir şeyi yapmalı ve iyi yapmalı. Belirli bir aracın bölüm tablolarını değiştirmesi gerekiyorsa, önyükleme kodunu değiştirmeyle (veya dosya sistemi oluşturma vb.) Kendisini rahatsız etmemelidir.

Tabii ki tüm çan ve ıslık şişirilmiş aletler var, fdiskonlardan biri değil. Davranışlarımın analizini aşağıda bulacaksınız. MBR önyükleme kodunu değiştirmeden bırakırken yeni bir bölüm oluşturmanın tamamen mümkün olduğunu kanıtlıyor .

Her platformdaki tüm disk yardımcı programlarını bilmiyorum. Bu cevap fdisksadece Linux yardımcı programını kapsamalıdır .


Halinde fdisk

Testbed: Ubuntu 16.04.2 LTS, fdiskden util-linux 2.27.1.


1. Sıfır Dosyası

İle boş bir dosya oluşturdum

dd if=/dev/zero of=mydisk bs=1M count=1

Sonra çalıştırmak fdisk mydiskve sektörden tek bir bölüm eklendi 63için 2047, ben bölüm tablosunu yazdım.

Çıktısı hexdump -C mydisk:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  bb 50 d8 1d 00 00 00 01  |.........P......|
000001c0  01 00 83 20 20 00 3f 00  00 00 c1 07 00 00 00 00  |...  .?.........|
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

Gördüğünüz gibi ilk sıfır olmayan bayt 0x1b8; Sonuncusu ise 0x1ff. Bu karşılaştırın modern standart MBR yapısı ve kimden parçası olduğunu göreceksiniz disk imzası için önyükleme imza . Sonradan önyüklenebilir bayrağı da ayarladım ancak önyükleme kodu üzerinde de bir etkisi olmadı. Anlamlı bir önyükleme kodu görünmüyor, önyükleme yapmıyor.


2. Çöplü MBR, geçersiz imza

Aynı dosyaya sahip MBR'sini çöp ile birlikte yazdım:

dd if=/dev/urandom of=mydisk bs=512 count=1 conv=notrunc

Ve önyükleme imzası olmadığından emin oldum (doğru olan 0xAA55küçük endian olurdu , kullandım 0x1234):

echo -ne "\x34\x12" | dd of=mydisk bs=1 count=2 seek=510 conv=notrunc

Sonra eskisi gibi bir bölüm oluşturdum. Tüm çöplerin üzerine yazılmıştı fdiskve hexdump -C mydiskçıktılar eskisi gibi oldu. Önyükleme kodu alanı sıfırlandı, önyükleme yapmıyor.


3. Çöplü MBR, geçerli imza

Aynı dosya. Yine çöp yazmak:

dd if=/dev/urandom of=mydisk bs=512 count=1 conv=notrunc

Bu sefer uygun önyükleme imzası belirledim ( 0xAA55, küçük endian):

echo -ne "\x55\xAA" | dd of=mydisk bs=1 count=2 seek=510 conv=notrunc

Sonra fdisk mydiskyarı geçerli bölüm tablosunu incelememe izin verdi. Tüm bölümleri sildim ve daha önce olduğu gibi sadece bir tane oluşturdum. Ben çalıştırmak hexdump -C mydiskve bölüm tablosu alanı değişmiş iken, önyükleme alanda çöp hâlâ orada olduğunu keşfetti. Önyükleme kodu alanında herhangi bir değişiklik olmadı.

fdiskÇöp içermeyen, mükemmel aklı başında önyükleme kodu içeren MBR ile test etmedim . Aracın kodu analiz etmediğine kesinlikle inanıyorum. Çöpün bu durumda olmasına izin verir, bu yüzden herhangi bir veriyle aynı şeyi yapmalıdır.


Sonuç

fdiskDavranış varlığına bağlıdır önyükleme imza değeri - 0xAA55512 bayt MBR en sonunda küçük endian olarak yazılır.

  • Ne zaman fdiskimzayı bulur, zaten orada inandığı geçerli bir MBR bulunur. Bölüm tablosunda bazı değişiklikler yapılmış olsa bile, önyükleme kodu alanını el değmeden bırakır.

  • Ne zaman fdiskhiçbir geçerli imza bulur, yeni bölüm tablosunu yazarken o birini oluşturur böylece hiçbir geçerli MBR, var inanmaktadır. Bu durumda önyükleme kodu alanı sıfırlanır (önyükleme yapılmaz).

Her iki durumda da fdisk, aslında önyükleme yapan kendi önyükleme kodunu oluşturmaz.


1
Not: GPT diskleri için gdiskolduğu gibi yazdım fdisk. MBR'ye önyükleme kodu yazan hiçbir Linux bölümleme aracı bilmiyorum, ancak hangi durumlarda (2 numaralı durumda olduğu gibi) araçların MBR kod alanını sıfırlayabileceği durumlar var. Diğer işletim sistemleri için bölümleme araçlarına daha az aşina oluyorum. Söylediğiniz gibi, birçok bölümlendirme aracı var, bu nedenle bunların hiçbirinin önyükleyici kodunu yazmadığını söylemek neredeyse imkansız olurdu ; On kişiyi muayene etseniz bile, 11'inin farklı bir şeyler yapması mümkündür. Ayrıca MBR önyükleme kodunun EFI modu önyüklemesine geçişle daha az ilgili olduğunu unutmayın.
Rod Smith

Benim cevabım hakkındadır @RodSmith fdiskçünkü fdiskaçıkça söz konusu bahsedildi (o anlamlara gelebilir rağmen fdiskDOS için ben bunun farkında değilim). Btw, üzerinde çalıştığınız için teşekkür ederim gdisk.
Kamil Maciorowski

hiçbir eleştiri amaçlanmamıştır; Sadece kapsamı biraz genişletmek istedim, AFAIK, hiçbir Linux bölümleme yazılımı MBR'ye önyükleme kodu yazmadı.
Rod Smith

1

Hiçbiri yoksa bir MBR oluşturur ve içinde geçerli bölümleme şeması için bölüm ve cilt tabloları oluşturur. Bu bilgi, şema değiştikçe güncellenir.

MBR , aktif bölümler için birim önyükleme kayıtlarına (VBR; aka önyükleyici) işaret eder . Bu bölüme bir işletim sistemi yüklendiğinde, önyükleyici kodunu MBR'ye ve önyükleme kesimi kodunu birimi için VBR'ye yerleştirir. Önyükleyici daha sonra kullanıcının çoklu önyükleme durumunda seçim yapması için önyüklenebilir VBR'ler sunar veya yapılandırmasında varsayılan VBR'ye önyükleme yapar.


Yani bir işletim sistemi kurulduğunda, daha önce fdisk tarafından oluşturulan MBR önyükleme kodunu yeniden yazar mı?
Mulligan

fdisk önyükleme kodu oluşturmaz.
davidgo,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.