我正在尝试从头开始手动将 Debian 安装到 Live Debian CD 中的外部磁盘上。
我按照说明通过 multistrap 创建了 Debian Stretch rootfs从这里 (44fbcc
)。
在内部chroot
环境中,当涉及到Grub安装时,我将Grub2安装到MBR:
debian:~# grub-install /dev/sdX --boot-directory=/boot
命令运行没有错误。当我需要创建 时/boot/grub/grub.cfg
,它会抛出以下错误:
debian:~# grub-mkconfig
/usr/sbin/grub-probe: error: cannot find a device for / (is /dev mounted?).
是的,/dev
与 、 一起安装/sys
,/proc
并且/run
这里。
如何生成grub.cfg
内部chroot
环境?
答案1
错误消息的有意义部分是cannot find a device for /
,因为mount
命令不输出 的设备条目/
。
我在问题中没有告诉的是我试图将 rootfs 直接安装到 BTRFS 子卷中。显然,在这种情况下chroot
无法检测到设备。/
这是我当前正在做的事情:(X
是根分区(设备),Y
是启动分区)
host:# mount /dev/X /mnt/mydiskroot
host:# btrfs sub create /mnt/mydiskroot/rootfs
host:# mkdir /mnt/mydiskroot/rootfs/boot
host:# mount /dev/Y /mnt/mydiskroot/rootfs/boot
host:# rsync -avP debian-stretch-rootfs/ /mnt/mydiskroot/rootfs
host:# do-chroot.sh /mnt/mydiskroot/rootfs
root@guest:/# mount | awk '$3 == "/" {print}' # nothing shows up, so update-grub throws the mentioned error
这是我解决的方法:
root@guest:/# exit
host:# mkdir /mnt/actual-rootfs
host:# mount -t btrfs -o subvol=rootfs,defaults /dev/X /mnt/actual-rootfs/
host:# umount /dev/Y
host:# mount /dev/Y /mnt/actual-rootfs/boot
host:# do-chroot.sh /mnt/actual-rootfs
root@guest:/# mount | awk '$3 == "/" {print}'
/dev/X on / type btrfs (rw,relatime,space_cache,subvolid=257,subvol=/rootfs)
root@guest:/# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.9.0-11-amd64
Found initrd image: /boot/initrd.img-4.9.0-11-amd64
done