Làm thế nào tôi có thể biết từ phân vùng mà tôi đã khởi động?


12

Tôi có một máy có phân vùng đa khởi động. Tôi có Ubuntu 14.04 trên một phân vùng, Ubuntu 15.04 trên thứ hai và Ubuntu 16.04 trên phân vùng thứ ba. Có cách nào để biết, từ dòng lệnh, từ phân vùng nào tôi đã khởi động, để tìm cho bạn phân vùng /boot/grub/grub.cfgnào được sử dụng cho quá trình khởi động không? Tôi có /boot/grub/grub.cfg trên mỗi ba phân vùng.


3
Bạn không thể làm điều đó với độ tin cậy và độ tin cậy tuyệt đối. Đối với những gì bạn biết, /boot/grub/grub.cfgtệp được sử dụng để khởi động có thể đã bị xóa, phân vùng đó có thể đã bị xóa khỏi bảng phân vùng và đĩa đó đã bị xóa khỏi hệ thống.
Federico Poloni

Câu trả lời:


10

Khi GRUB đã khởi động khởi động vào kernel, kernel không biết cái gì đã khởi động nó và /bootcó thể không phải là cái mà GRUB đã sử dụng. Bạn có thể kiểm tra thời gian truy cập của boot/grub/grub.cfgtừng phân vùng để xem cái nào được truy cập gần đây nhất. Điều đó có thể cho bạn biết tập tin cấu hình của phân vùng GRUB được sử dụng.

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

Nếu thời gian truy cập không được cập nhật, bạn sẽ phải tìm kiếm bất kỳ sự khác biệt nào trong các tham số kernel được sử dụng bởi các tệp cấu hình GRUB khác nhau. Nếu bạn có thể thay đổi chúng, ví dụ, thêm foo=1, foo=2v.v. GRUB_CMDLINE_LINUXvào mỗi trong số này, hãy chạy sudo update-grub2và khởi động lại, sau đó bạn có thể kiểm tra /proc/cmdlinexem giá trị nào trong số các giá trị này đã được sử dụng.


hấp dẫn! điều đó có nghĩa là giải pháp của tôi cũng có tỷ lệ chính xác tốt hơn Ravexina và Katu?
tatsu

@tatsu IMO tất cả các câu trả lời khác đều không chính xác - Ravexina đang định vị phân vùng /bootnằm ở đâu, nhưng đó có thể không phải là thứ mà grub đã sử dụng, và bạn và Katu đang tìm phân vùng được gắn kết /được gắn kết, nhưng, như Ravexina đã lưu ý, có lẽ thậm chí ít kết nối hơn
muru

1
có nhưng làm thế nào có thể ngắt kết nối có thể làm bất cứ điều gì khác ngoài thất bại trên phân vùng bạn đang gắn kết: các đĩa cung cấp thông tin như thiết bị được gắn địa chỉ, bất kỳ thông tin id nào bạn có thể cần để ngắt kết nối. Tôi là người đầu tiên thừa nhận giải pháp của mình là xấu nhưng nó có tỷ lệ thành công 100% phải không?
tatsu

1
@tatsu tỷ lệ thành công để làm gì? Tìm phân vùng gắn trên /, chắc chắn. Tìm cấu hình GRUB của phân vùng nào đã được sử dụng trong khi khởi động? Tôi không thấy nó liên quan như thế nào.
muru

4
Liệu grub có thực sự thiết lập dấu thời gian truy cập đó không, vì nó là DOS của chính nó và không bị ràng buộc bởi các quy ước trình điều khiển hệ thống tập tin linux?
rackandboneman

4

Như bạn biết tập tin bạn đang tìm kiếm nằm trong /bootthư mục của hệ thống đang chạy của bạn. hoặc /bootlà một phân vùng riêng biệt hoặc nó không; Nếu bạn /bootlà một phân vùng riêng, bạn nên tìm:

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

Có nghĩa là những grub.cfggì đã được sử dụng được đặt tại sda2.

Bạn nên tìm kiếm root:

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

lần này nó nằm ở sda1.

Hoặc ngay cả đối với niềm vui chúng ta có thể kiểm tra các thông số thời gian khởi động:

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

sau đó sử dụng UUIDđể tìm ra phân vùng nào là root của bạn.

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

Có nghĩa là từ sda1.

Bạn cũng có thể kiểm tra các tham số khởi động này để xem một trong các grub.cfgtệp của bạn chứa chúng, điều này chỉ hoạt động khi các tham số khởi động của bạn grub.cfgkhác nhau.


2
Một cách dễ dàng hơn (không yêu cầu đặc quyền siêu người dùng) để tìm nút thiết bị đằng sau một hệ thống tệp UUID sẽ là readlink -f /dev/disk/by-uuid/<UUID>.
David Foerster

3

Để hiển thị thiết bị đang giữ hệ thống tập tin gốc hiện được gắn:

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

Để hiển thị phiên bản phát hành Ubuntu hiện đang chạy:

lsb_release -rs

điều đó thực sự làm cho rất nhiều ý nghĩa liên quan đến câu hỏi và có vẻ như là câu trả lời phù hợp nhất. Tôi cá là không có hai bản phân phối nào trong thiết lập của anh ta có cùng số phiên bản anh ta sẽ sử dụng lsb_release -rsmọi lúc. HÔN
tatsu

Thật không may, điều này không làm việc. Tôi đã kiểm tra lệnh của bạn trên máy của tôi với nhiều hệ điều hành, chỉ có "master`-OS của tôi đã được cài đặt trong MBR, các hệ điều hành khác đã cài đặt Grub trong PBR, lệnh dường như hiển thị vị trí nơi hệ điều hành đã cài đặt Grub, nhưng không hiển thị từ đó OS Grub tải tệp cấu hình.
mook765

@ mook765: Câu trả lời của tôi hoàn toàn không liên quan gì đến Grub hoặc MBR (hoặc bất kỳ bộ tải khởi động hoặc loại bảng phân vùng nào thực sự). Tôi không chắc chính xác những gì bạn đã cố gắng và những gì bạn mong đợi để xem.
David Foerster

Sau đó, câu trả lời này không liên quan gì đến câu hỏi ...
mook765

@ mook765: Nếu bạn hiểu theo nghĩa đen thì có. Tuy nhiên, đối với tôi, có vẻ như OP muốn biết một trong số nhiều cài đặt Ubuntu của anh ấy hiện đang được khởi động và câu trả lời của tôi sẽ ổn thôi.
David Foerster

2

Chúng tôi có thể thêm một mục menu tùy chỉnh đơn giản trong mỗi HĐH và chúng tôi sẽ thấy trong menu Grub mà OS Grub tải tệp cấu hình của nó.

Thí dụ:

Chúng tôi khởi động vào 16.04 và chỉnh sửa tệp /etc/grub.d/40_customđể thêm mục nhập menu.

#! / thùng / sh
thực hiện đuôi -n +3 $ 0
# Tập tin này cung cấp một cách dễ dàng để thêm các mục menu tùy chỉnh. Chỉ cần gõ
# mục menu bạn muốn thêm sau bình luận này. Cẩn thận đừng thay đổi
# dòng 'exec tail' ở trên.
#

menu 'grub.conf được tải từ 16.04' {        
            khởi động lại  
    }

Chúng tôi đảm bảo các tập tin được thực thi và chạy sudo update-grub.

Sau đó, chúng tôi thực hiện những thay đổi tương tự trong hệ điều hành khác, chúng ta chỉ cần sử dụng tên gọi khác nhau cho menuentry, ig chúng ta thay đổi 16.04đến 15.04và vân vân.

Nếu chúng tôi chọn mục nhập menu này trong menu Grub trong khi khởi động, máy sẽ chỉ khởi động lại, chúng tôi đã tạo chúng để không khởi động bất kỳ HĐH nào mà để xem HĐH nào thực sự được sử dụng để tải grub.conf.

Thông tin thêm

Kiểu nhầm lẫn này xuất hiện, khi chúng tôi cài đặt nhiều HĐH, tất cả đều sử dụng Grub và trong quá trình cài đặt HĐH, chúng tôi chọn cùng một vị trí bộ tải khởi động. Chúng tôi thực sự chỉ cần một HĐH cài đặt Grub, Grub có thể khởi động vào bất kỳ bản phân phối Linux nào, vì vậy nếu chúng tôi có một bản phân phối được cài đặt (bao gồm Grub), chúng tôi có thể cài đặt thêm các HĐH mà không cần cài đặt Grub.

Trong cài đặt kế thừa, khá dễ dàng để xử lý vị trí cho cài đặt bộ tải khởi động, vì chúng ta có thể chọn phân vùng-boot-record làm vị trí, nhưng chúng ta phải cẩn thận để chọn phân vùng chính xác. Vì vậy, một HĐH sẽ cài đặt trình tải khởi động vào MBR và các HĐH bổ sung sẽ cài đặt trình tải khởi động vào PBR của phân vùng HĐH. Khả năng này chúng ta chỉ có khi chúng ta sử dụng Something else-option trong khi cài đặt.

Trong các cài đặt UEFI thì lạ hơn một chút, bộ tải khởi động sẽ được cài đặt vào một thư mục trong Phân vùng hệ thống EFI (ESP) và nhiều bộ tải khởi động có thể dễ dàng cùng tồn tại. Vấn đề ở đây là tất cả các hương vị Ubuntu và một số bản phân phối linux khác sẽ cài đặt Grub vào cùng một thư mục trong ESP và chúng tôi không có lựa chọn nào khác. Vì vậy, việc cài đặt một bản phân phối Linux bổ sung sẽ ghi đè lên trình tải khởi động đã có của chúng tôi. Cách duy nhất tôi biết để tránh điều này là khởi động vào phiên trực tiếp và khởi động trình cài đặt sudo ubiquity -b.

Một giải pháp đơn giản khác

Chúng ta hãy giả sử rằng chúng ta có ba bản phân phối Linux được cài đặt trên phân vùng sda1, sda2sda3. Bây giờ chúng ta hãy xem các mục menu khởi động của Grub. Trong quá trình khởi động, chúng ta sẽ thấy một cái gì đó như thế này:

1 Ubuntu
2 tùy chọn nâng cao cho Ubuntu
3 Kiểm tra bộ nhớ (memtest86 +)
4 Kiểm tra bộ nhớ (memtest86 +, bảng điều khiển nối tiếp 115200)
5 Ubuntu (trên / dev / sda2)
6 tùy chọn nâng cao cho Ubuntu (trên / dev / sda2)
7 Ubuntu 17.04 (trên / dev / sda3)
8 tùy chọn nâng cao cho Ubuntu (trên / dev / sda3)

Hai mục đầu tiên là các mục nhập cho HĐH đã tạo ra grub.conf-file mà chúng ta thực sự sử dụng. Các mục số 3 và 4 không thú vị vào lúc này. Các mục # 5, # 6, # 7 và # 8 là các mục được tạo bằng OS-prober và chúng tôi thấy các phân vùng của HĐH cho các mục này nằm trong đó. Vì vậy, trong trường hợp của ví dụ nhỏ này, chúng ta có thể kết luận rằng grub.config-file chúng ta thực sự sử dụng không thuộc về HĐH trên sda2hoặc sda3mà thuộc về HĐH trên sda1. Trong trường hợp một hoặc nhiều HĐH được cài đặt với một phần riêng biệt, /bootchúng tôi sẽ phải kiểm tra xem phần nào /bootthuộc về HĐH nào, nhưng điều đó được thực hiện dễ dàng bằng cách chạy phần mềm findmnttrong mỗi HĐH.


+1 Mặc dù dài dòng, câu trả lời này thực sự bao gồm các điểm có liên quan. Đối với các hệ thống BIOS, người dùng thực hiện đa khởi động nên ưu tiên "Cái gì khác" trong trình cài đặt để có nhiều quyền kiểm soát hơn; Không cần phải ép buộc "không cài đặt bộ tải khởi động GRUB" (xem câu trả lời cũ hơn của tôi ). Đối với các hệ thống UEFI, thiết lập đa khởi động dường như không giải thích được hoặc chưa được kiểm tra.
Clearkimura

1
lsblk

Và kiểm tra xem đĩa nào được gắn vào /. Vui lòng đọc các bình luận bên dưới hoặc câu trả lời của Ravexina nếu bạn có /bootđiểm được gắn kết.

Nếu bạn không chắc chắn, hãy kiểm tra UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT

2
Điều đó không đúng, nếu tôi /bootlà một phân vùng riêng thì sao? sau đó /boot/grub/grub.cfgkhông nằm trong /phân vùng.
Ravexina

@Ravexina Nhận kỹ thuật, điều đó có thể đúng. Tuy nhiên, với mục đích của người dùng này, không phải là /phân vùng?

@MarkYisri Tôi đoán rằng tôi nên nói rằng điều đó không phải lúc nào cũng đúng, tuy nhiên OP đang nói với chúng tôi rằng anh ấy đã nhận được tệp trên ba phân vùng khác nhau nên tôi đoán trước tiên nên kiểm tra riêng /boot.
Ravexina

1
Cảm ơn đã chỉ ra rằng @Ravexina tôi đã cập nhật câu trả lời.
Katu

0

Để biết người dùng đã khởi động từ phân vùng nào, hãy nhìn vào menu bộ tải khởi động trước khi khởi động bất kỳ hệ thống nào đã cài đặt. Thật khó để nói mà không nhìn thấy menu bộ tải khởi động.

Nhìn vào đâu

Trong các ảnh chụp màn hình kết hợp sau đây, tôi đã dán nhãn ba gợi ý mà người ta có thể biết từ phân vùng nào mà người dùng đã khởi động.

Menu đa khởi động sử dụng phiên bản GNU GRUB PC / BIOS có chú thích

Nhãn (1): Các mục trình đơn GNU GRUB bên dưới mục đầu tiên

Nhãn (2): Phiên bản GNU GRUB ở đầu trình đơn bộ tải khởi động

Nhãn (3): Hình nền GNU GRUB (yêu cầu thiết lập thủ công)

Gợi ý rõ ràng nhất là nhãn (3), đó là thay đổi hình nền GNU GRUB trên hệ thống có kiểm soát menu bộ tải khởi động. Đây là cách dễ nhất để nói, với điều kiện người dùng thiết lập trước.

Nhãn (1) đã giải thích

Tìm phân vùng không được liệt kê trong các mục menu bên dưới mục đầu tiên. Trong ảnh chụp màn hình, chỉ có hai hệ điều hành được cài đặt là "Ubuntu" và "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)

Cái sau đã được đề cập (on /dev/sda3), có nghĩa là cái trước có thể nằm trên /dev/sda2hoặc /dev/sda1. Để chắc chắn, sau khi khởi động hệ thống, tức là "Ubuntu", hãy chạy lệnh có liên quan để liệt kê các phân vùng có sẵn ( lsblkdường như là đơn giản nhất).

$ 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 

Chỉ sau khi so sánh với đầu ra của lsblk, thì chúng ta mới biết rằng hệ thống tức là "Ubuntu" được tìm thấy tại /dev/sda2( không được liệt kê trong các mục menu) từ đó trình đơn bộ tải khởi động được quản lý.

Nhãn (2) giải thích

Tìm phiên bản GRUB được in ở đầu trình đơn bộ tải khởi động. Lưu ý rằng phiên bản đó và so sánh với phiên bản GRUB được tìm thấy trên hệ thống đã khởi động, tức là "Ubuntu".

Trong ảnh chụp màn hình (nửa dưới): GNU GRUB version 2.02~beta2-9

Sau khi khởi động hệ thống tức là "Ubuntu", hãy chạy lệnh có liên quan để kiểm tra phiên bản của gói GRUB ( grub-install --versioncó liên quan và đơn giản nhất).

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

Làm thế nào điều này có liên quan? Bởi vì grub-installupdate-grubcác lệnh đều được cung cấp bởi cùng một gói grub2-common. Cho rằng menu bộ tải khởi động được tạo và cập nhật bằng các công cụ từ cùng một gói, phiên bản in ở đầu trình đơn bộ tải khởi động sẽ giống nhau.

Nhãn (3) giải thích

Gợi ý này yêu cầu phải được thiết lập thủ công, vì hình nền mặc định của menu bộ tải khởi động là không có (chỉ đơn giản là màu đen). Hình nền phải có độ sâu 8 bit.

Nếu desktop-basegói được cài đặt trên hệ thống của bạn, những hình nền như vậy được tạo riêng cho GRUB có thể dễ dàng tìm thấy với hậu tố tên tệp *grub.pngtrong thư mục đích.

$ 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

Để thiết lập hình nền:

  1. Mở /etc/default/grubtệp dưới dạng siêu người dùng, sau đó thêm dòng GRUB_BACKGROUND=có đường dẫn đầy đủ vào hình ảnh bạn chọn và trích dẫn.

    $ 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. Sau đó, chạy sudo update-grubđể cập nhật /boot/grub/grub.cfgbao gồm menu bộ tải khởi động. Người dùng sẽ thấy đầu ra tương tự như sau.

    $ 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. Khởi động lại máy và xem menu trình tải khởi động có bất kỳ thay đổi rõ ràng nào được thực hiện bởi lệnh cập nhật từ hệ thống.

Khác, lặp lại các bước cho các hệ thống khác, từng bước một. Các bước lặp đi lặp lại sẽ không cần thiết, người dùng nên biết hệ thống nào có quyền kiểm soát menu trình tải khởi động (một lần nữa, điều này phụ thuộc vào cách cài đặt được thực hiện).

Khước từ

Câu trả lời này giải thích cho các tiêu chí đã được kiểm chứng và thử nghiệm tốt cho hệ thống BIOS với thiết lập đa khởi động bằng phiên bản GNU GRUB PC / BIOS. Các ngoại lệ sau đây sẽ được áp dụng.

  • Đối với bản sao hệ thống UEFI sử dụng phiên bản GNU GRUB EFI, không được bảo đảm hoặc không biết liệu các tiêu chí có vẻ giống như được mô tả ở trên không.

  • Nhấn mạnh được trao cho giao diện của trình tải khởi động (làm thế nào nó có thể xuất hiện khác nhau, tức là nửa trên cùng của ảnh chụp màn hình) thay vì thể hiện cách hoạt động của chuỗi tải. Như vậy, liên quan đến "cách đa khởi động được thiết lập như nhìn thấy trong ảnh chụp màn hình" sẽ không được giải thích trong câu trả lời này.

  • Nếu thiết lập đa khởi động được tạo từ các bản sao chính xác của cùng một hệ điều hành tương tự như Ubuntu 14.04, Kubfox 14.04, Xubfox 14.04, v.v., thì cách duy nhất đáng tin cậy để biết phân vùng mà người dùng đã khởi động là nhãn (3).

  • Nhãn (3) có thể hoạt động tốt hơn bằng cách sử dụng hình nền tùy chỉnh ghi rõ ràng từ đó được khởi động, tức là "Menu khởi động này được quản lý từ / dev / sda1". Tương tự, liên quan đến "cách tạo hình nền tùy chỉnh cho GRUB" sẽ không được giải thích trong câu trả lời này.

TL; DR Nhìn vào menu bộ tải khởi động trước khi khởi động bất kỳ hệ thống nào đã cài đặt. Cách dễ nhất và đáng tin cậy nhất để biết là nhãn (3), đó là thiết lập hình nền GRUB theo cách thủ công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.