Yanıtlar:
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, fdisk
onlardan 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 fdisk
sadece Linux yardımcı programını kapsamalıdır .
fdisk
Testbed: Ubuntu 16.04.2 LTS, fdisk
den util-linux 2.27.1
.
İle boş bir dosya oluşturdum
dd if=/dev/zero of=mydisk bs=1M count=1
Sonra çalıştırmak fdisk mydisk
ve sektörden tek bir bölüm eklendi 63
iç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.
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 0xAA55
küçü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ı fdisk
ve hexdump -C mydisk
çıktılar eskisi gibi oldu. Önyükleme kodu alanı sıfırlandı, önyükleme yapmıyor.
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 mydisk
yarı 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 mydisk
ve 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.
fdisk
Davranış varlığına bağlıdır önyükleme imza değeri - 0xAA55
512 bayt MBR en sonunda küçük endian olarak yazılır.
Ne zaman fdisk
imzayı 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 fdisk
hiç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.
fdisk
çünkü fdisk
açıkça söz konusu bahsedildi (o anlamlara gelebilir rağmen fdisk
DOS için ben bunun farkında değilim). Btw, üzerinde çalıştığınız için teşekkür ederim gdisk
.
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.
gdisk
olduğu gibi yazdımfdisk
. 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.