Neden çoğu dağıtım UEFI ve grub zincirini kullanıyor?


31

Çoğu dağıtım bir UEFI sistemine ek bir önyükleyici yükler. UEFI'nın kendisi bir önyükleyicidir, farklı işletim sistemlerini veya tek tek çekirdekleri seçmek için bir menü sunar. Ayrıca, UEFI ayarları gibi kullanıcı araçları ile kolayca değiştirilebilir efibootmgr.

3.3'ten beri olan çekirdekler EFI_STUB'ı desteklemektedir, bu da çekirdeğin doğrudan UEFI'den yüklenebileceği anlamına gelir. Dağıtımların ek bir önyükleyici kullanmaya karar vermesinin nedeni nedir? Linux / UEFI hakkındaki çoğu öğretici, Linux'u EFI_STUB ile başlatmak yerine, ek önyükleyici (rEFInd, grub2, ELILO, vb.) Ayarlarının nasıl yapıldığına odaklanır.

Dağılımlarda eksik olan tek şey destek. Çoğu dağıtım ikinci bir önyükleyici zinciri oluşturduğundan, çekirdek UEFI önyükleme menüsüne eklenmez ve EFI sistem bölümüne de kopyalanmaz.

Tüm sihri yapmak için üç senaryo yeterli. Initramfs'i ESP'ye kopyalayan biri. İkincisi, çekirdeği ESP'ye kopyalar ve UEFI önyükleme menüsünde yeni bir giriş oluşturur. Üçüncü komut dosyası eski çekirdeği ve initramfs öğelerini ESP'den kaldırır ve UEFI önyükleme menüsü girişini siler. Bu tam otomatikleştirilmiş çekirdek / initramfs güncelleme / temizleme işlemlerini kullanıcı etkileşimi olmadan sağlar. Bu yaklaşımı bir yıldan fazla bir süredir kullanıyorum ve kusursuz çalıştı.

Neden çoğu dağıtım EFI_STUB yerine grub kullanıyor?

Bağlantılar:

EDIT: Grub desteğini tamamen kaldırmaktan değil, çeşitli nedenlerle kullanmak isteyenler için bir seçenek sunmaktan bahsetmiyorum. Dağıtımlar, grub-efiUEFI'yi ve grubunu zincirlemek isteyenler için bir paket ve efistub-bootyukarıda bahsettiğim senaryoları içeren bir paket sağlayabilir .


4
Neden onlar? Grub konfigürasyon dosyası almak / üretmek için metotlar oluşturmuşlar. Ayrıca, tüm sistemler (UEFI ve UEFI olmayan) aynı şekilde davranırsa yardımcı olur.
Ulrich Dangel

Kulağa hoş geliyor. Ancak bu bağlantıya göre eğer istersen yapabilirsin , belki dağıtımların senin için otomatik olarak yapması için potansiyel bir bataklıktır. Betcha bazıları sonunda size tho seçeneğini verecek.
goldilocks

1
@Bakuriu Örneğin, sistemi anlamak daha kolay, daha basit bir önyükleme sırası, daha az çalıştırılan kod ve biraz daha hızlı başlatma süresi.
Marco

4
Verilen soru nedeni yanlış olduğu için bu soru ertelenmelidir. Sorunun tartışmasız basit bir cevabı var: UEFI bir önyükleme menüsü sunmuyor. Bazı uygulamalar yapar. Bazıları, Windows 8 için hedef önyükleme sürelerine ulaşmak için BIOS giriş cihazlarını bile başlatmıyor . Kullanıcının bir tuşa basıp basmadığını görmek için bekleyin. Öyleyse Linux’a ulaşmak için Windows’tan geçmek zorundasınız, ya da tam tersi. Eski bazı sistemler üzerinde çalışır, ancak spec garanti eder şüpheliyim. İkincisi çalışmıyor (GRUB'dan UEFI kurulumuna girebilirsiniz, ancak Linux'tan giremezsiniz).
sourcejedi, 20.03.2013

1
@sourcejedi İddialarınız kaynaklarınızla eşleşmiyor. UEFI bir önyükleme menüsü sağlar (ancak, satıcılar arasında tutarsız UI). mjg59, felsefi taviz vermeden önyükleme menüsünü alamayacağınız anlamına geliyordu (W8 EULA'yı kabul ediyor). Ancak bu sorun, EFISTUB grubun önyükleyicisine sahip olmayan montajcılar için aynı olacaktır. Bu yüzden neden EFISTUB yerine grub tercih ettiğimizi cevaplamıyor.
Lingzhu Xiang,

Yanıtlar:


10

UEFI’nin yalnızca 2005’te tanımlandığı göz önüne alındığında , şartnameyi desteklemeyen bir sürü eski donanım var. UEFI'yı standart bir dağılıma eklemek için, bir yerine iki kod yolunun test edilmesi gerekir ve yalnızca önyükleme kodu titizlikle titiz değildir, test edilmesi en rahatsız edici zaman alan kod bitlerinden biridir.


5
Sadece test etmek sinir bozucu bir zaman değil, aynı zamanda yanlış giden en rahatsız edici koddur. Şunu düşünün: sistem normal olarak çalışırken ve çoğunlukla çalışırken veya sistemi önyükleyemiyorken ne tür bir sorunu tercih edersiniz? Bagaj yükleyici kesinlikle gerekmediği sürece dokunmama konusunda en çok kuvvetle hissettiğim yazılım parçalarından biri.
CVn

@ MichaelKjörling tarafından yukarıdaki yorum bir Cevap olmalıdır. Yeni bir boot yükleyiciye geçmek çok çok riskli. Distro-yaratıcıları, kullanıcılarının iyi bir deneyime sahip olmasını ister, ancak bundan daha da fazlasını, potansiyel olarak yeni bir kullanıcının, kusursuz bir ilk kez deneyime sahip olmasını isterler. Dağıtıma "distro" dediğim için üzgünüm ama yaratıcılarla birlikte iyi hissettim.
Johan

@Johan msw cevap içine nokta, ben umursamıyorum o düzenlemek serbesttir. (Kendi başına bir cevap olması yeterli değil, IMO.) Hem Tobu hem de goldililocks bu konuya da değiniyor .
bir CVn

3

Dağıtımların kaynakları sınırlı ve bunun ötesinde herhangi bir sebep olmayabilir. Oldukça basit ve güvenli olabilir, ancak daha fazla bakım çalışması gerektirecek ne olursa olsun , yalnızca UEFI olmayan sistemler için grub seçeneğinin korunması gerekir.

Herkesin dağıtımların benimsemesini görmek istedikleri özellik ve seçeneklerin bir listesi olduğundan eminim (size birkaç sayfa vereceğim) ve bunların birçoğunun "tamamen kolay, güçlükler olmadan, dürüstçe olacağından şüphesiz." .. ". Ancak, bunları uygulamak için sonsuz sayıda insan saati yoktur. Bu gibi kararlarla karşılaştığımızda ("Bu özelliğe iş koyar mıyız, diğerlerine karşı mı?") Temel sorular şöyle olmalıdır:

  • Bu gerekli? (Buradaki cevap hayır).
  • Kaç kişi faydalanacak ve ne kadar? (IMO: çok az)
  • Kullanıcının, hiçbir şey yapmadan kendi kendine uyum sağlayabileceği makul bir alternatif var mı? (Görünüşe göre var.)

İnsanların dikkat dağıtıcıları kullanmasının nedeni, herkesin kaynak kısıtlamalarına maruz kalmasıdır (aksi takdirde, sadece bir ekip kiralayın, onlara bir alan ve ekipman satın alın ve istediğiniz gibi her şeyi yapmalarını isteyin). Dolayısıyla gerçek şu ki dağıtımlar kullanıcılarının genel ihtiyaçlarını yansıtıyor .

Bununla birlikte, bunun zaman içinde bir seçenek olarak benimseneceğini düşünüyorum ve soruyu geçersiz kıldım.


2

Gruba ek olarak UEFI önyükleyicilerini hedef almak kalite kontrol ve desteğini zorlaştırır. Dağıtımlar UEFI spesifikasyonundan ziyade grubun hedefini oluşturuyor, çünkü grub özgür yazılım, hacklenebilir, daha esnek ve yüksek kalitede. Bir öğreticiyi takip ederek ve UEFI bölümünü monte ederek hala saf bir UEFI önyüklemesi alabilirsiniz /boot, çünkü bunu yaparsanız, bakım size bağlıdır.


sizin kalite iddiası tartışmalıdır, ama bu hedef s sebebi yine onunla ilgisi yok bence. Zaten bununla başa çıkacak binlerce kötü yazılmış kabuk betiği satırı var, neden 20 iyi olanı istiyorlar?
mikeserv

1

Asıl sorun, insanların nasıl çalıştığını anlamadıkları. Örneğin, sorunuzda üç komut dosyasının gerekli olduğunu söylersiniz ve buradaki yanıtların çoğu, çalışması için gereken tüm ek bakımlarla ilgilidir - ancak gerçek şu ki, bu komut dosyalarına ihtiyacınız yok. veya herhangi bir ek iş.

İhtiyacınız olan tek şey, ESP'yi veya çekirdeği korumak istediğiniz her yerde /boot, tek bir çizgiyle yapabileceğiniz bağlama bağlamaktır /etc/fstab. Bunu yapın ve mevcut çekirdek güncelleme komut dosyalarının tümü çalışmaya devam edecektir.

Benim `/ etc / fstab 'benziyor:

LABEL=ESP /esp vfat defaults 0 2
#
#^ i like a separate mount point - not necessary though
#
/esp/EFI/arch_root /boot none bind,defaults 0 2
#
#^ i keep separate installations in separate directories
#

Üreticiye özgü ayarlarla ilgili, burada yapılmış iyi bir nokta var. UEFI açıkça gelmez değil bir önyükleme menüsü için arayüz belirtin. Bu kapmak için ve makineler arasında tutarlı olmayacak. Can sıkıcı, ama doğru.

Ve böylece, aslında sadece gibi bir yükleyici daha fazla iş yapılmasını sağlarken, rEFInd gibi bir menü uygulaması farklılıkları eşitler ve her şeyi basitleştirir.grub


1
Bunun nasıl işe yarayacağını anlamıyorum. Çekirdeğin ve initramfs'ın dosya adlarının sürüm içerdiğini unutmayın. Herhangi bir komut dosyası yoksa, yeni bir tane yükledikten sonra eski çekirdeğinizi yeniden başlatırsınız. Veya farklı şekilde ifade edilir: Varsayılan çekirdeği yenisine işaret edecek şekilde nasıl değiştirirsiniz? (Komut dosyalarım efobootmgrönyükleme sırasını güncellemek ve varsayılan çekirdeği değiştirmek için kullanır).
Marco

@Marco - varsayılan önyükleme yolu \EFI\BOOT\BOOTX64.efive bu nedenle bunun için adlandırılmış olabilir. UEFI cant (spec tarafından) ilk önce çekirdeğe olan argümanları ele alır - bu nedenle initramfs / çekirdek görüntüsünün bu durumda birbirine bağlanması gerekir. ama sürüm isimlendirme hakkında ne demek istediğinizi anlamadım - bence sadece debianlar bunu yapıyor ve bunun yine de verimsiz olduğunu düşünüyorum. Çekirdeğiniz için geleneksel isim vmlinuz. Neyse, yapmanın doğru yolu bir önyükleme yöneticisi ile değil bir yükleyici ile . Çekirdeğinizi bulan ve önyükleme yapmak için rEFInd'in yaptığı gibi adını EFI'ya ileten bir EFI uygulaması kullanın.
mikeserv

Debian'ı kullanıyorum ve çekirdeğin adı mesela vmlinuz-4.2.0-1-amd64olduğu gibi bırakıyorum ve sonra bunu efibootmgrboot listesine eklemek ve onu varsayılan yapmak için kullanıyorum. Çekirdeği adlandırmanın BOOTX64.efibir çözüm olabileceğini görüyorum . Ancak, herhangi bir şekilde, bunu yapmak için bir senaryoya ihtiyacım olacaktı ve ayrıca hepsi aynı şekilde adlandırılmışsa, birden fazla çekirdeğin kolayca tutulmasına izin vermiyor.
Marco

@Marco - tamamen ayrı bir komut dosyasına ihtiyacınız yok - paket yöneticiniz - apt, muhtemelen - initramfs'i oluşturmak için bir çekirdek yüklendiğinde yine de bir komut dosyası çalıştırıyor olacak. Muhtemelen çekirdeğinizin ismini öğrenmek için orada yüzlerce şey yapıyordur, fakat sadece bir ekstra satır ne istersen ismini değiştirecektir. ve bir önyükleme ağacı tutarsanız, istediğiniz kadar çekirdeği kolayca tutabilirsiniz . rEFInd, varsayılan önyükleme görüntüsünü arama yollarında en son değiştirilen çekirdek görüntüsü haline getirerek işler.
mikeserv

Paket yöneticisi tarafından yüklenen stok komut dosyalarını değiştirmek kötü bir fikirdir. Değişikliklerinizi silecek şekilde güncellenebilirler ve - bu özel durumda - engellenemez bir sisteme neden olabilirler. Bir çekirdek / initramfs kurulumundan sonra çağrılan ve bunun gibi bir amaç için kullanılması amaçlanan kullanıcı komut dosyaları için dizinler vardır. BTW: Yorumlarınızdaki komut dosyalarını düzenlemeyi öneriyorsunuz. Bununla birlikte, cevabınızda “bu senaryolara veya herhangi bir ek çalışmaya ihtiyacınız yok” ifadesini belirtirsiniz (ki bu en azından Debian için).
Marco,

0

UEFI ve GRUB'u geçici bir uygulama çözümü olarak zincirlediler.

UEFI desteği ve beraberindeki sorunlar (örneğin Güvenli Önyükleme) çözüldükçe, daha fazla dağıtım doğrudan kullanacaktır. Bu arada, bu hala çok yeni: Google Trends, oldukça sınırlı bir kullanım olduğunu gösteriyor: http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20bios ve CMPT = q

Diğerleri, saf bir UEFI çözümü için gitmenin ve / veya hem UEFI olmayan hem de saf UEFI sistemlerini aynı anda desteklemenin olası tehlikelerinden bahsetti. Bir UEFI çekirdeği UEFY olmayan bir sistemde çalışabilir, ancak çekirdek güncelleme araçlarının bir GRUB menüsünü veya bir UEFI önyükleme menüsünü VEYA her ikisini de vb. Güncellemesi gerekir.

Gerçekten bahsedildiği gibi kalite kontrolü ile ilgilidir: bu kodla ilgili sorunların büyük bir etkisi vardır: Bilgisayar yeni kullanıcıları önyüklemediğinde, yani potansiyel Linux dönüştürürken, onu çöpe atıp "güvenli" bir şeye geri dönecektir.

Ancak, teknolojinin daha fazla benimsemesiyle birlikte dediğim gibi, standart olacak.


Umarım - ama bu çoğunlukla UEFI'nin kilitlenme modları ve Microsoft'un
linux'un

0

Ürün yazılımı hatalarını gidermek için ekstra kod gerekir

Grub zincirleme olmadığında, dağıtım doğru bir şekilde önyükleme yapmak için bellenime daha fazla dayanır. Herhangi bir yazılımın sorunları olacağı için ürün yazılımı da buna açıktır. Artık Linux dağıtımları da bu ürün yazılımı hatalarını gidermek için yazmak zorunda kalacak.

Örnek olarak gerçek bir hayat olgusu. Asrock H81 pro BTC P1.80 anakartı ile önyükleme menüsü girişleri oluşturulmasını sağlıyor efibootmgr. Birden fazla önyükleme menüsü girişi oluşturulmuş olabilir ve önyükleme sırası kullanılarak değiştirilebilir efibootmgr --bootorder XXXX,YYYY,ZZZZveya geçici bir sonraki önyükleme seçeneği kullanılarak ayarlanabilir efibootmgr --bootnext XXXX. Her ikisi de bu komut geri dönüşü çıktısı, örneğin önyükleme sırasının değiştiği veya bir sonraki önyüklemenin çalışacağı fikrini verir BootNext: XXXX. Ancak yeniden başlatma sırasında inatçı bellenim yeni istenen önyükleme seçeneğini yoksayar ve önceki BootCurrent:değere yeniden başlar . Kalıcı bir önyükleme sırası değişikliği yalnızca üretici yazılımı kurulum yardımcı programından yapılabilir. Ve kalıcı olmayan bir değişiklik hiç mevcut değildir.


-2

Önyükleme yalnızca EFI tarafından gerçekleştirilirse ve önyükleyiciyi kaldırırsak, bunun hem HW satıcısı hem de İşletim Sistemi üreticileri için zor olacağını düşünüyorum. HW satıcısı, işletim sistemi yapan şirketler için çekirdeğinin farklı FW tarafından yüklenip yüklenmediği gibi olacaktır.

Üstelik EFI’den çekirdeğin doğrudan önyüklenmesiyle istifin neresinde güvenli bir çizme olacak? Mevcut senaryoda, kontrol OS önyükleyicisine gittiğinde, daha sonra önyükleyici çekirdeğin doğru imzalanıp imzalanmadığını kontrol eder. Çekirdeği doğrudan EFI'den yüklersek, o zaman sadece yığının tamamı rahatsız edileceği için karışıklık yaratacağını düşünüyorum. Ne anlama geldiğime dair bir görüş.


bu aptalca. bootloader'ın anahtarı kontrol etmesinin sebebi UEFI'nın bulunmamasıdır. Zincir yükleme, önyüklenmiş imzalanmış bir çekirdeği güvenli hale getirmek için gereksizdir, sadece bellekte anahtarı kontrol edin - çalışması gerektiği gibi .
mikeserv
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.