diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl index c3652e8835117d..7b0890e8ad40f2 100644 --- a/nixos/modules/system/boot/loader/grub/install-grub.pl +++ b/nixos/modules/system/boot/loader/grub/install-grub.pl @@ -110,6 +110,7 @@ sub runCommand { # Discover information about the location of the bootPath struct(Fs => { device => '$', + root => '$', type => '$', mount => '$', }); @@ -117,12 +118,12 @@ sub runCommand { # Figure out what filesystem is used for the directory with init/initrd/kernel files sub GetFs { my ($dir) = @_; - my ($status, @pathInfo) = runCommand("@utillinux@/bin/findmnt", "-n", "-v", "-o", "SOURCE,FSTYPE,TARGET", "-T", @{[$dir]}); + my ($status, @pathInfo) = runCommand("@utillinux@/bin/findmnt", "-n", "-v", "-o", "SOURCE,FSROOT,FSTYPE,TARGET", "-T", @{[$dir]}); if ($status != 0 || @pathInfo != 1) { die "Failed to get file system (returned $status) for @{[$dir]}"; } my @fields = split /\s+/, $pathInfo[0]; - return Fs->new(device => $fields[0], type => $fields[1], mount => $fields[2]); + return Fs->new(device => $fields[0], root => $fields[1], type => $fields[2], mount => $fields[3]); } struct (Grub => { path => '$', @@ -132,10 +133,7 @@ sub GetFs { sub GrubFs { my ($dir) = @_; my $fs = GetFs($dir); - my $path = substr($dir, length($fs->mount)); - if (substr($path, 0, 1) ne "/") { - $path = "/$path"; - } + my $path = $fs->root . substr($dir, length($fs->mount)); my $search = ""; # ZFS is completely separate logic as zpools are always identified by a label