Bagaimana saya bisa tahu dari partisi mana saya boot?

12

Saya memiliki mesin yang memiliki partisi multi-boot. Saya memiliki Ubuntu 14,04 pada satu partisi, Ubuntu 15,04 pada partisi kedua dan Ubuntu 16,04 pada partisi ketiga. Apakah ada cara untuk mengetahui, dari baris perintah, dari partisi mana saya boot, untuk menemukan Anda di partisi /boot/grub/grub.cfgmana yang digunakan untuk proses boot? Saya memiliki /boot/grub/grub.cfg pada masing-masing tiga partisi.

Kevin Wilson
sumber
3
Anda tidak dapat melakukannya dengan generalitas dan keandalan absolut. Untuk apa yang Anda ketahui, /boot/grub/grub.cfgfile yang digunakan untuk boot bisa dihapus, partisi itu bisa dihapus dari tabel partisi, dan disk itu dihapus secara fisik dari sistem.
Federico Poloni

Jawaban:

10

Setelah GRUB melepaskan boot ke kernel, kernel tidak tahu apa yang memulainya, dan /bootmungkin bukan yang digunakan GRUB. Anda dapat memeriksa waktu akses boot/grub/grub.cfgdi setiap partisi untuk melihat yang mana yang terakhir diakses. Itu bisa memberi tahu Anda file konfigurasi partisi mana yang digunakan GRUB.

stat -c %x /boot/grub/grub.cfg

Jika waktu akses tidak diperbarui, Anda harus mencari perbedaan dalam parameter kernel yang digunakan oleh berbagai file konfigurasi GRUB. Jika Anda dapat mengubahnya, misalnya, tambahkan foo=1,, foo=2dll. GRUB_CMDLINE_LINUXDi masing-masing, jalankan sudo update-grub2dan reboot, maka Anda dapat memeriksa /proc/cmdlineuntuk melihat nilai-nilai mana yang digunakan.

muru
sumber
menarik! apakah itu berarti solusi saya juga memiliki tingkat akurasi yang lebih baik daripada Ravexina dan Katu?
tatsu
@tatsu IMO semua jawaban lainnya salah - Ravexina menemukan partisi di mana /bootberada, tapi itu mungkin bukan grub yang digunakan, dan Anda dan Katu menemukan partisi yang dipasang di /mount, tetapi, seperti yang dicatat Ravexina, yang mungkin memiliki bahkan kurang dari koneksi
muru
1
ya tetapi bagaimana cara melonggarkan kemungkinan melakukan apa saja selain gagal pada partisi tempat Anda dipasang: disk memberikan informasi seperti perangkat alamat yang dipasang, setiap info id yang mungkin Anda perlukan tentang yang mana Anda baru saja mencoba melonggarkannya. Saya yang pertama mengakui solusi saya jelek tetapi memang memiliki tingkat keberhasilan 100% kan?
tatsu
1
Tingkat kesuksesan @tatsu untuk apa? Menemukan partisi terpasang /, tentu saja. Menemukan konfigurasi GRUB partisi mana yang digunakan saat boot? Saya tidak mengerti bagaimana hubungannya.
muru
4
Apakah grub benar-benar mengatur timestamp akses itu, mengingat itu adalah DOS-nya sendiri dan tidak terikat oleh konvensi driver filesystem linux?
rackandboneman
4

Seperti yang Anda tahu file yang Anda cari terletak di /bootdirektori sistem yang Anda jalankan. apakah /bootitu partisi yang terpisah atau tidak; Jika /bootpartisi Anda terpisah, Anda harus mencarinya:

$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot

Berarti grub.cfgyang telah digunakan terletak di sda2.

Maka Anda harus mencari root:

$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /

kali ini terletak di sda1.

Atau bahkan untuk bersenang - senang kita dapat memeriksa parameter waktu boot:

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet

lalu gunakan UUIDuntuk mencari tahu partisi mana yang merupakan root Anda.

$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"

Berarti dari sda1.

Anda juga dapat memeriksa parameter boot ini untuk melihat di mana grub.cfgfile Anda berisi mereka, ini hanya berfungsi ketika parameter boot Anda grub.cfgberbeda satu sama lain.

Ravexina
sumber
2
Cara yang lebih mudah (yang tidak memerlukan hak pengguna super) untuk menemukan simpul perangkat di belakang sistem file UUID readlink -f /dev/disk/by-uuid/<UUID>.
David Foerster
3

Untuk menampilkan perangkat yang memegang sistem file root yang terpasang:

awk '$2=="/"{print $1}' /proc/mounts

Untuk menampilkan versi rilis Ubuntu yang sedang berjalan:

lsb_release -rs
David Foerster
sumber
yang sebenarnya membuat banyak rasa dalam hal pertanyaan dan sepertinya jawaban yang paling pas. Saya yakin tidak ada dua distro pada pengaturannya memiliki nomor versi yang sama dia hanya akan menggunakan lsb_release -rssetiap kali. KISS
tatsu
Sayangnya ini tidak berhasil. Saya menguji perintah Anda pada mesin saya dengan banyak OS, hanya saja "master`-OS saya sudah menginstal grub di MBR, OS lain sudah menginstal Grub di PBR, perintah itu sepertinya menunjukkan lokasi di mana OS telah menginstal Grub, tetapi tidak tampilkan dari mana OS Grub memuat file konfigurasi
mook765
@ mook765: Jawaban saya sama sekali tidak ada hubungannya dengan Grub atau MBR (atau jenis boot loader atau tipe tabel partisi). Saya tidak yakin apa yang sebenarnya Anda coba dan apa yang Anda harapkan.
David Foerster
Maka jawaban ini tidak ada hubungannya dengan pertanyaan ...
mook765
@ mook765: Jika Anda menerimanya secara harfiah, maka ya. Namun bagi saya tampaknya OP ingin tahu yang mana dari beberapa instalasi Ubuntu-nya yang saat ini di-boot dan untuk itu jawaban saya seharusnya baik-baik saja.
David Foerster
2

Kita bisa menambahkan entri menu kustom sederhana di setiap OS dan kita akan melihat di menu-Grub dari mana OS Grub memuat file konfigurasi-nya.

Contoh:

Kami boot ke 16.04 dan mengedit file /etc/grub.d/40_customuntuk menambahkan menu-entri.

#! / bin / sh
exec tail -n +3 $ 0
# File ini menyediakan cara mudah untuk menambahkan entri menu kustom. Cukup ketik
# entri menu yang ingin Anda tambahkan setelah komentar ini. Berhati-hatilah untuk tidak berubah
# baris 'exec tail' di atas.
#

menuentry 'grub.conf diambil dari 16.04' {        
            reboot  
    }

Kami memastikan file dapat dieksekusi dan dijalankan sudo update-grub.

Kemudian kita melakukan perubahan yang sama di OS lain, kita hanya menggunakan nama yang berbeda untuk menuentry, ig kita ubah 16.04ke 15.04dan seterusnya.

Jika kita memilih menu-entri ini di menu-Grub saat boot, mesin hanya akan reboot, kita membuatnya untuk tidak mem-boot OS apa pun tetapi untuk melihat OS mana yang sebenarnya digunakan untuk memuat grub.conf.

Informasi tambahan

Jenis kebingungan ini muncul, ketika kita menginstal beberapa OS yang semuanya menggunakan Grub dan selama instalasi OS kita memilih lokasi boot-loader yang sama. Kita memang membutuhkan hanya satu OS yang menginstal Grub, Grub dapat mem-boot ke distribusi Linux apa pun, jadi jika kita memiliki satu distribusi yang diinstal (termasuk Grub), kita dapat menginstal OS tambahan tanpa menginstal Grub.

Dalam legacy-installs, cukup mudah untuk menangani lokasi untuk instalasi boot-loader, karena kita dapat memilih partisi-boot-record sebagai lokasi, tetapi kita harus berhati-hati untuk memilih partisi yang benar. Jadi satu OS menginstal boot-loader ke MBR dan tambahan OS menginstal boot-loader ke PBR dari partisi-OS. Kemungkinan ini hanya kita miliki ketika kita menggunakan Something elseopsi-saat instalasi.

Di UEFI-installnya sedikit lebih aneh, boot-loader akan diinstal ke folder di Partisi Sistem EFI (ESP) dan beberapa boot-loader dapat dengan mudah hidup berdampingan. Masalahnya di sini adalah bahwa semua rasa Ubuntu dan juga beberapa distribusi linux lainnya akan menginstal Grub ke folder yang sama di ESP dan kami tidak punya pilihan. Jadi menginstal distribusi Linux tambahan akan menimpa boot-loader kami yang sudah ada. Satu-satunya cara yang saya tahu untuk menghindari ini adalah untuk boot ke sesi hidup dan mulai installer dengan sudo ubiquity -b.

Solusi sederhana lain

Mari kita asumsikan bahwa kita memiliki tiga distribusi Linux yang diinstal pada partisi sda1, sda2dan sda3. Sekarang kita lihat entri menu boot Grub. Saat boot, kita akan melihat sesuatu seperti ini:

1 Ubuntu
2 Opsi lanjutan untuk Ubuntu
3 Tes memori (memtest86 +)
4 Tes memori (memtest86 +, konsol serial 115200)
5 Ubuntu (on / dev / sda2)
6 Opsi lanjutan untuk Ubuntu (on / dev / sda2)
7 Ubuntu 17.04 (on / dev / sda3)
8 Opsi lanjutan untuk Ubuntu (on / dev / sda3)

Dua entri pertama adalah entri untuk OS yang menghasilkan grub.conf-file yang sebenarnya kita gunakan. Entri # 3 dan # 4 tidak menarik saat ini. Entri # 5, # 6, # 7 dan # 8 adalah entri yang dibuat dengan OS-prober dan kita melihat di partisi mana OS untuk entri ini berada. Jadi dalam kasus contoh kecil ini kita dapat menyimpulkan bahwa grub.config-file yang sebenarnya kita gunakan bukan milik OS sda2atau sda3OS sda1. Dalam hal satu atau lebih OS diinstal dengan /bootpartisi- terpisah kita harus memeriksa- /bootpartisi mana yang termasuk OS mana, tetapi itu mudah dilakukan dengan menjalankan findmntperintah-di setiap OS.

mook765
sumber
+1 Meskipun panjang, jawaban ini sebenarnya termasuk poin yang relevan. Untuk sistem BIOS, pengguna yang melakukan multi-boot lebih suka "Sesuatu yang lain" di installer untuk memiliki kontrol lebih; Tidak perlu memaksa "untuk tidak menginstal boot loader GRUB" (lihat jawaban saya yang lebih lama ). Untuk sistem UEFI, pengaturan multi-boot tampaknya tidak dapat dijelaskan atau tidak teruji.
clearkimura
1
lsblk

Dan periksa apa disk sudah terpasang /. Silakan baca komentar di bawah atau jawaban Ravexina jika Anda memiliki /bootpoin yang dipasang di Anda.

Jika Anda tidak yakin, periksa UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
Katu
sumber
2
Itu tidak benar, bagaimana jika saya /bootadalah partisi yang terpisah? maka /boot/grub/grub.cfgtidak terletak di /partisi.
Ravexina
@Ravexina Dapatkan teknis, itu mungkin benar. Namun, untuk keperluan pengguna ini, bukankah /partisi itu dihitung?
@MarkYisri Saya kira saya harus mengatakan itu tidak selalu benar, namun OP mengatakan kepada kami bahwa ia mendapatkan file pada tiga partisi yang berbeda jadi saya kira lebih baik untuk memeriksa terpisah /bootdulu.
Ravexina
1
Terima kasih telah menunjukkan bahwa @Ravexina saya telah memperbarui jawabannya.
Katu
0

Untuk mengetahui dari partisi mana yang telah di-boot pengguna, lihat menu boot loader sebelum mem-boot sistem yang diinstal. Sulit untuk mengatakannya tanpa melihat menu boot loader.

Tempat untuk melihat

Dalam tangkapan layar gabungan berikut, saya telah memberi label tiga petunjuk yang mungkin diketahui dari partisi mana yang telah di-boot pengguna.

Menu multi-boot menggunakan versi GNU GRUB PC / BIOS dengan anotasi

Label (1): Entri menu GNU GRUB di bawah entri pertama

Label (2): Versi GNU GRUB di atas menu boot loader

Label (3): Gambar latar belakang GNU GRUB (diperlukan pengaturan manual)

Petunjuk yang paling jelas adalah label (3), yaitu mengubah gambar latar belakang GNU GRUB pada sistem yang memiliki kontrol menu boot loader. Ini adalah yang termudah untuk diceritakan, asalkan pengguna mengaturnya sebelumnya.

Label (1) dijelaskan

Cari partisi yang tidak tercantum dalam entri menu di bawah entri pertama. Dalam tangkapan layar, hanya ada dua sistem operasi yang diinstal yaitu "Ubuntu" dan "Ubuntu 14.04.5 LTS".

Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)
Advanced options for Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)

Yang terakhir telah disebutkan (on /dev/sda3), yang berarti yang pertama mungkin berlokasi di /dev/sda2atau /dev/sda1. Yang pasti, setelah mem-boot sistem yaitu "Ubuntu", jalankan perintah yang relevan untuk mendaftar partisi yang tersedia ( lsblktampaknya paling mudah).

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    13G  0 disk 
├─sda1   8:1    0   976M  0 part [SWAP]
├─sda2   8:2    0     6G  0 part /
└─sda3   8:3    0     6G  0 part 
sr0     11:0    1  55.7M  0 rom 

Hanya setelah membandingkan dengan output dari lsblk, maka kita tahu bahwa sistem yaitu "Ubuntu" ditemukan di /dev/sda2(yang tidak tercantum dalam entri menu) dari mana menu boot loader dikelola.

Label (2) dijelaskan

Cari versi GRUB yang dicetak di atas menu boot loader. Perhatikan versi itu dan bandingkan dengan versi GRUB yang ditemukan pada sistem yang di-boot yaitu "Ubuntu".

Di tangkapan layar (bagian bawah): GNU GRUB version 2.02~beta2-9

Setelah mem-boot sistem yaitu "Ubuntu", jalankan perintah yang relevan untuk memeriksa versi paket GRUB ( grub-install --versionrelevan dan paling mudah).

$ grub-install --version
grub-install (GRUB) 2.02~beta2-9

Bagaimana ini relevan? Karena grub-installdan update-grubperintah keduanya disediakan oleh paket yang sama grub2-common. Mengingat bahwa menu boot loader dibuat dan diperbarui menggunakan alat dari paket yang sama, versi cetak di atas menu boot loader akan sama.

Label (3) dijelaskan

Petunjuk ini perlu diatur secara manual, karena gambar latar belakang default menu boot loader tidak ada (hanya hitam polos). Gambar latar belakang harus kedalaman 8-bit.

Jika desktop-basepaket diinstal pada sistem Anda, gambar latar belakang yang dibuat khusus untuk GRUB mudah ditemukan dengan akhiran nama file *grub.pngdi direktori target.

$ ls /usr/share/images/desktop-base/*grub.png
/usr/share/images/desktop-base/desktop-grub.png
/usr/share/images/desktop-base/joy-grub.png
/usr/share/images/desktop-base/moreblue-orbit-grub.png
/usr/share/images/desktop-base/spacefun-grub.png

Untuk mengatur gambar latar belakang:

  1. Buka /etc/default/grubfile sebagai superuser, lalu tambahkan baris GRUB_BACKGROUND=dengan path lengkap ke gambar pilihan dan kutip.

    $ sudo nano /etc/default/grub 
    ...
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    
    # Show background in GRUB boot menu
    GRUB_BACKGROUND="/usr/share/images/desktop-base/spacefun-grub.png"
    ...
    
  2. Kemudian, jalankan sudo update-grubuntuk memperbarui /boot/grub/grub.cfgyang mencakup menu boot loader. Pengguna akan melihat output serupa dengan yang berikut ini.

    $ sudo update-grub
    Generating grub configuration file ...
    Found background: /usr/share/images/desktop-base/spacefun-grub.png
    Found background image: /usr/share/images/desktop-base/spacefun-grub.png
    Found linux image: /boot/vmlinuz-3.13.0-24-generic
    Found initrd image: /boot/initrd.img-3.13.0-24-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 14.04.5 LTS (14.04) on /dev/sda3
    done
    
  3. Nyalakan ulang mesin dan lihat apakah menu bootloader memiliki perubahan yang terlihat yang dibuat oleh perintah pembaruan dari sistem.

Selain itu, ulangi langkah untuk sistem lain, satu per satu. Langkah-langkah yang diulang tidak perlu, jika pengguna mengetahui sistem mana yang memiliki kendali atas menu bootloader (sekali lagi, ini tergantung pada bagaimana instalasi dibuat).

Penolakan

Jawaban ini menjelaskan kriteria yang terbukti dan teruji dengan baik untuk sistem BIOS dengan pengaturan multi-boot menggunakan GNU GRUB PC / versi BIOS. Pengecualian berikut akan berlaku.

  • Untuk mitra sistem UEFI yang menggunakan versi GNU GRUB EFI, tidak dijamin atau tidak diketahui apakah kriteria akan tampak sama seperti yang dijelaskan di atas.

  • Penekanan diberikan pada tampilan menu pemuat boot (bagaimana tampilannya mungkin berbeda yaitu setengah tangkapan layar atas) daripada untuk menunjukkan cara kerja pemuatan rantai. Karenanya, mengenai "cara multi boot diatur seperti yang terlihat pada tangkapan layar" tidak akan dijelaskan dalam jawaban ini.

  • Jika pengaturan multi-boot pernah dibuat dari salinan yang sama persis dengan sistem operasi yang sama yaitu Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04, dll., Maka satu-satunya cara yang dapat diandalkan untuk mengetahui dari partisi mana pengguna telah boot adalah label (3).

  • Label (3) mungkin berfungsi lebih baik menggunakan gambar latar belakang khusus yang secara eksplisit menulis dari mana ia di-boot yaitu "Menu boot ini dikelola dari / dev / sda1". Demikian pula, mengenai "cara membuat gambar latar belakang khusus untuk GRUB" tidak akan dijelaskan dalam jawaban ini.

TL; DR Lihat menu boot loader sebelum mem-boot sistem yang diinstal. Cara termudah dan paling dapat diandalkan untuk mengetahui adalah label (3), yaitu mengatur gambar latar GRUB secara manual.

clearkimura
sumber