我有一台具有多启动分区的机器。我在一个分区上安装了 Ubuntu 14.04,在第二个分区上安装了 Ubuntu 15.04,在第三个分区上安装了 Ubuntu 16.04。有没有办法从命令行知道我从哪个分区启动,以便找到/boot/grub/grub.cfg
用于启动过程的分区?我/boot/grub/grub.cfg
在三个分区上都有。
答案1
一旦 GRUB 将启动权移交给内核,内核就不知道是什么启动了它,而且/boot
可能不是 GRUB 使用的那个。您可以检查boot/grub/grub.cfg
每个分区的访问时间,看看最近访问的是哪一个。这样您就可以知道 GRUB 使用了哪个分区的配置文件。
stat -c %x /boot/grub/grub.cfg
如果访问时间没有更新,则必须查找各个 GRUB 配置文件使用的内核参数是否有任何差异。如果您可以更改它们,例如,在每个配置文件中添加foo=1
、foo=2
等,然后运行并重新启动,然后您可以检查使用了这些值中的哪些。GRUB_CMDLINE_LINUX
sudo update-grub2
/proc/cmdline
答案2
要显示当前已安装的根文件系统的设备:
awk '$2=="/"{print $1}' /proc/mounts
要显示当前运行的 Ubuntu 发行版本:
lsb_release -rs
答案3
如您所知,您正在寻找的文件位于/boot
您正在运行的系统的目录中。要么/boot
是单独的分区,要么不是;如果您的/boot
是一个单独的分区,您应该寻找:
$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot
意味着grub.cfg
被使用的位于sda2
。
否则你应该寻找root
:
$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /
这次它位于sda1
。
或者甚至乐趣我们可以检查启动时间参数:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet
然后使用它UUID
来找出哪个分区是你的根分区。
$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"
意思是从sda1
。
您还可以检查这些启动参数以查看哪个grub.cfg
文件包含它们,这仅当您的启动参数grub.cfg
彼此不同时才有效。
答案4
lsblk
并检查哪个磁盘已挂载。如果您的挂载点中/
有,请阅读下面的评论或 Ravexina 的回答。/boot
如果你不确定,请检查 UUID
lsblk -o UUID,NAME,SIZE,MOUNTPOINT