Untuk apa partisi / boot itu sebenarnya?

40

Saya membaca teks yang relatif lama tentang partisi Linux dan sistem file ( LPIC 1 Certification Bible ). Ia mengatakan:

Beberapa versi bootloader Linux tidak dapat mengakses kernel yang berada di luar 1024 silinder pertama pada disk. Dengan meletakkan partisi / boot di awal drive Anda dapat dipastikan tidak memiliki masalah saat mengakses kernel saat boot. Masalah ini menunjukkan dirinya paling sering dalam kasus dual boot Linux bersama dengan sistem operasi lain yang ada di partisi pertama.

Mengapa boot loader tidak memiliki " akses ke kernel di luar 1024 silinder pertama pada disk "?

Juga, apa artinya " menempatkan partisi / boot di awal drive "?

SRYZDN
sumber
Ini tidak lagi benar, jadi Anda ingin alasan historis?
muru
ya, tapi mengapa kita masih memiliki direktori / boot di partisi linux?
SRYZDN
6
"Tidak lagi benar" mungkin terjadi jika membaca klaim dengan sangat harfiah, tetapi ada banyak tata letak disk modern yang tidak dapat dibaca oleh kebanyakan bootloader. ZFS tidak dapat dibaca oleh banyak hal; btrfs-on-LVM, sama. Letakkan kernel dan initrd Anda pada RAID1 ext3 / ext4 sederhana dan sejumlah sakit kepala dihindari.
Charles Duffy
API awalnya disediakan untuk boot loader oleh BIOS untuk mendapatkan kernel Linux dari harddisk hanya memiliki ruang untuk 1023 sektor, yaitu awal drive. The /bootpartisi secara eksplisit diberlakukan berada di daerah itu untuk memastikan bahwa kernel akan loadable.
Thorbjørn Ravn Andersen

Jawaban:

34

Ini adalah batasan yang diberlakukan karena memiliki BIOS dan bootloader yang sangat lama daripada Linux itu sendiri. BIOS hanya dapat mengakses 1024 silinder pertama dari disk (lihat di sini untuk informasi lebih lanjut tentang apa itu silinder / kepala / sektor). Batasan ini akan meluas ke bootloader yang, karena sifatnya yang sederhana, tidak akan memiliki driver disk sendiri dan akan menggunakan layanan BIOS untuk mengakses disk.

Ini berarti bahwa bootloader dan kernel (karena itu adalah tugas bootloader untuk memuatnya) harus berada dalam 1024 silinder pertama pada sistem dengan batasan ini. Cara sederhana untuk melakukan ini adalah membuat /bootpartisi terpisah yang berisi kernel dan meletakkannya di awal drive (biasanya hanya dengan menjadikannya partisi pertama). Ini berarti bahwa secara fisik akan berada dalam 1024 silinder pertama, asalkan tentu saja partisi itu tidak terlalu besar.

Batasan ini tidak lagi menjadi masalah karena hanya berlaku untuk BIOS lama. Selain itu, banyak bootloader modern (mis. GRUB) memiliki driver disk sendiri sehingga tidak perlu bergantung pada layanan BIOS. Bootloader modern dapat digunakan /bootuntuk tujuan lain, tetapi tidak lagi diperlukan untuk berada di partisi terpisah dan dalam 1024 silinder pertama (walaupun ada banyak kasus di mana perlu ada /bootdi partisi terpisah).

Graeme
sumber
5
Ini benar, tetapi seperti yang ditulis saat ini menyiratkan bahwa sistem modern dapat melakukan tanpa terpisah /boot. Itu sangat sering tidak benar - terutama karena LVM dan sistem file modern yang mewah dengan fungsionalitas block-layer yang dibangun di root.
Charles Duffy
3
@ Charles, jangan berpikir begitu, saya berhati-hati untuk menuliskan " dan " huruf miring saya untuk alasan yang tepat ini.
Graeme
@CharlesDuffy - sistem modern - bahkan yang memiliki lapisan mewah - dapat dengan mudah melakukannya tanpa /bootdalam pengertian konvensional. /bootsecara tradisional didedikasikan untuk bootloader - tetapi sebagian besar komputer yang diproduksi dalam beberapa tahun terakhir datang dengan bootloader yang dibangun untuk firmware - meskipun, untuk alasan apa pun, praktik umum masih menginstal bootloader anakronik seperti grubdan teman-teman ke dan memotong fungsinya dalam mendukung komplikasi, kurasa. Bootloader firmware memang membutuhkan partisi khusus - tetapi biasanya tidak ada hubungannya /boot.
mikeserv
1
@ mikeserv, eh? Apakah Anda merujuk ke EFI? EFI secara eksplisit mendukung FAT12, FAT16 dan FAT32; jika mencoba memuat kernel dari sesuatu seperti ZFS, masih diperlukan sistem file yang lebih sederhana untuk menariknya. Ada atau tidak ada hubungannya dengan itu /bootadalah murni konfigurasi khusus.
Charles Duffy
1
Sebenarnya itu tidak benar bahwa ini tidak lagi menjadi masalah. Saya kadang-kadang menemukan mesin yang cukup baru (seperti 5 tahun) dengan masalah ini. Memang, BIOS adalah potongan firmware bodoh di sana, tetapi masih ada.
Ruslan
23

Sejarah

/bootberisi file yang tidak digunakan oleh sistem operasi, tetapi oleh bootloader -nya . Anda akan menemukan kedua file dari bootloader itu sendiri (seperti /boot/grub/*untuk Grub) dan kernel Linux ( /boot/vmlinuz*) dan seringkali initrd atau initramfs yang terkait .

Pada PC dengan BIOS lama (berbeda dengan UEFI yang lebih baru yang ditemukan pada kebanyakan komputer terkini), perangkat lunak dalam ROM memuat 512 byte pertama disk boot ke dalam memori ( sektor boot ). Dengan hanya 512 byte (tidak semuanya bahkan berisi kode: beberapa darinya berisi data seperti tabel partisi), kode tidak dapat berbuat banyak - tidak mungkin ada pengandar disk nyata di sana. Semua yang dapat dilakukan dalam ruang terbatas tersebut adalah dengan menggunakan antarmuka BIOS untuk memuat lebih banyak kode. Antarmuka ini menyediakan perintah untuk memuat sektor ke-N pada disk - dan ukuran N terbatas, sehingga hanya awal disk yang dapat dijangkau dengan cara itu.

Antarmuka BIOS telah berevolusi sedikit dalam tiga dekade atau lebih sehingga sudah ada, tetapi batasan ukurannya telah berjuang untuk mengikuti ukuran disk, menyebabkan BIOS dan bootloader yang lebih tua bekerja pada 32MB, 512MB, 2GB, 8GB (dan mungkin ambang batas lain yang saya tidak ingat). Bootloader harus dapat menggunakan antarmuka BIOS untuk memuat semua bagian yang diperlukan untuk mengakses disk drive secara langsung. Bootloader umumnya tidak mengandung driver untuk semua pengontrol disk, jadi semuanya untuk memuat kernel Linux (dan initrd / initramfs) harus menggunakan antarmuka BIOS dan dengan demikian harus sesuai pada awal disk.

Perhatikan bahwa ini adalah batasan BIOS atau bootloader, bukan Linux itu sendiri atau distribusi.

Pisahkan /boothari ini

Pada sistem dengan BIOS baru-baru ini dan bootloader baru-baru ini, atau dengan UEFI, batasan ukuran tidak lagi relevan: ukuran disk sekarang memiliki waktu yang lama untuk mengejar ketinggalan. Namun, ada kasus penggunaan lain yang membuat /bootpartisi terpisah bermanfaat. Itu memungkinkan sistem utama berada pada perangkat RAID yang tidak didukung oleh bootloader, atau pada tipe sistem file yang tidak didukung bootloader. Hal ini memungkinkan sistem utama berada pada perangkat yang dienkripsi, yang dapat didekripsi Linux tetapi tidak pada bootloader.

Jika tidak ada pembatasan dan penggunaan kasus ini berlaku untuk Anda, menjaga /bootsebagai partisi terpisah tidak berguna. Tetapi mereka mempengaruhi cukup banyak orang sehingga sebagian besar distribusi mendukungnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
22

Alasan lain di samping masalah BIOS yang disebutkan adalah bahwa /bootpartisi yang terpisah memungkinkan penggunaan sistem file untuk /volume yang tidak dimengerti boot loader (tanpa dibatasi untuk memblokir pemuatan daftar seperti dengan lilo).

Hauke ​​Laging
sumber
Apakah ini memiliki relevansi khusus ketika mem-boot Linux di dalam mesin virtual?
Tom Russell
1
@ TomRussell Tidak, aspek itu tidak terkait.
Hauke ​​Laging
18

PEMESANAN ADALAH KERAS

Booting ... yah ... itu benar-benar bagian tersulit. Setiap kali komputer melakukan booting, komputer itu pada dasarnya akan bertemu dengan dirinya sendiri. Ia mengenal dirinya sendiri dengan berbagai bagiannya, dan untuk setiap bagian itu memenuhi kemampuannya. Tapi itu harus menarik dirinya dengan bootstraps sendiri, sehingga untuk berbicara, dari kotak satu setiap kali.

Saat mendesain proses boot, triknya adalah membawa mesin secara bertahap. Boot Anda harus cepat dan dapat diandalkan, dan itu harus merupakan dua hal di lingkungan yang sama sekali tidak dikenal setiap saat . Saya bahkan tidak akan berani dalam percakapan mode Nyata / Terlindungi (yang tidak berarti bahwa saya bahkan bisa) , tetapi ada banyak hal yang terjadi saat boot. Ketika komputer mengasimilasi berbagai komponennya setiap kali ia melakukannya dalam langkah-langkah bertahap. Mungkin yang paling penting dari ini adalah perpindahan dari mengeksekusi kode on-board ke mengeksekusi kode on-disk, atau, dengan kata lain - kernel exec. Ini terjadi ketika firmware (seolah-olah) menyerah pada sistem operasi.

Bertahun-tahun yang lalu, ini bukan masalahnya. Dulu BIOS benar-benar Basic In / Out - program reguler akan membuat panggilan ke firmware untuk hal-hal seperti menggambar layar dan mengakses disk. Ini disebut interupsi - topi lama mungkin mengingatnya paling baik untuk kesenangan yang sering mereka temukan dalam menetapkan IRQ untuk dot-matrix atau USR baru.

INT13H

Ini adalah rangkaian fungsi 13H interupsi ( atau INTdalam bahasa perakitan ) yang ditawarkan BIOS sebagai layanan untuk akses disk. Ini bahkan masih digunakan hari ini untuk sistem BIOS dalam proses boot untuk melakukan lompatan dari firmware ke disk.

Sistem BIOS akan memeriksa beberapa byte pertama dari setiap disk yang ditemukan dan mencari pola yang dikenali sebagai Master Boot Record ( atauMBR ) . Ini adalah standar de-facto yang sudah berusia puluhan tahun dan menyertakan sedikit biner yang dapat dieksekusi yang ditulis ke kepala disk. MBR menandai disk BIOS sebagai bootable. Ini akan berhenti memeriksa ketika menemukan satu, dan praktis satu yang Anda dapatkan tanpa tipuan pintar. Ketika menemukan satu itu memetakannya ke memori dan menjalankannya (dalam mode Real, tapi aku masih tidak pergi ke sana) .

MBR yang dieksekusi hampir pasti bukan kernel sistem Anda - 512 byte (memberi atau menerima) akan sangat tidak berguna di departemen itu. Ini mungkin bootloader - program yang dirancang khusus untuk mengatasi salah satu dari banyak batasan pengalamatan BIOS - khususnya yang tidak memahami sistem file apa pun.

Ketika bootloader membaca di kernel yang sebenarnya dan mengeksekusi itu dalam memori (seperti yang kita semua berdoa itu akan setiap kali) , mungkin akan melakukannya dengan meminta BIOS melalui INT13Hpanggilan interupsi. Dan jika tidak - banyak bootloader yang lebih bagus akan me-mount sistem file dalam arti konvensional dan mengeksekusi kode dengan cara lain - maka sangat kecil kemungkinan bootloader menjadi begitu mewah tanpa satu INT13Hatau dua. Seringkali bootloader harus mem-chainload sendiri - atau berbagai tahap dari dirinya sendiri - karena 512 byte yang dialokasikan pertama kali tidak sesuai dengan kebutuhan mereka.

AYAM DAN TELUR

Semua ini adalah cara bundaran membahas disk, saya tahu, tetapi pada titik ini seharusnya sudah sangat jelas bahwa masalah utama - orang mungkin menyebutnya jenis ayam dan telur - mengakses disk yang berisi instruksi program tentang cara mengakses disk . Kunci untuk masalah ini adalah firmware - dan terus berada dalam cara yang sangat berbeda bahkan pada sistem EFI - dan, terlemah atau tidak, firmware adalah tautan terpenting dalam rantai boot.

Anda tahu, begitu kernel dijalankan, dan semua rutinitasnya yang banyak untuk mengakses dan mengendalikan perangkat keras dimulai, semua masalah ini agak hilang (atau, paling tidak, berubah sedikit) , karena OS modern mengambil kendali penuh dari suatu sistem, tetapi sampai mereka melakukan batas sistem hanya memperpanjang sejauh firmware akan memungkinkan. Ini dikatakan banyak - BIOS tidak banyak berubah sejak 8086. INT13HPanggilannya adalah asli 8086. Ya, sudah ada (banyak sekali) ekstensi, dan retasan tentu saja, tetapi inovasi ...?

LEBIH BAIK DAN LEBIH BAIK LAGI

Sebagian besar perubahan pada BIOS hanyalah perban belaka. Dulu hard disk harus dipetakan secara fisik - berbagai aspek spesifik dan geometrinya dirujuk ketika data disimpan atau diambil darinya. Akhirnya hard disk konvensional tumbuh menjadi ukuran yang melarang ini. Bahkan hanya peta abstrak yang terlalu banyak informasi untuk ditangani oleh BIOS. Karena hanya dapat beroperasi dalam Mode Nyata, BIOS dibatasi hingga 1 MB per register memori. Membengkak peta silinder lebih besar dari itu, atau membuat salah satu propertinya lebih besar dari yang dapat diatasi dalam banyak bit, dan BIOS benar-benar hilang - keluar batas.

Penghalang ini telah bertemu dan rusak berkali- kali. Setiap kali peta diabstraksikan dan disandikan dengan cara yang lebih baru, pintar, dan kurang akurat. Dan akhir-akhir ini sangat tidak mungkin bagi BIOS untuk memetakan drive secara akurat. Mengatasi Blok Logis adalah standar de-facto sekarang, meskipun beberapa terjemahan Cylinder / Kepala / Sektor (atau CHS) masih diperlukan. Apa yang hilang dari firmware mainboard dalam keakuratan / tanggung jawab, ekstensi tersebut telah diabstraksikan dan ditambahkan ke tanggung jawab firmware disk untuk mengisi kesenjangan.

Ini adalah permainan kucing dan tikus yang dirujuk dalam pertanyaan Anda. Ketika BIOS gagal memahami disk di luar titik tertentu karena ukurannya yang tipis, maka data apa pun yang Anda inginkan untuk diambil saat boot - seperti bootloader atau kernel - mungkin lebih baik tidak ditemukan di luar titik itu. Dari sinilah /bootasal.

MUNGKIN LEBIH BAIK SEBENARNYA

Akhir-akhir ini hal-hal seperti itu, untungnya, tidak relevan dengan kematian BIOS. Sudah 30 tahun mendatang, tetapi sebagian besar telah diganti dalam beberapa tahun terakhir dengan standar UEFI (atau EFI 2.0) . UEFI menyediakan mount sejak menit pertama, menginisialisasi dalam Mode Terlindungi, menggabungkan bootloadernya sendiri, menyediakan penyimpanan variabel memori-flash yang persisten, khusus untuk menangani beberapa zetabytes atau apa pun per disk ... dan banyak lagi lain. Ini jauh dari sempurna, tetapi merupakan peningkatan besar dari pendahulunya.

Bahkan argumen untuk bootloader khusus yang melibatkan disk-enkripsi atau sistem file berlapis gagal ketika Anda menganggap bahwa semua ini harus ditangani oleh kernel OS, dan jika Anda diberikan mount pada saat boot, Anda selalu mendapatkan kejelasan- ditembak untuk mengeksekusinya (terutama mengingat bahwa kernel Linux, dalam konfigurasi default, adalah EFI-executable sendiri) .

Jadi, /bootpartisi yang terpisah mungkin tidak terlalu mengkhawatirkan Anda, dan jika Anda menggunakan sistem EFI, berarti Anda mungkin sudah memiliki analog di partisi sistem EFI, karena itu adalah persyaratan untuk mem-boot mode EFI.

mikeserv
sumber
8

Bahwa ada /bootdirektori ditentukan secara historis dan dari sana "diperbaiki" dalam Filesystem Hierarchy Standard . Memiliki standar seperti itu memungkinkan program (dan sysadmin) untuk mengharapkan file tertentu di lokasi tertentu. Dalam hal ini file terkait dengan proses booting.

Memiliki /bootpartisi di awal disk masuk akal untuk BIOS yang lebih lama yang tidak dapat mengindeks blok / sektor dalam jangkauan penuh dari drive yang tersedia. Karena itu, informasi yang harus dimuat harus berada di sektor yang dapat diindeks, karenanya partisi terpisah (dengan angka sektor rendah) /bootyang darinya BIOS dapat memuat data / program tambahan (yang pada gilirannya mampu menangani keseluruhan rentang disk tanpa menggunakan BIOS).

Anthon
sumber
6

Dapat juga sangat tertib untuk memiliki partisi / boot terpisah. Di komputer saya, saya memiliki banyak distro dan cadangan, masing-masing di partisi mereka sendiri, tetapi mereka semua berbagi partisi / boot yang sama, yang merupakan tempat semua kernel untuk semua OS berada. Juga, semua distro menunjuk ke satu-satunya salinan lilo.conf yang juga ada di / boot, jadi saya tidak perlu menebak apa yang terjadi ketika saya menambahkan kernel, menambahkan distro, apa pun. Ini snip dari lilo.conf saya:

image  = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root   = "LABEL=y5--5-Debian1"
label  = y5:D1:16.0-4

image  = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root   = "LABEL=y8--5-Debian2"
label  = y8:D2:16.0-4

image  = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root   = "LABEL=y11-5-Debian3"
label  = y11:D3:16.0-4

image  = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root   = "LABEL=w5--5-Debian1"
label  = w5:D1:16.0-4

... itu hanya cadangan Debian saya di dua disk. Lihat betapa mudahnya melacak kernel? (sekarang, semua cadangan menggunakan kernel yang sama).

Ray Andrews
sumber
5

Meskipun pada sistem modern, sektor file dapat diakses di mana saja pada disk, masih masuk akal untuk membatasi bahan boot ke partisi boot mereka sendiri, hanya dari prinsip "jangan menaruh semua telur dalam satu keranjang".

Misalkan sistem file utama rusak sedemikian rupa sehingga beberapa bootloader tingkat rendah tidak dapat membaca tahap selanjutnya dengan benar. Jika bahan bootloader ada di partisi mereka sendiri, maka kernel dapat muncul dan menangani dengan benar partisi root yang rusak melalui fsck. Itu sendiri bisa di partisi sendiri.

Partisi boot dapat memberi Anda opsi untuk "penyelamatan", seperti memasang partisi root alternatif. Juga, bagaimana jika Anda melakukan multi-boot sistem operasi yang berbeda di partisi yang berbeda? Maka bahan-bahan boot bukan milik salah satu dari sistem itu. Masuk akal untuk memiliki partisi sendiri. Anda dapat mengganti partisi OS dengan OS yang berbeda, namun dapat mem-boot OS yang tersisa.

Juga, bagaimana jika Anda ingin menggunakan sistem file untuk partisi utama Anda yang tidak dimengerti oleh bootloader sama sekali? Atau, katakanlah, untuk mana dukungan sisi boot-loader hanya bersifat eksperimental? Dalam situasi seperti itu, file boot-time masih dapat digunakan jika ada peta sektor (dan boot loader mendukung hal seperti itu: boot loader Linux tua yang baik LILO menggunakan peta sektor, dan karenanya tidak harus memahami sistem file struktur sama sekali). Namun peta sektor secara inheren terkelupas. Jika sistem file direorganisasi, sektor bergerak, dan sektor peta menjadi salah dan harus dibuat ulang, atau sistem tidak dapat reboot.

Terakhir, ada prinsip organisasi bahwa bahkan jika Anda tidak memiliki partisi yang sebenarnya, itu masih merupakan ide bagus bahwa semua barang boot setidaknya di bawah /boot, dan tidak tersebar di tempat lain.

Kaz
sumber
5

Ini bukan batasan distribusi Linux, tetapi itu adalah batasan dari BIOS yang lebih lama. Kembali pada masa itu, untuk memastikan Linux bisa boot, semua file yang terkait dengan boot ditempatkan di partisi mereka sendiri yang menjadikan partisi pertama pada hard drive untuk memastikan boot loader masuk dalam 1024 silinder pertama. Buat partisi yang lebih kecil dari ukuran apa pun yang ditemukan di 1024 silinder (bervariasi dari hard drive ke hard drive). Tetapi jika Anda membuat partisi pertama yang lebih besar dari batas ini, ada kemungkinan file boot loader akan berlokasi di luar 1024 silinder, dan BIOS tidak akan dapat memuatnya.

Anda juga dapat mencapai efek yang sama dengan membuat dua partisi kecil, yang keduanya berada di dalam 1024 silinder pertama, dan meletakkan semua file boot loader pada yang kedua.

Michael Martinez
sumber
4

Alasan lain untuk bootpartition hari ini adalah:

  • booting dari NFS atau NBD
  • partisi root terenkripsi
  • / boot bersama antara distribusi yang berbeda
allo
sumber