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, 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 .
fdiskTestbed: Ubuntu 16.04.2 LTS, fdiskden 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 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.
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.
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.
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.
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.
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.
gdiskolduğ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.